"app-release.apk", как изменить это имя apk, созданное по умолчанию
Всякий раз, когда я генерирую подписанный apk в Android Studio, по умолчанию он дает имя app-release.apk...
Можем ли мы сделать какие-либо настройки, чтобы он запрашивал и спрашивал имя, которое нужно присвоить apk (как это происходит в eclipse)
Что я делаю - переименовываю apk после того, как он сгенерирован. Это не дает никаких ошибок, но есть ли какой-либо подлинный способ, чтобы я мог сделать любые изменения в настройках, чтобы получить приглашение.
Заметка::
во время генерации apk android studio предлагает мне выбрать местоположение (только) ![enter image description here]()
Ответы
Ответ 1
Да, мы можем изменить это, но с большим вниманием
![SeeThis]()
Теперь добавьте это в свой build.gradle в своем проекте, убедившись, что вы проверили вариант сборки вашего проекта, такой как release or Debug
поэтому здесь я установил мой вариант сборки как release
но вы также можете выбрать как Debug.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig getSigningConfig()
applicationVariants.all { variant ->
variant.outputs.each { output ->
def date = new Date();
def formattedDate = date.format('yyyyMMddHHmmss')
output.outputFile = new File(output.outputFile.parent,
output.outputFile.name.replace("-release", "-" + formattedDate)
//for Debug use output.outputFile = new File(output.outputFile.parent,
// output.outputFile.name.replace("-debug", "-" + formattedDate)
)
}
}
}
}
Вы можете сделать это с другим подходом, как это
defaultConfig {
applicationId "com.myapp.status"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
setProperty("archivesBaseName", "COMU-$versionName")
}
Используя метод Set property в build.gradle и не забудьте синхронизировать gradle перед запуском проектов. Надеюсь, это решит вашу проблему :)
Новый подход к решению этой проблемы был недавно добавлен обновлением Google. Теперь вы можете переименовать свою сборку в соответствии с выходом версии или варианта //Ниже приведен источник из документации разработчика Android. Для получения более подробной информации перейдите по ссылке выше документации
Использование Variant API для манипулирования вариантами вывода не работает с новым плагином. Он по-прежнему работает для простых задач, таких как изменение имени APK во время сборки, как показано ниже:
// If you use each() to iterate through the variant objects,
// you need to start using all(). That because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
Переименование .aab bundle На этот вопрос хорошо ответил David Medenjak
tasks.whenTaskAdded { task ->
if (task.name.startsWith("bundle")) {
def renameTaskName = "rename${task.name.capitalize()}Aab"
def flavor = task.name.substring("bundle".length()).uncapitalize()
tasks.create(renameTaskName, Copy) {
def path = "${buildDir}/outputs/bundle/${flavor}/"
from(path)
include "app.aab"
destinationDir file("${buildDir}/outputs/renamedBundle/")
rename "app.aab", "${flavor}.aab"
}
task.finalizedBy(renameTaskName)
}
//@credit to David Medenjak for this block of code
}
Есть ли необходимость в вышеуказанном коде
Что я наблюдал в последней версии андроид студии 3.3.1
Переименование пакета .aab выполняется с помощью предыдущего кода, здесь не требуется переименовывать все.
Надеюсь, это поможет вам, ребята. :)
Ответ 2
Вы можете получить ошибку с последним плагином Android Gradle (3.0):
Невозможно установить значение свойства только для чтения 'outputFile'
Согласно руководству по миграции, мы должны использовать следующий подход:
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
}
}
Обратите внимание на 2 основных изменения здесь:
-
all
теперь используется вместо each
для перебора выходных данных варианта. -
outputFileName
используется вместо изменения ссылки на файл.
Ответ 3
Я изменил @Abhishek Chaubey ответ на изменение всего имени файла:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
project.ext { appName = 'MyAppName' }
def formattedDate = new Date().format('yyyyMMddHHmmss')
def newName = output.outputFile.name
newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
newName = newName.replace("-release", "-release" + formattedDate)
//noinspection GroovyAssignabilityCheck
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
debug {
}
}
Это создает имя файла, например: MyAppName-release20150519121617.apk
Ответ 4
(ИЗМЕНЕНО для работы с Android Studio 3.0 и Gradle 4)
Я искал более сложную опцию переименования файла apk, и я написал это решение, которое переименовывает apk со следующими данными:
- аромат
- тип сборки
- версия
- Дата
Вы получили бы apk как это: myProject_dev_debug_1.3.6_131016_1047.apk.
Вы можете найти полный ответ здесь. Надеюсь, поможет!
В 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)
}
}
}
Ответ 5
Вот гораздо более короткий путь:
defaultConfig {
...
applicationId "com.blahblah.example"
versionCode 1
versionName "1.0"
setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
//or so
archivesBaseName = "$applicationId-v$versionCode($versionName)"
}
Это дает вам имя com.blahblah.example-v1 (1.0) -debug.apk (в режиме отладки)
Android Studio по умолчанию добавляет versionNameSuffix по имени типа сборки, если вы хотите переопределить это, сделайте следующее:
buildTypes {
debug {
...
versionNameSuffix "-MyNiceDebugModeName"
}
release {
...
}
}
Вывод в режиме отладки: com.blahblah.example-v1 (1.0) -MyNiceDebugModeName.apk
Ответ 6
Не переименовать его, но, возможно, правильно создать имя в первую очередь? Изменить имя apk с помощью Gradle
Ответ 7
Я написал более универсальное решение на основе ответа @Fer.
Он также должен работать с конфигурацией, основанной на типе и типе сборки: applicationId
, versionName
, versionCode
.
В build.gradle:
android {
...
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appId = variant.applicationId
def versionName = variant.versionName
def versionCode = variant.versionCode
def flavorName = variant.flavorName // e. g. free
def buildType = variant.buildType // e. g. debug
def variantName = variant.name // e. g. freeDebug
def apkName = appId + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk';
output.outputFile = new File(output.outputFile.parentFile, apkName)
}
}
}
Пример имени apk: com.example.app_freeDebug_1.0_1.apk
Для получения дополнительной информации о variant
переменных см ApkVariant и BaseVariant определение интерфейсов.
Ответ 8
добавьте блок android.applicationVariants.all
как показано ниже, в свой уровень приложения
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions {
disable 'MissingTranslation'
}
signingConfig signingConfigs.release
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${applicationId}_${versionCode}_${variant.flavorName}_${variant.buildType.name}.apk"
}
}
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '_debug'
}
}
доступно на 2019/03/25
Ответ 9
Сначала переименуйте свой модуль из приложения в i.e SurveyApp
Второе добавьте это в свой проект верхнего уровня (корневой проект) gradle. Он работает с Gradle 3.0
//rename apk for all sub projects
subprojects {
afterEvaluate { project ->
if (project.hasProperty("android")) {
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${project.name}-${variant.name}-${variant.versionName}.apk"
}
}
}
}
}
Ответ 10
Мое решение может также помочь кому-то.
Протестировано и работает на IntelliJ 2017.3.2 с Gradle 4.4
Сценарий:
У меня есть 2 варианта в моем приложении, и поэтому я хотел, чтобы каждый релиз был назван соответствующим образом в соответствии с каждым из них.
Приведенный ниже код будет помещен в файл сборки модуля, который находится в:
{app-root}/app/build.gradle
Код Gradle для добавления в блок android{ }
:
android {
// ...
defaultConfig {
versionCode 10
versionName "1.2.3_build5"
}
buildTypes {
// ...
release {
// ...
applicationVariants.all {
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(output.outputFile.name, variant.flavorName + "-" + defaultConfig.versionName + "_v" + defaultConfig.versionCode + ".apk"))
}
}
}
}
productFlavors {
myspicyflavor {
applicationIdSuffix ".MySpicyFlavor"
signingConfig signingConfigs.debug
}
mystandardflavor {
applicationIdSuffix ".MyStandardFlavor"
signingConfig signingConfigs.config
}
}
}
Выше приведены следующие APK, найденные в {app-root}/app/
:
myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.apk
Надеюсь, это кому-нибудь пригодится.
Для получения дополнительной информации см. Другие ответы, упомянутые в вопросе.
Ответ 11
Добавьте следующий код в build.gradle (Модуль: приложение)
android {
......
......
......
buildTypes {
release {
......
......
......
/*The is the code fot the template of release name*/
applicationVariants.all { variant ->
variant.outputs.each { output ->
def formattedDate = new Date().format('yyyy-MM-dd HH-mm')
def newName = "Your App Name " + formattedDate
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
}
}
И именем сборки релиза будет Ваше имя приложения 2018-03-31 12-34
Ответ 12
Я думаю, что это будет полезно.
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
project.ext { appName = 'MyAppName' }
def formattedDate = new Date().format('yyyyMMddHHmmss')
def newName = output.outputFile.name
newName = newName.replace("app-", "$project.ext.appName-")
newName = newName.replace("-release", "-release" + formattedDate)
output.outputFile = new File(output.outputFile.parent, newName)
}
}
}
}
productFlavors {
flavor1 {
}
flavor2 {
proguardFile 'flavor2-rules.pro'
}
}