Android Gradle build: переименование apk

Как я могу адаптировать мой build.gradle для изменения конечного базового имени apk (s)? (без изменения суффиксов по умолчанию)

Ответ 1

В Gradle 1.8, project.archivesBaseName работает, но он дает эту жалобу:

Создание свойств по запросу (динамические свойства a.k.a.) устарел и должен быть удален в 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).

Ответ 2

Я нашел очень простое решение. Базовое имя apk - это свойство archivesBaseName, определенное в проекте. Поэтому для переименования apks достаточно следующей строки:

project.archivesBaseName = "AnotherName";

Ответ 3

Начиная с версии 1.1.0 плагина Android Gradle вы должны использовать

archivesBaseName = "yourOtherName"

вместо project.ext.set("archivesBaseName", "yourOtherName") в build.gradle, чтобы он работал.

Ответ 4

Ниже, для меня, улучшена работа над версиями v1.3.1 и только с APK:

android {
    defaultConfig {
        archivesBaseName = "AnotherName"

Опять же, это работает с плагином Android 1.3.1 (не 1.3.0), но у нас по-прежнему возникли проблемы с переименованием наших приложений (APK) и libs (AAR). Большая проблема, так как у нас есть 20+ проектная установка, где мы запираем, где развернутые двоичные файлы исходят, а не дублируют код в каждом подпроекте build.gradle.

Для нас работало следующее:

Определите следующий метод (и плагин) в root 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 -describe-wth-sha1-buildflavor и расширением.

Пример OLD:

androidauto-debug.apk

НОВЫЙ пример:

drivecx-androidauto-0.2.1-d1436b7-193-SNAPSHOT-debug.apk

Бонус заключается в том, что он не переименовывает невыровненные апки.

Ответ 5

Вы также можете переименовать подпроект (без переименования каталога), поместив в корневой каталог settings.gradle следующее:

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}