Android Studio: bagaimana cara menghasilkan apk bertanda tangan menggunakan Gradle?


90

Saya telah mencari di Google dan SO tetapi tidak dapat menemukan jawaban saya.

Ini adalah pertama kalinya saya bekerja dengan sistem gradle dan sekarang saya sedang membuat APK yang ditandatangani untuk diunggah ke google play (Proyek diimpor dari gerhana).

Sekarang saya telah membaca bagian di sini http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks yang harus Anda tambahkan signingConfigskebuild.gradle

Saya telah menambahkan baris ini dan sekarang saya melihat bahwa Anda perlu menjalankan ./gradlew assembleReleasetetapi menjalankan ini di pengembalian cmd saya 'gradle' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dioperasikan atau file batch. Saya juga mencoba mengklik kanan pada build.gradle dan menjalankannya, mengatakan itu berhasil tetapi begitu saya melihat di folder build / apk hanya sebuah file bernamaapp-debug-unaligned.apk

Jadi, bagaimana cara menghasilkan apk bertanda tangan menggunakan sistem Gradle?



@ScottBarta Sebagian melakukan trik, setelah saya beralih ke mode rilis dan menjalankan gradle, saya masih mendapat kesalahan, tetapi menggunakan dia membangun> menghasilkan apk yang ditandatangani melalui menu akhirnya berhasil! Terima kasih saya telah memberi Anda suara positif di tautan yang disediakan.
Lengket

tanda tangan dengan versi v1 (tanda tangan jar) atau v2 (tanda tangan apk lengkap) dari file gradle? solusi di sini: stackoverflow.com/questions/57943259/…
user1506104

Jawaban:


97

Ada tiga cara untuk menghasilkan build Anda sesuai dengan buildType. (Dalam kasus Anda, ini rilis tetapi dapat diberi nama apa pun yang Anda inginkan.)

  1. Buka Tugas Gradle di panel kanan Android Studio dan cari assembleReleaseatau di assemble(#your_defined_buildtype)bawah Tugas Modul

  2. Pergi ke Build Variant di Left Panel dan pilih build dari drop down

  3. Pergi ke direktori root proyek di File Explore dan buka cmd / terminal dan jalankan:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Windows: gradlew assembleRelease or assemble(#your_defined_buildtype)

Jika Anda ingin melakukan rilis build (hanya), Anda dapat menggunakan Build> Generate Signed apk. Untuk tipe build lain, hanya tiga opsi di atas yang tersedia.

Anda dapat menemukan APK yang dihasilkan di module/builddirektori Anda yang memiliki nama jenis build di dalamnya.


4
Ini hanya akan membangun apk bertanda tangan jika Anda memiliki konfigurasi pembangunan di build.gradle Anda. Jika Anda menyimpan ini di alat manajemen kode sumber atau membagikannya dengan orang lain, Anda harus memikirkan untuk memisahkan kredensial kunci penandatanganan Anda dari kode sumber Anda.
Janusz

Build> Generate Signed apk ... sesederhana itu
Atul

61

Anda dapat mengambil proyek gradle Android Studio yang sudah ada dan membangun / menandatanganinya dari baris perintah tanpa mengedit file apa pun. Ini membuatnya sangat bagus untuk menyimpan proyek Anda dalam kontrol versi sambil tetap memisahkan kunci dan kata sandi Anda:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD

1
Karena kita perlu meneruskan kode sumber ke pendamping, ini adalah cara terbaik untuk menjaga rahasia keystore kita. Terima kasih.
Yeung

2
lagi pula mengetahui keberadaan properti android.injected.signing. * ini ?
Tixeon

Saya mendapat informasi ini dari Xav dari tim Android Studio, dan saya tidak tahu apakah ada variabel lain seperti ini.
Wayne Piekarski

Saya mendapatkan java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Gagal membaca kunci XXXXXX dari toko "C: \ Users \ somedirectory \ Desktop \ someKey.jks": Tidak ada kunci dengan alias 'XXXXXX' ditemukan di keystore C: \ Users \ somedirectory \ Desktop \ someKey.jks. Mengapa demikian?
Archie G. Quiñones

40

Anda dapat menggunakan kode ini

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

kemudian dari terminal Anda jalankan

./gradlew assembleRelease

Anda akan mendapatkan apk di

aplikasi-android-Anda / build / outputs / apk / your-android-app-release.apk


@ozcanovunc harap periksa jalur keystore Anda lagi, mungkin jalur Anda salah.
bhavesh kaila

Saat melakukan ini, kemungkinan besar Anda build.gradlediperiksa ke kontrol versi, dan begitu juga kata sandi Anda! Pertimbangkan untuk mengambil rute lain ketika keamanan penting dalam proyek Anda.
Marco7757

1
gradle assembleRelease tidak berfungsi. Gunakan sebagai ganti gradlew assembleRelease
Sathish Gadde


-3

membangun menu> menghasilkan apk yang ditandatangani


Jika Anda menjalankannya, itu memberi tahu Anda bahwa itu bukan cara untuk melakukannya. Selain itu jika saya mengunggah file .apk itu menimbulkan kesalahan yang mengatakan bahwa deteksi kesalahan atau ada sesuatu yang aktif.
Lengket

11
dikatakan bahwa debugging aktif ... di studio android, di sebelah kiri, harus ada tab yang bertuliskan 'build variants' ... klik di atasnya dan alihkan semuanya dari 'debug' ke 'rilis' ... setelah itu , buat apk yang ditandatangani lagi ...
trickedoutdavid

2
Ini tidak lagi berfungsi! Misalnya APK yang dibuatnya memiliki BuildConfig.DEBUG yang disetel ke true. Ini telah menyebabkan saya mengalami masalah yang tiada akhir, Anda sekarang harus menggunakan metode assembleRelease bertahap.
Ben Clayton

@BenClayton Anda benar! Saya menghabiskan waktu berjam-jam karena ini! "Bug" lain yang sangat menjengkelkan di Android Studio - Tidak ada akhir yang terlihat dengan masalah ...
sjkm

Saya bertanya-tanya mengapa langkah sederhana ini tidak bisa menjadi cara yang paling cocok untuk menghasilkan apk yang ditandatangani seperti yang disebutkan dengan jelas. Langkah ini menghasilkan aplikasi dan berfungsi sempurna untuk saya, tanpa masalah. Tetapi banyak jawaban lain yang ada di SO membuat saya bingung karena berpikir apa yang saya lakukan mungkin tidak benar atau apa.
Atul
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.