我正在搜索与BuildConfig相关的其他问题。我找不到任何适合我问题的答案。
我想基于它们的变体生成具有不同版本名称和代码的apks。
例如:
Flavor1Debug.apk
versionName = 1000
versionCode = 1000
Flavor1Release.apk
versionName = 1001
versionCode = 1001
Flavor2Debug.apk
versionName = 4000
versionCode = 4000
Flavor2Release.apk
versionName = 4001
versionCode = 4001
我创建了一个存储my flavor版本的文件。 “version.properties”
flavor1VersionCode=1000
flavor1VersionName=1000
flavor2VersionCode=4000
flavor2VersionName=4000
项目结构
/Projectroot
---/src
---/assets
---/res
---/jni
---/libs
---/flavor
----/flavor1
----/flavor2
这是我的gradle脚本示例
build.gradle
android {
def versionPropsFile = file('version.properties')
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
flavor1VersionCode = versionProps['flavor1VersionCode'].toInteger()
flavor1VersionName = versionProps['flavor1VersionName'].toString()
flavor2VersionCode = versionProps['flavor2VersionCode'].toInteger()
flavor2VersionName = versionProps['flavor2VersionName'].toString()
productFlavors {
productFlavor1 {
versionCode = flavor1VersionCode
versionName = flavor1VersionCode
}
productFlavor2 {
versionCode = flavor2VersionCode
versionName = flavor2VersionCode
}
}
buildTypes {
debug {
}
release {
}
}
}
答案 0 :(得分:1)
已经七个月了,我回答了我的问题。
经过两周的研究和试验和错误。我终于弄清楚Gradle在构建应用程序时如何处理文件。
这就是我的所作所为。
在应用程序变体闭包中,您必须修改清单输出文件,获取输出变量并迭代到每个清单文件。
def outputs = variant.getOutputs()
并使用此实现来更新每个文件。
def manifestFile = "$buildDir/intermediates/manifests/full/${flavor.name}/${buildtype.name}/AndroidManifest.xml"
def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll(i[0].toString(), i[1].toString())
new File(manifestFile).write(updatedContent, 'UTF-8')