Сборка Android Gradle: переименование apk
Как я могу адаптировать свой build.gradle для изменения окончательного базового имени apk(ов)? (без изменения суффиксов по умолчанию)
5 ответов
На Gradle 1.8, project.archivesBaseName
работает, но дает жалобу:
Создание свойств по требованию (или динамических свойств) устарело и планируется удалить в Gradle 2.0. Пожалуйста, прочитайте http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html для получения информации о замене динамических свойств. Устаревшее динамическое свойство: "archivesBaseName" для "корневого проекта" myapp "", значение: "AnotherName".
Чтобы избавиться от предупреждения (и избежать поломки сборки в Gradle 2.0), используйте это:
project.ext.set("archivesBaseName", "AnotherName");
... как предложено в документации ExtraPropertiesExtension.
Обновление (плагин Gradle 1.1.0)
Плагин Android Gradle версии 1.1.0 представил ошибку, которая сломалась archivesBaseName
, как отметил Friederbluemle. Но, к счастью, это было исправлено (в версии 1.1.2).
Я нашел очень простое решение. Базовое имя apk это свойство archivesBaseName
определено в проекте. Поэтому для переименования apks достаточно следующей строки:
project.archivesBaseName = "AnotherName";
Начиная с версии 1.1.0 плагина Android Gradle, который вы должны использовать
archivesBaseName = "yourOtherName"
вместо project.ext.set("archivesBaseName", "yourOtherName")
в вашем build.gradle
чтобы это работало.
Ниже код отлично работает для меня на v1.3.1 и только с APK:
android {
defaultConfig {
archivesBaseName = "AnotherName"
Опять же, это работает с плагином Android 1.3.1 (не 1.3.0), но у нас все еще были проблемы с переименованием как наших приложений (APK), так и libs (AAR). Большая проблема, так как у нас есть 20+ настроек проекта, где мы фиксируем, откуда берутся развернутые двоичные файлы, а не дублируют код в каждом подпроекте build.gradle.
На нас сработало следующее:
Определите следующий метод (и плагин) в корневом build.gradle:
ext.snapshotSuffix = "<sha>-<count>-SNAPSHOT"
ext.nextVersion = "patch"
apply plugin: 'com.cinnober.gradle.semver-git'
def renameArtifact(variant) {
variant.outputs.each { output ->
def fullName = output.outputFile.name
def projectName = fullName.substring(0, fullName.indexOf('-'))
output.outputFile = new File(
(String) output.outputFile.parent,
(String) output.outputFile.name.replace(projectName, "drivecx-${projectName}-${project.version}"))
}
}
Для приложений используйте:
apply plugin: 'com.android.application'
android {
...
// Rename all output artifacts to include version information
applicationVariants.all { variant ->
renameArtifact(variant)
}
}
Для библиотек используйте:
apply plugin: 'com.android.library'
android {
...
// Rename all output artifacts to include version information
libraryVariants.all { variant ->
renameArtifact(variant)
}
}
Теперь вы получите несколько действительно хороших файлов с общим префиксом, именем проекта, git-description-wth-sha1-buildflavor и расширением.
СТАРЫЙ пример:
androidauto-debug.apk
НОВЫЙ пример:
drivecx-androidauto-0.2.1-d1436b7-193-SNAPSHOT-debug.apk
Бонус в том, что он не переименовывает не выровненные apks.
Вы также можете переименовать подпроект (без переименования каталога), поместив в корень следующее settings.gradle
:
rootProject.children.each {
it.name = ('app' == it.name ? 'MyAppName' : it.name)
}