“App-release.apk” cara mengubah nama apk yang dihasilkan default ini

155

Setiap kali saya membuat apk yang ditandatangani di Android Studio, secara default ia memberi nama sebagai aplikasi-rilis.apk ...

Bisakah kita melakukan pengaturan apa pun sehingga harus meminta dan bertanya kepada saya nama yang perlu ditugaskan ke apk (cara melakukannya di gerhana)

Apa yang saya lakukan adalah - mengganti nama apk setelah itu dihasilkan. Ini tidak memberikan kesalahan tetapi apakah ada cara asli sehingga saya bisa melakukan perubahan pada pengaturan untuk mendapatkan prompt.

Catatan::

saat membuat apk android studio memberi saya prompt untuk memilih lokasi (hanya)masukkan deskripsi gambar di sini

Prab
sumber
1. Ubah varian build untuk melepaskan 2. Pilih build-> generate apk yang ditandatangani dari menu bar. Dengan cara ini saya menghasilkan apk yang ditandatangani
Prab
Semua jawaban di sini tidak benar .. Masalah ini masih akan terjadi menggunakan salah satu dari mereka ... Masalahnya adalah studio caching nama artefak apk, dan terus menggunakan nama cache bukannya menggunakan yang dihasilkan baru!
TacB0sS

Jawaban:

142

Ya kita bisa mengubahnya tetapi dengan lebih banyak perhatian

Lihat ini

Sekarang tambahkan ini di build.gradle Anda di proyek Anda sambil memastikan Anda telah memeriksa varian build dari proyek Anda seperti di release or Debug sini saya telah menetapkan varian build saya sebagai releasetetapi Anda juga dapat memilih sebagai 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)
                        )
                    }
                }
            }
        }

Anda dapat Melakukannya dengan Pendekatan berbeda

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

Menggunakan metode Set property di build.gradle dan Jangan lupa untuk menyinkronkan gradle sebelum menjalankan proyek Semoga ini akan menyelesaikan masalah Anda :)

Pendekatan Baru untuk menangani ini ditambahkan baru-baru ini oleh pembaruan google Sekarang Anda dapat mengubah nama Anda membangun sesuai dengan rasa atau output Varian // Berikut sumber dari pengembang dokumentasi android Untuk lebih jelasnya ikuti link dokumentasi atas
Menggunakan API Varian untuk memanipulasi output varian rusak dengan plugin baru. Itu masih berfungsi untuk tugas-tugas sederhana, seperti mengubah nama APK selama waktu pembuatan, seperti yang ditunjukkan di bawah ini:

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

Mengganti nama berkas .aab. Ini dijawab dengan baik oleh 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
}

Apakah perlu kode di atas

Apa yang saya amati dalam versi terbaru dari studio android 3.3.1

Ganti nama berkas .aab dilakukan oleh kode sebelumnya sehingga tidak perlu ada tugas untuk mengganti nama semua.

Semoga ini bisa membantu kalian. :)

Abhishek Chaubey
sumber
jadi gunakan string yang ada di dalam seperti "Abhishek Chaubey" instaed dari tanggal diformat
Abhishek Chaubey
Apakah mungkin menambahkan sesuatu versionName?
zygimantus
@AbhishekChaubey Saya tidak dapat menjalankan kode melalui Android Studio lagi setelah mengubah nama apk, tahu? tolong bantu ... ini menunjukkanThe APK file /Users/.../outputs/apk/NewName-debug-20161004172815.apk does not exist on disk.
Beeing Jk
@BeeingJk membangun kembali proyek atau sekali menutup studio android dan menghapus folder output dari direktori build dan kemudian membangun kembali proyek atau mencobanya dengan membersihkan. Harap dapat membantu Anda
Abhishek Chaubey
4
Pada Android Studio 3.0 output.outputFile hanya baca. Jawaban @ johnny-doe adalah solusi baru.
Krishh
79

Anda mungkin mendapatkan kesalahan dengan plugin android gradle terbaru ( 3.0 ):

Tidak dapat menetapkan nilai properti hanya-baca 'outputFile'

Menurut panduan migrasi , kita harus menggunakan pendekatan berikut sekarang:

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

Catatan 2 perubahan utama di sini:

  1. alldigunakan sekarang alih-alih eachberalih ke keluaran varian.
  2. outputFileName properti digunakan alih-alih memutasi referensi file.
Johnny Doe
sumber
1
Sekarang ini adalah jawaban yang benar pada bulan Oktober 2017 untuk Android Studio 3.0 Beta 7. Terima kasih.
Krishh
3
Dalam kasus saya ${applicationName}diselesaikan BuildType_Decorated{name=applicationName, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscript...(disingkat untuk kejelasan). Ini menyebabkan pengemasan gagal. Bagi saya ${applicationId}atau ${archivesBaseName}opsi yang lebih baik. Juga ${defaultConfig.versionName}bagi saya adalah nol. Demikianlah ${applicationId}_${variant.name}-${variant.versionName}akhirnya saya.
pcdev
1
@ KGCybeX Biasanya kode ini digunakan pada android{}bagian yang setingkat dengan defaultConfig{}. Meskipun, Anda dapat menggunakannya di luar android{}menggunakan android.applicationVariants.all { }sintaks
Johnny Doe
1
Anda seorang penyelamat;)
Rik van Velzen
1
Bekerja di Gradle 5.1.1
Williaan Lopes
53

