gpt4 book ai didi

android - 用 gradle 构建 android,替换每个产品 flavor 的字符串

转载 作者:IT老高 更新时间:2023-10-28 23:17:08 24 4
gpt4 key购买 nike

在我为两个不同的应用程序构建 android 项目之前付费和免费。

我更改了每个值和字符串,所以昨天我犯了一个大错误。

所以,我正在学习如何使用 gradle 来构建我的应用程序。

我的应用有一些不同之处。

  1. 应用名称(只需添加后缀'-Free')-> values/string.xml

  2. 更改我的 *.java 中的标志

//省略了signingConfigs。

productFlavors{
free{
packageName "my.app.free"
versionCode 20
signingConfig signingConfigs.freeConfing

copy{
from('/res'){
include '**/*.xml'
}
into 'build/res/'

filter{
String line -> line.replaceAll("android:label=\"@string/app_name\"", "android:label=\"@string/app_name_free\"")
}
}
copy{
from('/src'){
include '**/*.java'
}
into 'build/src/'

filter{
String line -> line.replaceAll("public static final Boolean IS_FULL_VER = true;", "public static final Boolean IS_FULL_VER = false;")
}
}
}
paid{
packageName "my.app.paid"
versionCode 20
signingConfig signingConfigs.paidConfing
}
}

但是,构建的应用完全没有改变。

我错过了什么?

最佳答案

参见product flavor的文档:

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors

在您的 build.gradle 中,在每种风格中,您都可以定义要在 BuildConfig.java 文件中生成的标志:

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>

您可能能够以不同的方式覆盖字符串,但为了清晰起见,我希望将被覆盖的字符串与其他字符串分开。

关于android - 用 gradle 构建 android,替换每个产品 flavor 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com