我在 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/