Cordova@6.4.0以上灵活修改配置

还记得我在此文【技巧】ionic3优雅解决启动前、后黑白屏问题中添加了一个勾子插件cordova-custom-config来修改配置的主题。

Cordova在6.4.0版本以后,增加了config-file和edit-config两个标签项,使得不需要再借用上述勾子插件即可修改配置,见文档

其中注意一下,config-file是用于添加配置项,而edit-config是用于编辑配置项的.

现在cordova默认添加都7.0以上了,而降级到6.4.0也能兼容旧项目,那尝试去掉勾子插件去把上述文章中的配置方式改一下。

打开config.xml,添加配置项:

<platform name="android">
     <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity[@android:name='MainActivity']">
            <activity android:theme="@style/WelcomeStyle" />
     </edit-config>
</platform>

然后执行命令看效果:

ionic cordova build android

此时会抛出异常:

cordova AAPT: error: unbound prefix

搜索之,首先找到此文:
https://stackoverflow.com/questions/21115471/android-phonegap-error-error-parsing-xml-unbound-prefix
里面回复的意思是,用到一个未知标签或属性时要先绑定一个前缀。如用到了<gap:plugin>,所以应该先绑定以下命名空间:

xmlns:gap="http://phonegap.com/ns/1.0"

为了验证这种想法,又搜索此文:
https://forum.ionicframework.com/t/cordova-ionic-cli-hooks-for-modifying-androidmanifest-xml-or-ios-plist-file/12293/20

看标题和我们的使用场景有点出入,但还是我常说的一句话——殊途同归,原理差不多,等找到此人 AshConnell 的回复,便尝试一下,在config.xml文件最外层widget标签中添加xmlns:android="http://schemas.android.com/apk/res/android",变成:

<widget xmlns:android="http://schemas.android.com/apk/res/android"> 

再跑一次命令ionic cordova build android,没有错误,能正常生成。此时打开platform/android/AndroidManifest.xml 文件观察下效果:

    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
            android:label="@string/activity_name"
            android:launchMode="singleTop" 
            android:name="MainActivity" 
            android:theme="@style/WelcomeStyle" 
            android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

发现正确合并替换主题theme,至此大功告成。

总结:为什么要引入xmlns:android这个命名空间前缀,是因为config.xml里面用到了这句<activity android:theme="@style/WelcomeStyle" />,不加入无法识别android关键字。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容