Gradle: манипулирование названием версии и кодом версии на основе их типов сборки
Я ищу из других вопросов, связанных с 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
Я создал файл, в котором хранилась моя версия. "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 {
}
}
}
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')