Manifest值可以依赖于build.gradle文件

时间:2017-02-28 14:48:03

标签: android android-gradle

我正在研究一种多味产品。我希望能够在每种风格的清单中禁用和启用组件。我已经能够通过以下方式从bool.xml文件到AndroidManifest.xml创建这样的依赖:

<activity
    android:name=".ui.activities.SpecialActivity"
    android:enabled="@bool/is_activity_enabled_in_manifest"/>

我可以从build.gradle到AndroidManifest.xml创建相同的依赖项吗?

1 个答案:

答案 0 :(得分:2)

看看Manifest Placeholders

基本上,您在gradle文件中指定变量:

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
    }
    ...
}

然后从AndroidManifest.xml

中引用它们
<intent-filter ... >
    <data android:scheme="http" android:host="${hostName}" ... />
    ...
</intent-filter>    

在您的情况下,这可能适用:

android {
    defaultConfig {
        manifestPlaceholders = [ isActivityEnabled:"true" ]
    }

    buildTypes{
        debug{
            // Some debug setup
        }
        release{
            // Some release setup
        }
    }

    productFlavors {
        // List of flavor options
    }
    productFlavors.all{ flavor->
        if (flavor.name.equals("someFlavor")) {
            if (buildType.equals("release")) {
                manifestPlaceholders = [ isActivityEnabled:"false" ]
            } else {
                manifestPlaceholders = [ isActivityEnabled:"false" ]
            }
        } else {
            if (buildType.equals("release")) {
                manifestPlaceholders = [ isActivityEnabled:"true" ]
            } else {
                manifestPlaceholders = [ isActivityEnabled:"true" ]
            }    
        }
    }
}

上面的代码段取自this问题。