“App-release.apk” bu varsayılan oluşturulan apk adını değiştirme


155

Android Studio'da imzalı bir apk oluşturduğumda , varsayılan olarak adı app-release.apk olarak verir ...

Herhangi bir ayar yapabilir miyiz, böylece bana apk'ye atanması gereken adı sorması ve sorması gerekir (tutulmada olduğu gibi)

Yaptığım şey - oluşturulduktan sonra apk'yi yeniden adlandırın. Bu herhangi bir hata vermez ama bir istem almak için ayarlarında herhangi bir değişiklik yapabilirsiniz böylece gerçek bir yolu yoktur.

Not::

apk android studio oluştururken bana konumu seçmemi istiyor (sadece)resim açıklamasını buraya girin


1. serbest bırakmak için yapı değişkeni 2.seçme seçin- menü çubuğundan imzalı apk oluşturmak. Bu şekilde imzalı apk oluşturuyorum
Prabs

Buradaki tüm cevaplar doğru değil .. Bu sorun hala bunlardan herhangi biri kullanılarak ortaya çıkacak ... Sorun apk yapıtının adını önbelleğe almak ve yeni oluşturulanı kullanmak yerine önbellek adını kullanmaya devam etmek!
TacB0sS

Yanıtlar:


142

Evet bunu değiştirebiliriz ama biraz daha dikkatle

Bunu gör

Şimdi bu eklemek build.gradle yapmak emin kontrol ettikten ederken projenizde inşa varyantı gibi projenizin release or Debug işte ben benim yapı varyantı belirledik releaseama siz de Debug olarak seçebilir.

    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)
                        )
                    }
                }
            }
        }

Bunu farklı yaklaşımlarla yapabilirsiniz.

 defaultConfig {
        applicationId "com.myapp.status"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        setProperty("archivesBaseName", "COMU-$versionName")
    }

Build.gradle içinde Set özelliği yöntemini kullanarak ve projeleri çalıştırmadan önce gradle'ı senkronize etmeyi unutmayın Umut Sorununuzu çözecektir :)

Son zamanlarda google güncelleme ile eklenen yeni bir yaklaşım Artık yapınızı lezzet veya Varyant çıktısına göre yeniden adlandırabilirsiniz // Kaynak aşağıda geliştirici android dokümantasyonundan Daha fazla bilgi için yukarıdaki dokümantasyon bağlantısını takip
edin Varyant çıktılarını değiştirmek için Varyant API'sini kullanma bozuk yeni eklentiyle. Aşağıda gösterildiği gibi, oluşturma süresi boyunca APK adını değiştirmek gibi basit görevler için hala çalışır:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's 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 paketini yeniden adlandırma Bu, David Medenjak tarafından güzel bir şekilde cevaplandı

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
}

Yukarıdaki koda ihtiyaç var mı

Android Studio 3.3.1'in son sürümünde gözlemlediklerim

.Aab paketinin yeniden adlandırılması önceki kod tarafından yapılır, orada herhangi bir görev yeniden adlandırma gerekmez.

Umarım size yardımcı olur. :)


yani biçimlendirilmiş tarih gibi "Abhishek Chaubey" dizesini orada kullanın
Tarih

Bir versionNameşekilde eklemek mümkün mü ?
zygimantus

@AbhishekChaubey APK adını değiştirdikten sonra artık kodu Android Studio üzerinden çalıştıramıyorum, herhangi bir fikir? lütfen yardım ... gösterirThe APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
Beeing Jk

@BeeingJk projeyi yeniden oluşturun veya bir kez android stüdyosunu kapatın ve çıktı klasörünü yapı dizininden silin ve sonra projeyi yeniden oluşturun veya temizleyerek deneyin. Umarım size yardımcı olabilir
Abhishek Chaubey

4
Android Studio 3.0 itibariyle output.outputFile salt okunurdur. @ johnny-doe'nin cevabı yeni çözümdür.
krishh

79

En son android gradle eklentisi ( 3.0 ) ile hatayı alabilirsiniz :

'OutputFile' salt okunur özelliğinin değeri ayarlanamıyor

Göre Geçiş kılavuzundaki , şimdi şu yaklaşımı kullanmalıdır:

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${applicationName}_${variant.buildType.name}_${defaultConfig.versionName}.apk"
    }
}

Not 2'deki başlıca değişiklikler:

  1. alleachvaryant çıkışları yinelemek yerine artık kullanılmaktadır .
  2. outputFileName özellik bir dosya başvurusunu mutasyona geçirmek yerine kullanılır.

1
Şimdi bu Android Studio 3.0 Beta 7 için Ekim 2017'nin doğru cevabı. Teşekkürler.
krishh

3
Benim durumum ${applicationName}çözüldü BuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...(netlik için kısaltıldı). Bu ambalajın bozulmasına neden oldu. Benim için ${applicationId}veya ${archivesBaseName}daha iyi seçenekler vardı. Ayrıca ${defaultConfig.versionName}benim için boş. ${applicationId}_${variant.name}-${variant.versionName}Ben de öyle buldum.
pcdev

1
@KGCybeX Genellikle bu kod android{}bölümünde olduğu gibi aynı seviyede kullanılır defaultConfig{}. Her ne kadar, dışarıda ait kullanabilirsiniz android{}kullanarak android.applicationVariants.all { }sözdizimi
Johnny Doe

1
Sen bir cankurtaransın;)
Rik van Velzen

1
Gradle 5.1.1
Williaan Lopes

