请参阅有关的文档product flavors
:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors
In your build.gradle
,在每种风格中,您可以定义要在您的BuildConfig.java
file:
productFlavors {
free {
packageName "com.company.appfree"
buildConfig "public final static com.company.common.MonetizationType monetizationType = com.company.common.MonetizationType.FREE;"
}
paid {
packageName "com.company.apppaid"
buildConfig "public final static com.company.common.MonetizationType monetizationType = com.company.common.MonetizationType.PAID;"
}
}
此示例使用枚举(您需要在 java 代码中的某处定义):
public enum MonetizationType {
PAID, FREE
}
您现在可以在任何地方使用它,如下所示:
if (BuildConfig.monetizationType == MonetizationType.FREE) { ... }
对于覆盖资源,您可以在源文件夹中为每种风格创建不同的资源文件:
使用以下结构
app/build.gradle
app/ [.. some other files...]
app/src/main/
app/src/main/java
app/src/main/res
app/src/main/assets
app/src/main/AndroidManifest.xml
app/src/free/res/values/apptitle.xml
app/src/paid/res/values/apptitle.xml
apptitle.xml 将是一个字符串资源文件(就像 strings.xml 一样),但只有一个字符串:您希望根据风格而有所不同的字符串。
(您的 main/res 目录中不需要有 apptitle.xml)。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_title">App Title (or whatever you want)</string>
</resources>
您也许能够以不同的方式覆盖字符串,但为了清楚起见,我喜欢将覆盖的字符串与其余字符串分开。