gpt4 book ai didi

android - 如何用 Android Gradle 替换字符串资源

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

我在 Android Studio 中用 gradle 制作了一个新应用,现在我需要制作大约 10 个版本,在资源中具有不同的包名称和值。我像示例一样制作了自定义 flavor ,并希望用自定义值替换此自定义 flavor 中的一些字符串。我找到了这样的例子:

filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: ['version': '2.2'])

但我不知道该放在哪里。据我了解,我需要将其放入单独的任务中,但是如何使 IDE 调用此任务?

我还需要替换 Java 类和 Content Provider 的身份验证中的几个变量,也许我需要通过将文件复制到 flavor1 文件夹并让 gradle 合并它来做到这一点,但存储多个文件副本似乎是错误的解决方案一条线的区别...也许我需要使用其他解决方案来解决所有这些问题?

这里是 build.gradle:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'

dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':JazzyListView')
compile project(':ABS')
compile project(':Volley')
}

android {
compileSdkVersion 17
buildToolsVersion "17.0.0"

defaultConfig {
versionCode 5
versionName "3.0"
minSdkVersion 8
targetSdkVersion 17
}

sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
}

productFlavors {
flavor1 {
packageName "com.example.flavor1"
}

flavor2 {
packageName "com.example.flavor2"
}

}

}

最佳答案

我遇到了类似的问题。我想将 Jenkins 内部版本号添加到从 strings.xml 合并的字符串中。这是我从 Android Gradle 插件 0.12.+ 开始的解决方案。

// Insert the build number into strings.xml
android.applicationVariants.all{ variant ->
variant.mergeResources.doLast{
ext.env = System.getenv()
def buildNumber = env.BUILD_NUMBER
if (buildNumber != null) {
File valuesFile = file("${buildDir}/intermediates/res/${variant.dirName}/values/values.xml")
println("Replacing revision number in " + valuesFile)
println("Build number = " + buildNumber)
String content = valuesFile.getText('UTF-8')
content = content.replaceAll(/devBuild/, buildNumber)
valuesFile.write(content, 'UTF-8')
}
}
}

您可能希望根据您想要执行的操作 Hook 到不同的 Gradle 任务。看看作为 Android 构建一部分的任务来解决这个问题。

http://tools.android.com/tech-docs/new-build-system/user-guide

更新:在某些时候,Android Gradle 插件将迭代应用程序变体关键字的方式从 each 更改为 all。我的答案已更新以反射(reflect)更改,但如果此代码未将任何内容打印到控制台,请尝试切换到 each

关于android - 如何用 Android Gradle 替换字符串资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17275461/

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