Как установить имя версии в имени файла APK с помощью Gradle?

Я пытаюсь установить конкретный номер версии в автоматически созданном имени файла APK Gradle.

Теперь gradle генерирует myapp-release.apk, но я хочу, чтобы он выглядел примерно как myapp-release-1.0.apk.

Я пробовал переименовать варианты, которые кажутся беспорядочными. Есть простой способ сделать это?

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    defaultConfig.versionName + ".apk"))
    }
}

Я безуспешно пробовал приведенный выше код. Какие-либо предложения? (с использованием gradle 1.6)


person codaR0y    schedule 20.08.2013    source источник


Ответы (16)


Мне нужно только изменить название версии в одном месте. Код тоже простой.

В приведенных ниже примерах будут созданы файлы apk с именем MyCompany-MyAppName-1.4.8-debug.apk или MyCompany-MyAppName-1.4.8-release.apk в зависимости от сборки. вариант выбран.

Обратите внимание, что это решение работает как с APK, так и с пакетами приложений (файлы .aab)..

См. Также: Как изменить имя файла сопоставления proguard в Gradle для проекта Android

# Решение для последнего подключаемого модуля Gradle

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.company.app"
        minSdkVersion 13
        targetSdkVersion 21
        versionCode 14       // increment with every release
        versionName '1.4.8'   // change with every release
        setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")
    }
}

Вышеупомянутое решение было протестировано со следующими версиями плагина Android Gradle:

  • 3.6.4 (август 2020 г.)
  • 3.5.2 (ноябрь 2019 г.)
  • 3.3.0 (январь 2019)
  • 3.1.0 (март 2018 г.)
  • 3.0.1 (ноябрь 2017 г.)
  • 3.0.0 (октябрь 2017 г.)
  • 2.3.2 (май 2017 г.)
  • 2.3.1 (апрель 2017 г.)
  • 2.3.0 (февраль 2017 г.)
  • 2.2.3 (декабрь 2016 г.)
  • 2.2.2
  • 2.2.0 (сентябрь 2016 г.)
  • 2.1.3 (август 2016 г.)
  • 2.1.2
  • 2.0.0 (апрель 2016 г.)
  • 1.5.0 (2015/11/12)
  • 1.4.0-beta6 (05.10.2015)
  • 1.3.1 (2015/08/11)

Я буду обновлять этот пост по мере выхода новых версий.

# Решение протестировано только в версиях 1.1.3–1.3.0 Следующее решение было протестировано со следующими версиями подключаемого модуля Android Gradle:

