"App-release.apk" come modificare questo nome apk generato predefinito


155

Ogni volta che generi un apk firmato in Android Studio, per impostazione predefinita dà il nome come app-release.apk ...

Possiamo fare qualsiasi impostazione in modo che dovrebbe richiedere e chiedermi il nome che deve essere assegnato all'apk (il modo in cui lo fa in eclissi)

Quello che faccio è: rinominare l'apk dopo che è stato generato. Questo non dà alcun errore, ma esiste un modo autentico in modo che io possa fare qualsiasi modifica nelle impostazioni per ottenere un prompt.

Nota::

durante la generazione di apk android studio mi viene richiesto di selezionare la posizione (solo)inserisci qui la descrizione dell'immagine


1.cambia build varient per rilasciare 2.seleziona build-> genera l'apk firmato dalla barra dei menu. In questo modo sto generando apk firmato
Prabs

Tutte le risposte qui non sono corrette .. Questo problema si verificherà comunque usando uno di essi ... Il problema è che in studio il cache memorizza il nome del manufatto apk e continua a usare il nome memorizzato nella cache invece di usare quello nuovo generato!
TacB0sS

Risposte:


142

Sì, possiamo cambiarlo ma con un po 'più di attenzione

Guarda questo

Ora aggiungi questo nel tuo build.gradle nel tuo progetto mentre assicurati di aver verificato la variante di build del tuo progetto in release or Debug questo modo così qui ho impostato la mia variante di build come releasema puoi selezionare anche come 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)
                        )
                    }
                }
            }
        }

Puoi farlo con un approccio diverso In questo modo

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

Usando il metodo della proprietà Set in build.gradle e non dimenticare di sincronizzare il gradle prima di eseguire i progetti Spero che risolva il tuo problema :)

Un nuovo approccio per gestire questo aggiunto di recente da Google Update Ora puoi rinominare la tua build in base al sapore o all'output della variante // La fonte sottostante è dalla documentazione Android per gli sviluppatori Per maggiori dettagli segui il link di documentazione sopra L'
uso dell'API Variant per manipolare gli output delle varianti è rotto con il nuovo plugin. Funziona ancora per attività semplici, come cambiare il nome APK durante il tempo di compilazione, come mostrato di seguito:

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

Rinominare il pacchetto .aab Questa è una risposta soddisfacente da 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
}

C'è bisogno del codice sopra

Quello che ho osservato nell'ultima versione di Android Studio 3.3.1

La ridenominazione del pacchetto .aab viene effettuata dal codice precedente in quanto non è necessario rinominare un tutto.

Spero che ti possa aiutare ragazzi. :)


quindi usa la stringa lì nel tipo "Abhishek Chaubey" instaed di formattedDate
Abhishek Chaubey

È possibile aggiungere in versionNamequalche modo?
zygimantus,

@AbhishekChaubey Non riesco più a eseguire il codice tramite Android Studio dopo aver cambiato il nome apk, hai idea? per favore aiutatemi ... mostraThe APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
Beeing Jk,

@BeeingJk ricostruisci il progetto o una volta chiudi lo studio Android ed elimina la cartella di output dalla directory di build, quindi ricostruisci il progetto o provalo pulendo. Spero che possa aiutarti
Abhishek Chaubey,

4
A partire da Android Studio 3.0 output.outputFile è di sola lettura. La risposta di @ johnny-doe è la nuova soluzione.
Krishh,

79

Potresti ottenere l'errore con l'ultimo plug-in Android Gradle ( 3.0 ):

Impossibile impostare il valore della proprietà di sola lettura 'outputFile'

Secondo la guida alla migrazione , dovremmo utilizzare ora il seguente approccio:

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

Nota 2 principali modifiche qui:

  1. allviene utilizzato ora anziché eachper scorrere le uscite delle varianti.
  2. outputFileName viene utilizzata la proprietà invece di mutare un riferimento al file.

1
Ora questa è la risposta corretta di ottobre 2017 per Android Studio 3.0 Beta 7. Grazie.
Krishh,

3
Nel mio caso ${applicationName}risolto in BuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...(abbreviato per chiarezza). Ciò ha causato il fallimento dell'imballaggio. Per me ${applicationId}o ${archivesBaseName}erano opzioni migliori. Anche ${defaultConfig.versionName}per me è nullo. Quindi ${applicationId}_${variant.name}-${variant.versionName}è quello che ho finito.
pcdev il

1
@KGCybeX Di solito questo codice viene utilizzato nella android{}sezione sullo stesso livello di defaultConfig{}. Tuttavia, puoi usarlo al di fuori android{}dell'uso della android.applicationVariants.all { }sintassi
Johnny Doe, il

