Как добавить номер версии в мои файлы APK с помощью 0.14+ версий плагина Android Gradle?
Я хочу, чтобы versionName
был включен в имя выходных файлов APK из моей сборки Android.
Там другой ответ, который работает с версиями плагина pre-0.14.x, но они изменили часть модели данных, так что она больше не работает, и я не мог понять, как это исправить. Насколько я могу судить, нижняя часть кода должна работать, но последний вызов set()
кажется, не имеет никакого эффекта. Он не выдает ошибку, но значение также не заменяется.
buildTypes {
applicationVariants.all { variant ->
def oldFile = variant.outputs.outputFile.get(0)
def newFile = new File(
oldFile.parent,
oldFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
variant.outputs.outputFile.set(0, newFile)
}
Может кто-нибудь помочь мне с этим?
Ответы
Ответ 1
Теперь вам нужен еще один цикл, каждый из которых может иметь несколько выходов:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
}
}
}
Ответ 2
Я скопировал ваш ответ с некоторой модификацией:
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace("-assistant", "-assistant-${versionName}"))
}
}
слово "-assistant" находится в моем имени файла перед именем варианта. Пример: у меня 3 варианта
ax, bx, cx
Имена файлов были в моем примере:
- заместитель помощника-Топор-debug.apk
- заместитель помощника-BX-debug.apk
- заместитель помощника-сх-debug.apk
Мне нужен номер версии там до имени варианта. Итак, после вышесказанного они теперь называются
- заместитель помощника-1,0-AX-debug.apk
- заместитель помощника-1,0-BX-debug.apk
- заместитель помощника-1,0-ой-debug.apk
Итак, gradle build добавляет имя варианта в имя файла для нас.
${versionName} просто "1.0". И я заметил, что это ${versionName} или ${variant.versionName}, оба дали тот же результат.
То есть, если defaultConfig {versionName "ab" } и productFlavors {ax {versionName "1.0" }}, $versionName или $variant.versionName в цикле в этом вышеописанном коде будет содержать версию версии 1.0 "
Надеюсь, это поможет некоторым.
Ответ 3
При использовании версии 3.0.0 плагина или выше вы должны внести небольшое изменение:
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = "myapp-${variant.versionName}-${variant.name}.apk"
}
}
Плагин 3.0.0 плагин документация по миграции говорит:
Если вы используете each() для итерации по вариантным объектам, вам нужно начать использовать all(). Это потому, что каждый() выполняет итерацию только с объектами, которые уже существуют во время конфигурации, но этот объект не существует во время конфигурации с новой моделью. Однако все() адаптируются к новой модели путем сбора объекта по мере его добавления во время выполнения.