使用不同的manifestPlaceholder每个构建变量 [英] Using a different manifestPlaceholder for each Build Variant
问题描述
我会说,我是很新的摇篮开始,所以我道歉,如果这已经回答了。
I will start by saying that I am very new to Gradle, so I apologize if this has already been answered.
我正在使用API密钥来访问第三方工具的Android应用程序。不同的API密钥需要根据双方在味道和生成类型的应用程式。要使用
I'm working on an Android application that uses an API key to access a 3rd party tool. A different API key needs to be used depending on both the flavor and build type of the app.
下面是我想要做一个基本轮廓:
Here is a basic outline of what I'm trying to do:
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
语句是从内部工作的一个非常简单的例子,但我不知道如何引用 buildType productFlavors 块,这样我可以用它作为条件。
So far the manifestPlaceholders
statement is working in a very simple case, but I don't know how to reference the buildType from within the productFlavors block so that I can use it as a conditional.
推荐答案
我猜你指的是面料ApiKey? :)我只花了几个小时试图做到这一点与占位符类似的方式,并在gradle这个文件中指定ApiKey虽然它似乎不可能的,因为 com.android.tools.build:gradle:1.3的.1
。有可能以指定的占位符为特定的风味,但没有为味道与buildType。
I would guess that you are referring to Fabric ApiKey? :) I just spent hours trying to do it in a similar way with the placeholders and specifying the ApiKey in the gradle file although it does not seem possible as of com.android.tools.build:gradle:1.3.1
. It is possible to specify a placeholder for a specific flavor but not for a flavor AND buildType.
只是为了纠正你的语法,你将有办法做到这一点(的如果有可能的)会是这样的,但manifestPlaceholders未知的变种。
Just to correct your syntax, the way you would have to do it (if it was possible) would be something like that but manifestPlaceholders are unknown to variants.
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
键和处理它与多个清单文件
What you actually need to do is to keep the key in the AndroidManifest.xml
and handle it with multiple manifest file
的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将处理更换和你最终会在每个场景中正确的密钥。我只是实现它成功。我只是希望你真的指的是面料的关键! :)
The manifestMerger will handle the replacement and you will end up with the proper key in every scenario. I just implemented it successfully. I just hope you were really referring to the Fabric key! :)
希望这有助于!
这篇关于使用不同的manifestPlaceholder每个构建变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!