前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cordova@6.4.0以上灵活修改配置

Cordova@6.4.0以上灵活修改配置

作者头像
IT晴天
发布2018-08-20 10:59:17
1.3K0
发布2018-08-20 10:59:17
举报
文章被收录于专栏:ionic3+ionic3+

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

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

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

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

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

代码语言:javascript
复制
<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>

然后执行命令看效果:

代码语言:javascript
复制
ionic cordova build android

此时会抛出异常:

cordova AAPT: error: unbound prefix

搜索之,首先找到此文:

https://stackoverflow.com/questions/21115471/android-phonegap-error-error-parsing-xml-unbound-prefix

里面回复的意思是,用到一个未知标签或属性时要先绑定一个前缀。如用到了<gap:plugin>,所以应该先绑定以下命名空间:

代码语言:javascript
复制
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 的回复,便尝试一下,在widget标签中添xmlns:android="http://schemas.android.com/apk/res/android",变成:

代码语言:javascript
复制
<widget xmlns:android="http://schemas.android.com/apk/res/android"> 

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

代码语言:javascript
复制
    <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关键字。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档