我首先要说我是Gradle的新手,因此,如果这个问题已经得到解答,我深表歉意。
我正在使用API密钥访问第三方工具的Android应用程序上工作。需要根据应用程序的 flavor 和构建类型使用不同的API密钥。
这是我要执行的操作的基本概述:
android {
defaultConfig {
manifestPlaceholders = [ apiKey:"DEBUG_KEY" ]
}
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 = [ apiKey:"RELEASE_KEY_1" ]
} else {
manifestPlaceholders = [ apiKey:"DEBUG_KEY" ]
}
} else {
if (buildType.equals("release")) {
manifestPlaceholders = [ apiKey:"RELEASE_KEY_2" ]
} else {
manifestPlaceholders = [ apiKey:"DEBUG_KEY" ]
}
}
}
}
到目前为止,
manifestPlaceholders
语句在非常简单的情况下工作,但是我不知道如何从 productFlavors 块中引用 buildType ,以便可以将其用作条件。 最佳答案
我猜您是指Fabric ApiKey吗? :)我只是花了几个小时尝试用占位符类似的方式并在gradle文件中指定ApiKey,尽管从com.android.tools.build:gradle:1.3.1
来看这似乎是不可能的。可以为特定 flavor 指定占位符,但不能为 flavor AND buildType指定占位符。
只是为了更正语法,您必须采取的方式(如果可能的话)将是类似的方式,但manifestPlaceholders对于变体是未知的。
applicationVariants.all{ variant->
if (variant.productFlavors.get(0).name.equals("someFlavor")) {
if (variant.buildType.name.equals("release")) {
manifestPlaceholders = [ apiKey:"RELEASE_KEY_1" ]
} else {
manifestPlaceholders = [ apiKey:"DEBUG_KEY" ]
}
} else {
if (variant.buildType.name.equals("release")) {
manifestPlaceholders = [ apiKey:"RELEASE_KEY_2" ]
} else {
manifestPlaceholders = [ apiKey:"DEBUG_KEY" ]
}
}
}
您实际需要做的是将密钥保留在
AndroidManifest.xml
中,并使用多个 list 文件处理它src / AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<meta-data
android:name="io.fabric.ApiKey"
android:value="DEBUG_KEY" tools:replace="android:value"/>
</application>
</manifest>
src / someFlavorRelease / AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<meta-data
android:name="io.fabric.ApiKey"
android:value="RELEASE_KEY_1" tools:replace="android:value"/>
</application>
</manifest>
src / someOtherFlavorRelease / AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<meta-data
android:name="io.fabric.ApiKey"
android:value="RELEASE_KEY_2" tools:replace="android:value"/>
</application>
</manifest>
manifestMerger将处理替换,您将在每种情况下使用正确的密钥。我刚刚成功实现了它。我只是希望您真的是在指Fabric键! :)
希望这可以帮助!