1
Sei un vero toccasana;)
Rik van Velzen

1
Work in Gradle 5.1.1
Williaan Lopes,

53

Ho modificato la risposta di @Abhishek Chaubey per modificare l'intero nome del file:

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

Questo produce un nome file come: MyAppName-release20150519121617.apk


3
Come si aggiunge una variabile in Gradle
Mehdiway

1
Per aggiungere una proprietà 'appName' personalizzata, aggiungi un codice simile al tuo progetto di root: project.ext { appName = 'MyApplicatioName' }
miha,

2
@ ranma2913 Non riesco più a eseguire il codice tramite Android Studio dopo aver cambiato il nome apk, hai idea? per favore aiutatemi ... mostra che il file APK /Users/.../outputs/apk/NewName-debug-20161004172815.apk non esiste sul disco.
Beeing Jk,

1
Invece di impostare manualmente MyAppName, rootProject.nameti darà il nome del progetto come in Eclipse.
Hiren Dabhi,

3
A partire da Android Studio 3.0 output.outputFileè di sola lettura. La risposta di @ johnny-doe è la nuova soluzione.
Krishh,

50

(EDITED per funzionare con Android Studio 3.0 e Gradle 4)

Stavo cercando un'opzione di ridenominazione del nome file apk più complessa e ho scritto questa soluzione che rinomina l'apk con i seguenti dati:

  • gusto
  • tipo di build
  • versione
  • Data

Otterresti un apk come questo: myProject_dev_debug_1.3.6_131016_1047.apk .

Puoi trovare l'intera risposta qui . Spero che sia d'aiuto!

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

2
grande. L'unico miglioramento da apportare è un nome di file costante (senza versione o data) per alcune versioni o buildType (flavor == "dev" || buildType = "debug")
Tony BenBrahim

il "tutto" invece di "ciascuno" sembra importante qui.
Xan-Kun Clark-Davis,

Dà errore > groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData. Perché non semplicemente passare a buildType = variant.buildType.name?
soshial,

dice"file.apk" is not writeable
Hosein Haqiqian il

38

Ecco un modo molto più breve:

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

Ti dà il nome com.blahblah.example-v1 (1.0) -debug.apk (in modalità debug)

Android Studio aggiunge versionNameSuffix per nome del tipo di build per impostazione predefinita, se si desidera sovrascriverlo, procedere come segue:

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

Output in modalità debug: com.blahblah.example-v1 (1.0) -MyNiceDebugModeName.apk


3
Grazie. Questa è l'opzione più veloce!
Giovanni,

1
Nota a margine è possibile aggiungere archiveBaseName al file gradle.properties locale.
Ge3ng,

Sembra davvero più chiaro. Perché questa non è la soluzione preferita?
Xan-Kun Clark-Davis,

6

Ho scritto una soluzione più universale basata sulla risposta @Fer.

Inoltre dovrebbe funzionare con la configurazione sapore e tipo di generazione a base di applicationId, versionName,versionCode .

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

Esempio di nome apk: com.example.app_freeDebug_1.0_1.apk

Per ulteriori informazioni sulla variantvariabile, consultare la definizione delle interfacce ApkVariant e BaseVariant .


4

aggiungi il android.applicationVariants.allblocco come sotto nel tuo livello di app

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

disponibile al 25/03/2019



2

Prima rinominare il modulo dall'app ad esempio SurveyApp

In secondo luogo aggiungilo al tuo livello di livello superiore (progetto radice) del tuo progetto. Funziona con 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"
                }
            }
        }
    }
}

2

Aggiungi il seguente codice in build.gradle (Modulo: 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)
                }
            }
        }
    }
}

E il nome della build di rilascio sarà Nome app 2018-03-31 12-34


1

La mia soluzione potrebbe anche essere di aiuto a qualcuno.

Testato e funziona su IntelliJ 2017.3.2 con Gradle 4.4

Scenario:

Ho 2 versioni nella mia applicazione e quindi volevo che ogni versione fosse denominata in modo appropriato in base a ciascuna versione.

Il codice seguente verrà inserito nel tuo file di build gradle del modulo trovato in:

{app-root}/app/build.gradle

Codice di pendenza da aggiungere al android{ }blocco:

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

Quanto sopra fornisce i seguenti APK trovati in {app-root}/app/:

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

Spero che possa essere utile a qualcuno.

Per maggiori informazioni, vedi le altre risposte menzionate nella domanda


0

Penso che questo sarà utile.

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'
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.