還記得我在此文【技巧】ionic3優(yōu)雅解決啟動(dòng)前冷守、后黑白屏問(wèn)題中添加了一個(gè)勾子插件cordova-custom-config來(lái)修改配置的主題锐朴。
Cordova在6.4.0版本以后辆床,增加了config-file和edit-config兩個(gè)標(biāo)簽項(xiàng),使得不需要再借用上述勾子插件即可修改配置蹦误,見(jiàn)文檔彼妻。
其中注意一下,config-file是用于添加配置項(xiàng)杆故,而edit-config是用于編輯配置項(xiàng)的.
現(xiàn)在cordova默認(rèn)添加都7.0以上了迅箩,而降級(jí)到6.4.0也能兼容舊項(xiàng)目,那嘗試去掉勾子插件去把上述文章中的配置方式改一下处铛。
打開config.xml饲趋,添加配置項(xiàng):
<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>
然后執(zhí)行命令看效果:
ionic cordova build android
此時(shí)會(huì)拋出異常:
cordova AAPT: error: unbound prefix
搜索之,首先找到此文:
https://stackoverflow.com/questions/21115471/android-phonegap-error-error-parsing-xml-unbound-prefix
里面回復(fù)的意思是罢缸,用到一個(gè)未知標(biāo)簽或?qū)傩詴r(shí)要先綁定一個(gè)前綴篙贸。如用到了<gap:plugin>,所以應(yīng)該先綁定以下命名空間:
xmlns:gap="http://phonegap.com/ns/1.0"
為了驗(yàn)證這種想法枫疆,又搜索此文:
https://forum.ionicframework.com/t/cordova-ionic-cli-hooks-for-modifying-androidmanifest-xml-or-ios-plist-file/12293/20
看標(biāo)題和我們的使用場(chǎng)景有點(diǎn)出入爵川,但還是我常說(shuō)的一句話——殊途同歸,原理差不多息楔,等找到此人 AshConnell 的回復(fù)寝贡,便嘗試一下,在config.xml文件最外層widget標(biāo)簽中添加xmlns:android="http://schemas.android.com/apk/res/android"
值依,變成:
<widget xmlns:android="http://schemas.android.com/apk/res/android">
再跑一次命令ionic cordova build android
圃泡,沒(méi)有錯(cuò)誤,能正常生成愿险。此時(shí)打開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>
發(fā)現(xiàn)正確合并替換主題theme颇蜡,至此大功告成。
總結(jié):為什么要引入xmlns:android這個(gè)命名空間前綴辆亏,是因?yàn)閏onfig.xml里面用到了這句
<activity android:theme="@style/WelcomeStyle" />
风秤,不加入無(wú)法識(shí)別android關(guān)鍵字。