файл приложения gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.company.app"
        minSdkVersion 13
        targetSdkVersion 21
        versionCode 14       // increment with every release
        versionName '1.4.8'   // change with every release
        archivesBaseName = "MyCompany-MyAppName-$versionName"
    }
}
person Jon    schedule 11.03.2015
comment
Думаю, это правильный подход, вместо того, чтобы писать очередную задачу по переименованию файлов. - person Nandish A; 28.05.2015
comment
просто измените на archivesBaseName = MyCompany-MyAppName- $ versionName, если у вас ОКР и вы не хотите, чтобы AS предупреждал вас о + - person ligi; 02.07.2015
comment
планируется, что это будет устаревшим в gradle 2+ см. stackoverflow.com/a/20660274/774398 - person Patrick Favre; 04.08.2015
comment
@ for3st Я скоро обновлю ответ, добавив версию Gradle 2+, которая setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName") - person Jon; 25.08.2015
comment
можно ли указать название версии при запуске сборки ..? Моей целью было бы иметь автоматически сгенерированное имя версии, которое будет выглядеть как 1.4.8 (20150825_115958). Версия 1.4.8 все еще может быть установлена ​​в файле сборки gradle, но метка времени будет назначена автоматически. Созданный apk будет иметь ту же метку времени, что и суффикс в имени файла, например MyApp_v1.4.8_20150825_115958 .. - person Ewoks; 23.09.2015
comment
@Ewoks def date = new Date().format('yyyyMMddHHmmss') и setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName-$date") кажутся близкими к тому, о чем вы просите, и хотя кажется, что он генерирует apk с датой в имени файла, студия Android не может их автоматически установить, выбрасывая Локальный путь не существует в моих тестах. Интересно, почему вы хотите это в первую очередь, поскольку сборки gradle при использовании с git повторяются. Наличие меток времени в двоичном файле на самом деле ничего не говорит мне о коде, используемом для его генерации. - person Jon; 24.09.2015
comment
он сообщает моему клиенту, и мне легче общаться с ними, когда есть временная метка ... Тем временем я нашел другой способ, но, как вы сказали, Android Studio по какой-то причине не находит этот файл - person Ewoks; 24.09.2015
comment
Я объединил этот ответ с автоинкрементом кода версии SO-ответа (stackoverflow.com/a/25166200/1876622), чтобы мне не приходилось вручную изменять каждый номер сборки во время разработки. - person HeyZiko; 19.10.2015
comment
Добавление setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName") в ваш defaultConfig прекрасно работает с плагином gradle: 1.5.0. - person Kerem; 12.02.2016
comment
setProperty (archivesBaseName, MyCompany-MyAppName- $ versionName) отлично работает с gradle: 2.0.0, большое спасибо - person Simon K. Gerges; 13.04.2016
comment
Отличная находка, но не работает с ароматизаторами с разными кодами версий. Все они имеют одинаковый код версии. - person weston; 06.05.2017
comment
Нет ли имени переменной для MyAppName? Это кажется странным. Я имею в виду жестко запрограммированные строковые литералы MyCompany-MyAppName- $ versionName - person deLock; 27.04.2018
comment
Не работает с пакетами, есть обновления, чтобы он работал с пакетами? - person strangetimes; 16.06.2018
comment
@deLock, если вам или кому-то еще интересно - вы можете установить переменную applicationName в файле gradle.properties и использовать ее в build.gradle следующим образом: setProperty("archivesBaseName", "$applicationName-$versionName"). Или вы можете использовать переменную $applicationId - person Netherdan; 07.08.2018
comment
Есть ли способ добавить к имени variant.buildType.name? Я знаю, что это не совсем стандартная конфигурация, но я пытаюсь понять, как удалить устаревшее предупреждение variantOutput.getAssemble(). - person Allan W; 05.03.2019
comment
Можно ли убрать из apk имя last '-debug' / '-release'? - person ilyamuromets; 27.05.2019
comment
Отличный подход. Облегчает изменение вывода файла, особенно при создании Split APK. - person Kellin Strook; 12.04.2020

Это решило мою проблему: использование applicationVariants.all вместо applicationVariants.each

buildTypes {
      release {
        signingConfig signingConfigs.release
        applicationVariants.all { variant ->
            def file = variant.outputFile
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) 
        }
    }       
}

Обновлять:

Кажется, это не работает с версиями 0.14+ плагина android studio gradle.

Это помогает (ссылка из этого вопрос):

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
}
person codaR0y    schedule 20.08.2013
comment
Вы знаете, как заставить его работать, если у меня есть versionName, определенный в AndroidManifest.xml вместо конфигурации gradle? Это дает мне myapp-release-null.apk сейчас. - person Iwo Banas; 02.10.2013
comment
Кто-нибудь знает, как это сделать, если имя версии определено в файле gradle, но во вкусах, а не в defaultConfig? - person nasch; 11.08.2014
comment
Этот ответ не работает с версиями плагина gradle 0.14+. Какие-нибудь обновления для работы с ними? - person Argyle; 21.11.2014
comment
@Ageryle вам нужно будет работать со всеми возможными выходными файлами одновременно, используя что-то вроде: variant.outputs.each { output -> output.setOutputFile(new File (file.parent, some_new_filename) } - person withoutclass; 01.12.2014
comment
@withoutclass Я задал это как собственный вопрос и получил здесь ответ: stackoverflow.com/questions / 27068505 / - person Argyle; 01.12.2014
comment
Этот фрагмент кода работает, но, похоже, вызывает ошибку в Android Studio, которая приводит к зависанию IDE при редактировании (в Linux). Другой сценарий, вызывающий это: code.google.com/p/android/ issues / detail? id = 187493 - person Amir Uval; 24.11.2015
comment
Для людей, обновляющихся до Gradle 4: измените each на all и output.outputFile на outputFileName. Если кто-то подтвердит, что это работает, его можно отредактировать в ответ :) - person PHPirate; 29.10.2017
comment
@PHPirate: почти работает: Error:(34, 0) Cannot set the value of read-only property 'name' - person Mooing Duck; 10.12.2017
comment
@MooingDuck Да, извините, я был немного расплывчатым, вам подходит следующее? То же, что и в ответе, но output -> def newName = outputFileName; newName.replace(".apk", "-${variant.versionName}.apk"); outputFileName = new File(newName) - person PHPirate; 10.12.2017
comment
Или немного упрощенно, output -> outputFileName = "${variant.name}-${variant.versionName}.apk". Я добавил новый ответ, в котором он выглядит намного яснее. - person PHPirate; 10.12.2017
comment
Похоже, это снова сломалось в Gradle 6 - person spartygw; 10.06.2020

