Как добавить номер версии в мои файлы 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(). Это потому, что каждый() выполняет итерацию только с объектами, которые уже существуют во время конфигурации, но этот объект не существует во время конфигурации с новой моделью. Однако все() адаптируются к новой модели путем сбора объекта по мере его добавления во время выполнения.