美文网首页ionic3+我的ionic
Cordova@6.4.0以上灵活修改配置

Cordova@6.4.0以上灵活修改配置

作者: IT晴天 | 来源:发表于2018-06-04 18:03 被阅读50次

    还记得我在此文【技巧】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" />,不加入无法识别。

    相关文章

      网友评论

        本文标题:Cordova@6.4.0以上灵活修改配置

        本文链接:https://www.haomeiwen.com/subject/eyeesftx.html