(ИЗМЕНЕНО для работы с Android Studio 3.0 и Gradle 4)

Я искал более сложную опцию переименования файлов apk, и я написал ее в надежде, что она будет полезна для всех остальных. Он переименовывает apk со следующими данными:

  • аромат
  • тип сборки
  • версия
  • дата

Мне потребовалось небольшое исследование классов gradle и немного копирования / вставки из других ответов. Я использую gradle 3.1.3.

В build.gradle:

android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
        debug {
            minifyEnabled false
        }
    }

    productFlavors {
        prod {
            applicationId "com.feraguiba.myproject"
            versionCode 3
            versionName "1.2.0"
        }
        dev {
            applicationId "com.feraguiba.myproject.dev"
            versionCode 15
            versionName "1.3.6"
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def project = "myProject"
            def SEP = "_"
            def flavor = variant.productFlavors[0].name
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def version = variant.versionName
            def date = new Date();
            def formattedDate = date.format('ddMMyy_HHmm')

            def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"

            outputFileName = new File(newApkName)
        }
    }
}

Если вы скомпилируете сегодня (13-10-2016) в 10:47, вы получите следующие имена файлов в зависимости от выбранного вами вкуса и типа сборки:

  • отладка разработчика: myProject_ dev_debug_1.3.6 _131016_1047.apk
  • выпуск для разработчиков: myProject_ dev_release_1.3.6 _131016_1047.apk
  • отладка prod: myProject_ prod_debug_1.2.0 _131016_1047.apk
  • выпуск продукта: myProject_ prod_release_1.2.0 _131016_1047.apk

Примечание: имя apk невыровненной версии по-прежнему используется по умолчанию.

person Fer    schedule 13.10.2016
comment
Отличное решение. Я попробовал, и он идеально подходит для моей проблемы. Спасибо! - person Pabel; 13.10.2016
comment
можно ли использовать тот же подход в Xamarin Studio? - person Alessandro Caliaro; 01.12.2016
comment
Было бы здорово, если бы это было возможно, но я начинаю прямо сейчас курс Xamarin, и у меня все еще недостаточно практики, чтобы знать, возможно это или нет. Я задам этот вопрос и приду сюда снова. - person Fer; 01.12.2016
comment
Комментарий преподавателя курса: есть опция, в которой вы можете использовать команды для изменения имени сгенерированных файлов. Поэтому подход к использованию из Xamarin должен отличаться от того, который я написал для Android Studio, извините. - person Fer; 02.12.2016
comment
Для устранения ошибки Невозможно установить значение доступного только для чтения свойства outputFile - как упоминалось в предыдущем комментарии о необходимости изменения each на all и output.outputFile на outputFileName - это сообщение предоставляет некоторые подробности об этом: stackoverflow.com/a/44265374/2162226 - person Gene Bo; 25.12.2017
comment
Я отредактировал ответ этим предложением. Спасибо @gnB - person Fer; 18.06.2018
comment
Вариант.variantData.variantConfiguration.buildType.name следует заменить на variant.buildType.name. - person Kirill Kostrov; 15.02.2021

Подводя итог, для тех, кто не знает, как импортировать пакет в build.gradle (например, я), используйте следующие buildTypes,

buildTypes {
      release {
        signingConfig signingConfigs.release
        applicationVariants.all { variant ->
            def file = variant.outputFile
            def manifestParser = new com.android.builder.core.DefaultManifestParser()
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) + ".apk")) 
        }
    }       
}

===== РЕДАКТИРОВАТЬ =====

Если вы установите свои versionCode и versionName в своем build.gradle файле следующим образом:

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 19
    versionCode 1
    versionName "1.0.0"
}

Вы должны установить это так:

