Как добавить номер версии в мои файлы APK, используя версии плагина Android Gradle версии 0.14+?
Я хочу иметь 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)
}
Может ли кто-нибудь помочь мне с этим?
3 ответа
Теперь вам нужен еще один цикл, чтобы каждый вариант мог иметь несколько выходов:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
}
}
}
При использовании версии 3.0.0 плагина или выше, вы должны сделать небольшое изменение:
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = "myapp-${variant.versionName}-${variant.name}.apk"
}
}
Документация по миграции плагина 3.0.0 гласит:
Если вы используете each() для итерации по вариантным объектам, вам нужно начать использовать all(). Это потому, что each() перебирает только те объекты, которые уже существуют во время конфигурирования, но эти объекты не существуют во время конфигурирования с новой моделью. Однако all () адаптируется к новой модели, подбирая объекты по мере их добавления во время выполнения.
Я скопировал ваш ответ с некоторыми изменениями:
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace("-assistant", "-assistant-${versionName}"))
}
}
слово "-ассистент" находится в моем имени файла перед именем варианта. Пример у меня есть 3 варианта
топор, бх, хх
Имена файлов были в моем примере:
- заместитель помощника-Топор-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} или ${variable.versionName}, оба результата дают одинаковый результат.
То есть, если бы имел defaultConfig { versionName "ab" } и productFlavors {ax {versionName "1.0"}}, $versionName или $ option.versionName в цикле в этом коде выше будет содержать имя версии варианта "1.0"
Надеюсь, это поможет.