Gradle清单合并丢失了属性

时间:2014-09-29 13:25:14

标签: android gradle android-manifest

我有一个有几种构建风格的应用程序。我的主要AndroidManifest.xml的一部分如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="some.test.app"
    android:installLocation="auto"
    android:versionCode="36"
    android:versionName="v1.0.3" >

    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" />
    <uses-feature android:name="android.hardware.usb.host" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name=".MyApp"
        android:icon="@drawable/app_logo"
        android:label="@string/app_name" >
        <!-- possible values: dev, demo, prod -->
        <meta-data
            android:name="app_build_type"
            android:value="dev" />
    </application>
</manifest>

示例特定于风险的(demo)清单如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="some.test.app">

    <application>
        <meta-data
            android:name="app_build_type"
            android:value="demo"
            tools:replace="value"/>
    </application>
</manifest>

gradle merge的结果如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="some.test.app"
    android:versionCode="36" >

    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" />
    <uses-feature android:name="android.hardware.usb.host" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name="some.test.app.MyApp"
        android:icon="@drawable/app_logo"
        android:label="@string/app_name" >
        <meta-data
            android:name="app_build_type"
            android:value="demo" />
    </application>
</manifest>

正如您所看到的,除了manifest.installLocationmanifest.versionName之外,大多数节点和属性都已正确合并,而manifest.versionCode和{{1}}完全消失,而{{1}}仍然存在。造成这种情况的原因是什么?如何解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

通过提供UI应用和服务,我遇到了同样的问题。当构建过程自动进行合并时,无论两个AndroidManifest.xml都是否具有正确的版本,它都会维护1.0版本。我的解决方案是在相应的build.gradle文件中添加以下两个字段:

defaultConfig {
    minSdkVersion 9
    targetSdkVersion 22
    versionCode 664
    versionName "664"
}

664是你的版本。我希望这有帮助!

答案 1 :(得分:0)

转到菜单"Build">>"Edit Flavors"标签"Flavors"并在其中插入版本代码和版本名称