buildTypes {   
        release {
            signingConfig signingConfigs.releaseConfig
            applicationVariants.all { variant ->
                def file = variant.outputFile
                variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
            }
        }
}


====== РЕДАКТИРОВАТЬ в Android Studio 1.0 ======

Если вы используете Android Studio 1.0, вы получите такую ​​ошибку:

Error:(78, 0) Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@67e7625f.

Вы должны изменить часть build.Types на это:

buildTypes {
        release {
            signingConfig signingConfigs.releaseConfig
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
                }
            }
        }
    }
person Wesley    schedule 09.07.2014
comment
Это прекрасно работает. Однако, поскольку я увеличиваю свою версию манифеста в сборке gradle, он создаст APK с более старым (предварительным) значением. Любой способ убедиться, что это повлияет после того, как скрипт Gradle увеличивает номер версии? - person Guy; 30.08.2014
comment
@Guy Извини, это заняло так много времени. Отредактировал ответ, посмотрим, сможет ли он решить вашу проблему. - person Wesley; 09.09.2014

Если вы не укажете versionName в блоке defaultConfig, тогда defaultConfig.versionName приведет к null

чтобы получить versionName из манифеста, вы можете написать следующий код в build.gradle:

import com.android.builder.DefaultManifestParser

def manifestParser = new DefaultManifestParser()
println manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)
person Arkadiusz Konior    schedule 16.10.2013
comment
Я считаю, что с более поздними версиями gradle теперь com.android.builder.core.DefaultManifestParser - person Ryan S; 16.06.2014

В моем случае я просто хотел найти способ автоматизировать генерацию разных apk имен для вариантов release и debug. Мне удалось это легко сделать, поместив этот фрагмент в качестве дочернего элемента android:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        output.outputFile = new File(output.outputFile.parent, newName)
    }
}

Для нового плагина Android Gradle 3.0.0 вы можете сделать что-то вроде этого:

 applicationVariants.all { variant ->
    variant.outputs.all {
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        outputFileName = newName
    }
}

Это производит что-то вроде: My_nice_name_3.2.31_dbg.apk

person yshahak    schedule 18.04.2017

Gradle 6+

Сейчас я использую в Android Studio 4.0 и Gradle 6.4 следующее:

android {
    defaultConfig {
        applicationId "com.mycompany.myapplication"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 15
        versionName "2.1.1"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "ApplicationName-${variant.name}-${variant.versionName}.apk"
                }
            }
        }
    }
}

Gradle 4

Синтаксис немного изменился в Gradle 4 (Android Studio 3+) (с output.outputFile на outputFileName, идея из этот ответ сейчас :

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def newName = outputFileName
            newName.replace(".apk", "-${variant.versionName}.apk")
            outputFileName = new File(newName)
        }
    }
}
person PHPirate    schedule 10.12.2017
comment
Есть идеи, как исправить это для Gradle 6? - person spartygw; 10.06.2020

Другой альтернативой является использование следующего:

String APK_NAME = "appname"
int VERSION_CODE = 1
String VERSION_NAME = "1.0.0"

project.archivesBaseName = APK_NAME + "-" + VERSION_NAME;

    android {
      compileSdkVersion 21
      buildToolsVersion "21.1.1"

      defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode VERSION_CODE
        versionName VERSION_NAME
      }

       .... // Rest of your config
}

Это установит "appname-1.0.0" для всех ваших выходных файлов apk.

person Marco RS    schedule 12.12.2014
comment
Извините, не работает (больше): No such property: archivesBaseName for class: org.gradle.api.internal.project.DefaultProject_Decorated - person Martin; 24.02.2015
comment
Какую версию Gradle вы используете? - person Marco RS; 03.03.2015

Правильный способ переименовать apk в соответствии с ответом @Jon

defaultConfig {
        applicationId "com.irisvision.patientapp"
        minSdkVersion 24
        targetSdkVersion 22
        versionCode 2  // increment with every release
        versionName "0.2" // change with every release
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //add this line
        archivesBaseName = "AppName-${versionName}-${new Date().format('yyMMdd')}"
    }   

Или другим способом вы можете добиться тех же результатов с помощью

android {
    ...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def formattedDate = new Date().format('yyMMdd')
            outputFileName = "${outputFileName.replace(".apk","")}-v${defaultConfig.versionCode}-${formattedDate}.apk"
        }
    }
}
person Qamar    schedule 05.09.2018
comment
Хороший в этом вопрос! Мне это нравится больше, чем другие способы, которыми я сейчас занимаюсь. - person Droid Chris; 11.09.2018