Saya memodifikasi jawaban @Abhishek Chaubey untuk mengubah seluruh nama 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 {
    }
}

Ini menghasilkan nama file seperti: MyAppName-release20150519121617.apk

ranma2913
sumber
3
Bagaimana Anda menambahkan variabel di Gradle
Mehdiway
1
Untuk menambahkan properti 'appName' khusus, tambahkan kode seperti ini ke proyek root Anda: project.ext { appName = 'MyApplicatioName' }
miha
2
@ ranma2913 Saya tidak dapat lagi menjalankan kode melalui Android Studio setelah mengubah nama apk, tahu? tolong bantu ... ini menunjukkan file APK / Pengguna / ... / output / aplikasi / NamaBaru-debug-20161004172815.apk tidak ada pada disk.
Beeing Jk
1
Alih-alih mengatur secara manual MyAppName, rootProject.nameakan memberi Anda nama proyek seperti di gerhana.
Hiren Dabhi
3
Pada Android Studio 3.0 output.outputFilehanya baca. Jawaban @ johnny-doe adalah solusi baru.
Krishh
50

(Diedit untuk bekerja dengan Android Studio 3.0 dan Gradle 4)

Saya sedang mencari opsi penggantian nama file apk apk lebih kompleks dan saya menulis solusi ini yang mengubah nama apk dengan data berikut:

  • rasa
  • tipe bangunan
  • Versi: kapan
  • tanggal

Anda akan mendapatkan apk seperti ini: myProject_dev_debug_1.3.6_131016_1047.apk .

Anda dapat menemukan seluruh jawabannya di sini . Semoga ini bisa membantu!

Di 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)
        }
    }
}
Fer
sumber
2
Bagus. Hanya perbaikan yang dilakukan adalah nama file yang konstan (tanpa versi atau tanggal) untuk beberapa rasa atau buildType (flavour == "dev" || buildType = "debug")
Tony BenBrahim
"semua" bukannya "masing-masing" tampaknya penting di sini.
Xan-Kun Clark-Davis
Memberi kesalahan > groovy.lang.MissingPropertyException: No such property: variantConfiguration for class: com.android.build.gradle.internal.variant.ApplicationVariantData. Kenapa tidak ganti saja buildType = variant.buildType.name?
soshial
katanya"file.apk" is not writeable
Hosein Haqiqian
38

Ini cara yang jauh lebih singkat:

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

Ini memberi Anda nama com.blahblah.example-v1 (1.0) -debug.apk (dalam mode debug)

Android Studio menambahkan versionNameSuffix dengan nama tipe build secara default, jika Anda ingin menimpanya, lakukan selanjutnya:

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

Output dalam mode debug: com.blahblah.example-v1 (1.0) -MyNiceDebugModeName.apk

Anrimian
sumber
3
Terima kasih. Ini adalah opsi tercepat!
John
1
Catatan tambahan, Anda dapat menambahkan archiveBaseName ke file properti gradle.prop lokal Anda.
Ge3ng
Tampaknya benar-benar lebih jelas. Mengapa ini bukan solusi yang disukai?
Xan-Kun Clark-Davis
6

Saya menulis solusi yang lebih universal berdasarkan jawaban @Fer.

Hal ini juga harus bekerja dengan rasa dan jenis membangun konfigurasi berbasis applicationId, versionName, versionCode.

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

Contoh nama apk: com.example.app_freeDebug_1.0_1.apk

Untuk informasi lebih lanjut tentang variantvariabel melihat ApkVariant dan BaseVariant definisi antarmuka.

KursoR
sumber
4

tambahkan android.applicationVariants.allblok seperti di bawah ini di tingkat aplikasi Anda

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

tersedia di 2019/03/25

Loyea
sumber
3

Tidak mengganti nama itu, tapi mungkin menghasilkan nama dengan benar di tempat pertama akan membantu? Ubah nama apk dengan Gradle

Bryan
sumber
2

Pertama ganti nama modul Anda dari aplikasi ke yaitu SurveyApp

Kedua, tambahkan ini ke tingkat atas proyek (root proyek) Anda. Ini bekerja dengan 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"
                }
            }
        }
    }
}
Qamar
sumber
2

Tambahkan kode berikut di build.gradle (Modul: 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)
                }
            }
        }
    }
}

Dan nama rilis rilis akan menjadi Nama Aplikasi Anda 2018-03-31 12-34

Vinil Chandran
sumber
1

Solusi saya juga dapat membantu seseorang.

Diuji dan Bekerja pada IntelliJ 2017.3.2 dengan Gradle 4.4

Skenario:

Saya memiliki 2 rasa dalam aplikasi saya, jadi saya ingin setiap rilis diberi nama sesuai dengan masing-masing rasa.

Kode di bawah ini akan ditempatkan ke file modul gradle build Anda yang ditemukan di:

{app-root}/app/build.gradle

Kode nilai ditambahkan ke android{ }blok:

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

Di atas memberikan APK yang ditemukan di {app-root}/app/:

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

Semoga bisa bermanfaat bagi seseorang.

Untuk info lebih lanjut, lihat jawaban lain yang disebutkan dalam pertanyaan

CybeX
sumber
0

Saya pikir ini akan sangat membantu.

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