53

Tüm dosya adını değiştirmek için @Abhishek Chaubey yanıtını değiştirdim:

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 {
    }
}

Bu, aşağıdaki gibi bir dosya adı üretir: MyAppName-release20150519121617.apk


3
Gradle'da nasıl değişken eklersin
Mehdiway

1
Özel bir 'appName' özelliği eklemek için, kök projenize böyle bir kod ekleyin:project.ext { appName = 'MyApplicatioName' }
miha

2
@ ranma2913 APK adını değiştirdikten sonra artık kodu Android Studio üzerinden çalıştıramıyorum, herhangi bir fikir? lütfen yardım edin ... APK dosyası /Users/.../outputs/apk/NewName-debug-20161004172815.apk diskte mevcut değil.
Beeing Jk

1
MyAppName'i manuel olarak ayarlamak yerine, eclipse'deki rootProject.namegibi proje adını verecektir.
Hiren Dabhi

3
Android Studio 3.0'dan itibaren output.outputFilesalt okunurdur. @ johnny-doe'nin cevabı yeni çözümdür.
krishh

50

(Android Studio 3.0 ve Gradle 4 ile çalışmak üzere EDİTİLDİ)

Daha karmaşık bir apk dosya adı yeniden adlandırma seçeneği arıyordum ve apk'yi aşağıdaki verilerle yeniden adlandıran bu çözümü yazdım:

  • lezzet
  • yapı tipi
  • versiyon
  • tarih

Bunun gibi bir apk alırsınız: myProject_dev_debug_1.3.6_131016_1047.apk .

Tüm cevabı burada bulabilirsiniz . Umarım yardımcı olur!

Build.gradle içinde:

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)
        }
    }
}

2
harika. Yapılacak Sadece iyileştirilmesi kesintisiz bazı tatlar veya buildType için (sürümüne veya tarih olmadan) dosya (lezzet == "dev" || buildType = "debug") 'dir
Tony Benbrahim

"her" yerine "hepsi" burada önemli görünüyor.
Xan-Kun Clark-Davis

Hata verir > groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData. Neden basitçe değişmiyor buildType = variant.buildType.name?
soshial

diyor"file.apk" is not writeable
Hosein Haqiqian

39

İşte çok daha kısa bir yol:

defaultConfig {
    ...
    applicationId "com.blahblah.example"
    versionCode 1
    versionName "1.0"
    setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
    //or so
    archivesBaseName = "$applicationId-v$versionCode($versionName)"
}

Size com.blahblah.example-v1 (1.0) -debug.apk adını verir (hata ayıklama modunda)

Android Studio varsayılan olarak derleme türü adına göre versionNameSuffix ekle, bunu geçersiz kılmak istiyorsanız, aşağıdakileri yapın:

buildTypes {
    debug {
        ...
        versionNameSuffix "-MyNiceDebugModeName"
    }
    release {
        ...
    }
}

Hata ayıklama modunda çıktı: com.blahblah.example-v1 (1.0) -MyNiceDebugModeName.apk


3
Teşekkürler. Bu en hızlı seçenektir!
John

1
Yan not, yerel gradle.properties dosyanıza archiveBaseName öğesini ekleyebilirsiniz.
Ge3ng

Gerçekten daha açık görünüyor. Neden tercih edilen çözüm bu değil?
Xan-Kun Clark-Davis

6

@Fer cevabına dayalı daha evrensel bir çözüm yazdım.

Aynı zamanda lezzet ve yapı tipi bazlı konfigürasyonun ile çalışmalıdır applicationId, versionName,versionCode .

Build.gradle içinde:

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)
        }
    }
}

Örnek apk adı: com.example.app_freeDebug_1.0_1.apk

variantDeğişken hakkında daha fazla bilgi için bkz. ApkVariant ve BaseVariant arayüzler tanımı.


4

android.applicationVariants.allUygulama düzeyinde notunuzda aşağıdaki gibi blok ekleyin

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 tarihinde satışa sunulacak



2

Önce modülünüzü uygulamadan yani SurveyApp olarak yeniden adlandırın

İkinci olarak, bunu projenizin üst düzey (kök proje) sınıfına ekleyin. Gradle 3.0 ile çalışıyor

//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"
                }
            }
        }
    }
}

2

Build.gradle dosyasına aşağıdaki kodu ekleyin (Modül: app)

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)
                }
            }
        }
    }
}

Ve sürüm oluşturma adı Uygulama Adınız olacak 2018-03-31 12-34


1

Benim çözümüm de birine yardımcı olabilir.

Gradle 4.4 ile IntelliJ 2017.3.2 üzerinde test edildi ve çalışıyor

Senaryo:

Uygulamamda 2 lezzet var ve bu yüzden her sürümün her lezzete göre uygun şekilde adlandırılmasını istedim.

Aşağıdaki kod, içinde bulunan modül sınıf oluşturma dosyasına yerleştirilecektir:

{app-root}/app/build.gradle

Bloka eklenecek not kodu 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
        }
    }
}

Yukarıda bulunan APK'ları aşağıda bulabilirsiniz {app-root}/app/:

myspicyflavor-release-1.2.3_build5_v10.apk
mystandardflavor-release-1.2.3_build5_v10.apk

Umarım birisi için yararlı olabilir.

Daha fazla bilgi için soruda belirtilen diğer yanıtlara bakın


0

Bunun yardımcı olacağını düşünüyorum.

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'
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.