Есть много ответов, которые верны либо полностью, либо после некоторых модификаций. Но я все равно добавлю свой, так как у меня была проблема со всеми из них, потому что я использовал скрипты для динамической генерации VersionName и VersionCode путем подключения к задаче preBuild.

Если вы используете аналогичный подход, это код, который будет работать:

project.android.applicationVariants.all { variant ->
    variant.preBuild.doLast {
    variant.outputs.each { output ->
        output.outputFile = new File(
                output.outputFile.parent,
                output.outputFile.name.replace(".apk", "-${variant.versionName}@${variant.versionCode}.apk"))
        }
    }
}

Чтобы объяснить: поскольку я переопределяю код версии и имя в первом действии preBuild, я должен добавить переименование файла в конец этой задачи. Итак, что Gradle будет делать в этом случае:

Ввести код версии / имя-> выполнить действия перед сборкой -> заменить имя для apk

person Igor Čordaš    schedule 01.09.2015
comment
Где вы устанавливаете сгенерированные переменные versionCode и versionName? - person Mars; 05.10.2016
comment
Насколько я помню, это было сделано внутри нашего настраиваемого плагина Gradle. Его выполнение называлось последним действием задачи preBuild. - person Igor Čordaš; 05.10.2016

В моем случае я решаю эту ошибку таким образом

добавление SUFFIX в версию Debug, в этом случае я добавляю текст «-DEBUG» к моему развертыванию Debug

 buildTypes {
        release {

            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


        }
        debug {

            defaultConfig {
                debuggable true

                versionNameSuffix "-DEBUG"
            }
        }
    }
person exequielc    schedule 05.02.2016
comment
Это не меняет имя файла APK. - person Tom; 25.08.2017
comment
На самом деле это хороший совет. Не в том вопросе, но в хорошем. Где я могу прочитать об этом подробнее? Можно ли использовать versionNameSuffix на основе ветки GIT? Например, если его нет на главном сервере, всегда указывайте суффикс, даже если это релизная версия. - person android developer; 15.08.2019

Для последних версий Gradle вы можете использовать следующий фрагмент:

Сначала укажите местоположение манифеста вашего приложения

 sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
        {
    }

А позже в build.gradle

import com.android.builder.core.DefaultManifestParser

def getVersionName(manifestFile) {
    def manifestParser = new DefaultManifestParser();
    return manifestParser.getVersionName(manifestFile);
}

def manifestFile = file(android.sourceSets.main.manifest.srcFile);
def version = getVersionName(manifestFile)

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    versionName + ".apk"))
    }
}

Отрегулируйте, если у вас разные манифесты для каждого типа сборки. но так как у меня один - у меня отлично работает.

person Alfishe    schedule 22.02.2015
comment
можно ли добавить строку из файла класса в имя apk ?? - person Upendra Shah; 14.11.2017

Что касается Android Studio 1.1.0, я обнаружил, что эта комбинация работает в теле android файла build.gradle. Это если вы не можете понять, как импортировать данные XML-файла манифеста. Хотелось бы, чтобы это больше поддерживалось Android Studio, но просто поиграйте со значениями, пока не получите желаемое имя apk:

defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 6
        versionName "2"
    }
    signingConfigs {
        release {
            keyAlias = "your key name"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.release
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "appName_" + versionName + ".apk"))
                }
            }
        }
    }
person A13X    schedule 20.05.2015

Как я ответил, здесь Если вы хотите добавить название версии и код версии в выходной файл, сделайте это так:

applicationVariants.all { variant ->
        variant.outputs.all {
            def versionName = variant.versionName
            def versionCode = variant.versionCode
            def variantName = variant.name
            outputFileName = "${rootProject.name}" + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk'
        }
    }
person Shailendra Madda    schedule 05.11.2020

Вы также можете добавить отформатированное время сборки к имени apk, как показано ниже:

setProperty("archivesBaseName", "data-$versionName " + (new Date().format("HH-mm-ss")))
person Hadi    schedule 26.03.2021

person    schedule
comment
Хотя этот фрагмент кода может решить вопрос, включая объяснение, действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. - person Rosário Pereira Fernandes; 18.02.2018