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 的回复,便尝试一下,在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关键字。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小讲堂

iBatis.Net(2):基本概念与配置

写完第一篇,有朋友给我发邮件,说想让我配合实例写会不会更好一些,可是呢,我觉得这就相当于那些北大的什么鸟给无辜的孩子们吃快餐一样,我是坚决反对那样的,知其然不知...

2837
来自专栏数据之美

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应...

1.2K7
来自专栏张善友的专栏

替换EnterPrise Library 4.0 缓存应用程序块的CacheManager

缓存是用来提高应用程序性能的常见技术,其实现方式是将常用数据从慢数据源复制到更快的数据源。对于数据驱动的应用程序来说,该技术通常需要将从数据库或 Web 服务检...

2017
来自专栏跟着阿笨一起玩NET

Microsoft SyncToy 文件同步工具

SyncToy 是由 微软 推出的一款免费的文件夹同步工具。虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了。实际上,我感觉这款软件还真是摆脱了...

1472
来自专栏周明礼的专栏

一步一步带你搭建一个“摩登”的前端开发环境

最近几年也陆续推出了多种不同的js类型系统用于增强js的健壮性,其中像 typescript 就是其中的佼佼者。当然我今天要讲的并不是typescript,而是...

1.5K0
来自专栏菩提树下的杨过

scala + intellij idea 环境搭建及编译、打包

大数据生态圈中风头正旺的Spark项目完全是采用Scala语言开发的,不懂Scala的话,基本上就没法玩下去了。Scala与Java编译后的class均可以运行...

8897
来自专栏腾讯NEXT学位

JavaScript Worker 另类玩法

1243
来自专栏游戏杂谈

svn导出文件进行比较

之前有介绍svn log 的命令,即可导出版本A~B之间所有的修改动作,然后复制出相应的文件(中间有一个算法去处理每一个动作,然后得到最终需要导出的文件列表,...

1863
来自专栏mini188

Openfire集群源码分析

如果用户量增加后为了解决吞吐量问题,需要引入集群,在openfire中提供了集群的支持,另外也实现了两个集群插件:hazelcast和clustering。为了...

2419
来自专栏linux、Python学习

黑客们会用到哪些Python技术?

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工具)。Python允许开发...

2144

扫码关注云+社区

领取腾讯云代金券