Android manifestmerger忽略了Cordova构建中的node = replace标记

时间:2015-03-10 14:54:18

标签: android cordova android-manifest

在我的Cordova应用程序中,我正在尝试从库中更改活动的行为(需要隐藏标题栏);我将此添加到AndroidManifest.xml

<activity android:name="com.salesforce.androidsdk.ui.LoginActivity" 
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />

并出现此错误(为简洁起见,第3行的路径缩短了):

[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Merging manifests from project and 4 libraries.
[mergemanifest] Error: [.../app/platforms/android/AndroidManifest.xml:21, .../app/plugins/com.salesforce/src/android/libs/SalesforceSDK/AndroidManifest.xml:16] Trying to merge incompatible /manifest/application/activity[@name=com.salesforce.androidsdk.ui.LoginActivity] element:
[mergemanifest]   <activity
[mergemanifest]       @android:name="com.salesforce.androidsdk.ui.LoginActivity"
[mergemanifest] --    @android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
[mergemanifest]   <activity
[mergemanifest]       @android:name="com.salesforce.androidsdk.ui.LoginActivity"
[mergemanifest] ++    @android:theme="@style/SalesforceSDK.ActionBarTheme">

我不想修改图书馆的清单,所以我尝试使用标记as described in the merger docs在我的应用清单中覆盖它。首先,我将xmlns:tools="http://schemas.android.com/tools"添加到我的<manifest>元素,然后我更新了冲突行:

<activity android:name="com.salesforce.androidsdk.ui.LoginActivity" 
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 
          tools:replace="theme" />

虽然你可以看到它看到了新属性,但仍然失败了:

[mergemanifest]   <activity
[mergemanifest]       @android:name="com.salesforce.androidsdk.ui.LoginActivity"
[mergemanifest] --    @android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
[mergemanifest] --    @tools:replace="theme">
[mergemanifest] --</activity>
[mergemanifest]   <activity
[mergemanifest]       @android:name="com.salesforce.androidsdk.ui.LoginActivity"
[mergemanifest] ++    @android:theme="@style/SalesforceSDK.ActionBarTheme">
[mergemanifest] ++</activity>

我也试过了tools:node=”replace”,但是从文档中的示例来看,应该在父文件中(在这种情况下,application),如果不了解所有内容,我宁愿不这样做其他合并可能会受到影响。那么,为什么忽略tools:replace="theme"

1 个答案:

答案 0 :(得分:0)

您可以使用A文件中的config-file属性修改Manifest的标记属性。

在这种特殊情况下,您必须将命名空间添加到插件XML文件的根元素中。

plugin.xml

而不是

<plugin id="myapp" version="0.0.1" xmlns:tools="http://schemas.android.com/tools">

注意:永远不要直接修改<config-file parent="/*" target="AndroidManifest.xml" mode="merge"> <application tools:replace="android:label"/> </config-file>