Saya ingin agar Gradle build saya untuk membuat file apk yang ditandatangani rilis menggunakan Gradle.
Saya tidak yakin apakah kode itu benar atau apakah saya kehilangan parameter saat melakukan gradle build
?
Ini adalah beberapa kode dalam file gradle saya:
android {
...
signingConfigs {
release {
storeFile file("release.keystore")
storePassword "******"
keyAlias "******"
keyPassword "******"
}
}
}
The Gradle membangun selesai BERHASIL, dan saya build/apk
folder saya hanya melihat ...-release-unsigned.apk
dan ...-debug-unaligned.apk
file.
Ada saran tentang cara mengatasi ini?
Jawaban:
Cara yang lebih mudah daripada jawaban sebelumnya:
Masukkan ini ke dalam
~/.gradle/gradle.properties
Ubah
app/build.gradle
, dan tambahkan ini di dalamandroid {
blok kode:Maka Anda bisa lari
gradle assembleRelease
Juga lihat referensi untuk
signingConfigs
DSL Gradlesumber
file()
selalu mengasumsikan jalur relatif. Gunakannew File(path)
jika Anda ingin diperlakukan sebagai mutlak.Saya berhasil menyelesaikannya dengan menambahkan kode ini, dan membangun dengan
gradle build
:Ini menghasilkan file apk rilis yang ditandatangani.
sumber
gradle build
ataugradlew build
dalam perintah Terminal / PromptCatatan bahwa script @ sdqali akan (setidaknya ketika menggunakan Gradle 1,6) meminta password kapan Anda menjalankan setiap tugas Gradle. Karena Anda hanya memerlukannya saat melakukan
gradle assembleRelease
(atau serupa), Anda dapat menggunakan trik berikut:Perhatikan bahwa saya juga harus menambahkan yang berikut (di bawah android) untuk membuatnya berfungsi:
sumber
installRelease
menghilang dari daftar tugas ... Mengapa?KEYSTORE
perlu didefinisikan bahkan untuk build debug dan untuk "gradle sync" di dalam Android Studio, jika tidak maka akan memberikan kesalahan tentang path yang null.Jika Anda ingin menghindari hardcoding keystore & kata sandi di build.gradle , Anda dapat menggunakan file properti seperti yang dijelaskan di sini: HANDLING TANDA KONFIGURASI DENGAN GRADLE
Pada dasarnya:
1) buat file myproject.properties di /home/[username[/.signing dengan konten seperti ini:
2) buat file gradle.properties (mungkin di root direktori proyek Anda) dengan konten:
3) merujuknya di build.gradle Anda seperti ini:
sumber
Penandatanganan aplikasi otomatis dengan Gradle saat menggunakan git
Sungguh menakjubkan betapa banyak cara berbelit-belit yang ada untuk melakukan ini. Inilah cara saya sendiri, di mana saya mencoba mematuhi rekomendasi Googles sendiri . Namun, penjelasan mereka tidak sepenuhnya jelas, jadi saya akan menjelaskan prosedur untuk Linux secara rinci.
Deskripsi:
Instruksi Google default untuk menandatangani aplikasi secara otomatis selama pembuatan, tanpa menyimpan kata sandi dan file tanda tangan di jalur pengembangan aplikasi (GIT) Anda, agak tidak jelas. Berikut adalah petunjuk langkah demi langkah yang dijelaskan bagaimana cara melakukannya.
Asumsi awal:
Anda memiliki sebuah aplikasi yang disebut "MyApp" dalam direktori tertentu dengan lintasan berikut:
$HOME/projects/mydev/MyApp
. Namun, direktori MyApp digunakan dan dikendalikan dengan GIT.Masalah
Kami jelas tidak ingin memiliki file tanda tangan atau kata sandi kami di mana pun di direktori yang dikontrol GIT, bahkan jika kami sangat dapat menggunakan
.gitignore
dll, masih terlalu berisiko dan mudah untuk membuat kesalahan. Jadi kami ingin keystore dan file tanda tangan kami di luar.Larutan
Kita perlu melakukan tiga (3) hal:
build.gradle
file modul untuk menggunakan (1) dan (2).Untuk contoh ini kita beri nama dua file:
keystore.properties
MyApp-release-key.jks
Kami dapat meletakkan kedua file ini di sini:
(1) Buat file kata sandi keystore
File pertama berisi kata sandi teks yang jelas digunakan di; dan path ke file rilis-kunci di (2). Mulailah dengan mengisi ini, karena akan membuat operasi copy paste lebih mudah untuk langkah selanjutnya.
Edit
keystore.properties
sehingga isinya adalah:Satu-satunya bagian yang sulit di sini, adalah
myStoreFileLocation
. Ini adalah path seperti yang terlihat daribuild.gradle
file modul selama build. Hal ini biasanya berarti jalan yang sama dan relatif:$HOME/projects/mydev/MyApp/app/build.gradle
. Jadi untuk menunjuk keMyApp-release-key.jks
file, apa yang perlu kita taruh di sini adalah:../../../MyApp-release-key.jks
Di sini, kami juga memilih alias "myapp" untuk kunci. Maka file terakhir akan terlihat:
(2) Buat file tanda tangan
File kedua dihasilkan secara otomatis saat Anda membuat kunci tanda tangan. Jika Anda tidak memiliki aplikasi lain dan ini adalah satu-satunya keystore Anda, maka buat file dengan:
Ini akan meminta Anda dua kata sandi dan banyak info. (Hal yang sama seperti di Android Studio.) Sekarang salin / tempel kata sandi yang sebelumnya Anda pilih.
(3) Edit
gradle.build
file modul Anda untuk menggunakan hal di atasBagian-bagian berikut harus ada di file build Gradle aplikasi / modul Anda. Pertama, tambahkan baris berikut di luar dan sebelum
android {}
blok Anda .Lalu, di dalam
android {}
blok, tambahkan:Sekarang dari shell, Anda dapat membangun kembali aplikasi Anda dengan:
Ini harus menghasilkan aplikasi yang ditandatangani dengan benar yang dapat digunakan di Google Play.
PEMBARUAN: 2019-04-02
Versi yang lebih baru
keytool
dan ada sesuatu yang memberitahu Anda bahwa Anda harus menggunakan keyfile berbasis PKCS12 daripada yang asli / default seperti yang saya gunakan di atas. Mereka kemudian memberi tahu Anda bahwa Anda harus mengonversi ke format PKCS12 terbuka baru. Namun, tampaknya alat pengembangan Android belum siap untuk ini, karena jika Anda melakukannya, Anda akan mendapatkan kesalahan aneh berikut:Jadi jangan gunakan kunci yang dikonversi!
sumber
keystore.properties
file dummy ke kontrol sumber, jadi build bekerja di mesin dev. Saya telah menggambarkan pengaturan server build di sini .keytool
menghasilkan keystore PKCS12: Anda dapat lulus-storetype JKS
dalamkeytool
perintah untuk mengatur jenis keystore untuk JKS yang dibutuhkan oleh perkakas Android.Seperti @Destil katakan tetapi izinkan orang lain yang tidak memiliki kunci untuk membangun: Cara yang lebih mudah daripada jawaban sebelumnya:
Masukkan ini ke dalam
~/.gradle/gradle.properties
Ubah
build.gradle
seperti ini:Maka Anda dapat menjalankan
gradle assembleRelease
ATAUgradle build
sumber
(Sebagai balasan untuk user672009 atas.)
Solusi yang bahkan lebih mudah, jika Anda ingin menyimpan kata sandi Anda dari repositori git; namun, ingin menyertakan build.gradle Anda di dalamnya, yang bahkan berfungsi baik dengan citarasa produk, adalah membuat file gradle terpisah. Sebut saja 'signed.gradle' (masukkan di .gitignore Anda). Seolah-olah itu adalah file build.gradle Anda minus semua yang tidak terkait dengan masuk.
Lalu di file build.gradle Anda sertakan baris ini tepat di bawah "apply plugin: 'android'"
Jika Anda tidak memiliki atau menggunakan beberapa rasa, ganti nama "flavor1" menjadi "release" di atas, dan Anda harus selesai. Jika Anda menggunakan rasa, lanjutkan.
Terakhir tautkan rasa Anda ke penandatanganan yang benar di file build.gradle Anda dan Anda harus selesai.
sumber
Jika Anda sudah memiliki file keystore, itu bisa sesederhana menambahkan beberapa parameter ke perintah build Anda:
Tidak diperlukan perubahan permanen untuk proyek Android Anda.
Sumber: http://www.tinmith.net/wayne/blog/2014/08/gradle-sign-command-line.htm
sumber
Ini adalah balasan untuk user672009 dan tambahan untuk posting sdqali (kodenya akan macet saat membangun versi debug oleh tombol "Run" IDE):
Anda dapat menggunakan kode berikut:
sumber
keyPassword new String(console.readPassword("Enter key password: "))
untuk memastikan kata sandi Anda tidak ditampilkan selama inputDi Android Studio yang lebih baru, ada cara GUI yang sangat mudah dan mengisi file Gradle juga.
File -> Project Structure
Module ->
Pilih modul utama ('aplikasi' atau nama khusus lainnya)Signing
tab -> Plus gambar untuk menambahkan konfigurasi baruIsi data di sisi kanan
File OK dan Gradle dibuat secara otomatis
Anda harus secara manual menambahkan baris
signingConfig signingConfigs.NameOfYourConfig
di dalamnyabuiltTypes{release{}}
Gambar-gambar:
Dua catatan penting (!):
(EDIT 12/15)
Untuk membuat APK yang ditandatangani, Anda harus membuka tab Terminal Android Studio (bagian bawah antarmuka utama) dan mengeluarkan perintah
./gradlew assembleRelease
Jika Anda lupa
keyAlias
(apa yang sering terjadi pada saya), Anda harus memulaiBuild -> Generate Signed APK
untuk memulai proses dan melihat nama kunci Alias.sumber
build.gradle
file, bukan?Jika Anda membangun apk melalui baris perintah seperti saya maka Anda dapat memberikan konfigurasi penandatanganan sebagai argumen.
Tambahkan ini ke
build.gradle
Jadikan
signingConfigs
seperti iniMaka Anda jalankan
gradlew
seperti inisumber
build.gradle
? Tingkat terbaik? Silakan tambahkan lebih banyak kodeapp/build.gradle
file yang saya bicarakan.sumber
Anda juga dapat menggunakan opsi -P perintah baris gradle untuk membantu penandatanganan. Di build.gradle Anda, tambahkan singingConfigs seperti ini:
Lalu panggil gradle build seperti ini:
Anda bisa menggunakan -P untuk mengatur storeFile dan keyAlias jika Anda mau.
Ini pada dasarnya adalah solusi Destil tetapi dengan opsi baris perintah.
Untuk detail lebih lanjut tentang properti gradle, lihat panduan pengguna gradle .
sumber
Jawaban @ Destil baik jika Anda dapat menggunakan kembali konfigurasi yang sama di semua proyek. Atau, Android Studio dilengkapi dengan
local.properties
file yang mungkin dapat digunakan sebagai gantinya, tetapi seharusnya itu dihasilkan oleh IDE dan saya tidak dapat menemukan cara untuk memperpanjangnya dari dalam Android Studio.Ini adalah variasi dari jawaban @ jonbo . Jawaban itu memungkinkan pengaturan spesifik proyek tetapi disertai dengan sedikit overhead pengembang. Secara khusus, boilerplate yang signifikan diperlukan untuk memindahkan
signingConfigs
definisi ke file terpisah - terutama jika Anda perlu melakukannya untuk beberapa proyek, yang merupakan alasan utama untuk memilih solusi ini daripada Destil's. Ini bisa agak dikurangi dengan juga memasukkan garisdalam file kredensial, karena ini akan memungkinkan penyelesaian IDE.
Akhirnya, sebagian besar solusi di sini tidak memungkinkan membangun proyek dalam mode debug - yang menangani penandatanganan debug secara otomatis - tanpa memberikan sintaksis jika tidak secara semantik valid
signingConfigs
definisi yang . Jika Anda tidak perlu membuat rilis build dari mesin yang diberikan, langkah ekstra ini dapat dilihat sebagai hambatan yang tidak perlu. Di sisi lain, ini bisa menjadi bantuan terhadap kolega bodoh atau malas yang menjalankan debug build dalam produksi.Solusi ini akan memungkinkan debug build tanpa mengkhawatirkan kredensial sama sekali, tetapi akan membutuhkan kredensial yang valid untuk menghasilkan rilis build, dan hanya membutuhkan sedikit boilerplate. Namun, sebagai sisi negatifnya itu mungkin mendorong orang lain untuk mengganti nilai-nilai dummy dengan kredensial nyata dan tidak ada cara untuk melindunginya.
Ini menciptakan properti dummy yang berfungsi murni untuk menghasilkan file build yang valid secara sintaksis. Nilai yang ditugaskan untuk
ext.signing
properti tidak relevan sejauh debug membangun pergi. Untuk mengaktifkan rilis build, salinext.signing
kesigning.gradle
dan ganti nilai dummy dengan kredensial yang valid.Tentu saja,
signing.gradle
harus diabaikan oleh VCS.sumber
Hampir semua platform sekarang menawarkan semacam keyring, jadi tidak ada alasan untuk meninggalkan kata sandi teks yang jelas.
Saya mengusulkan solusi sederhana yang menggunakan modul Python Keyring (terutama script konsol pendamping
keyring
) dan pembungkus minimal di sekitar['do', 'something'].execute()
fitur Groovy :Menggunakan fungsi ini,
signingConfigs
bagian tersebut menjadi:Sebelum menjalankan
gradle assembleRelease
Anda harus mengatur kata sandi di kunci Anda, hanya sekali:Selamat rilis!
sumber
Memperluas jawaban oleh David Vavra, membuat file ~ / .gradle / gradle.properties dan tambahkan
Kemudian di build.gradle
sumber
Saya cukup senang memikirkan hal ini. Ini adalah perjalananku.
Walk-through A hingga Z tentang cara membuat file gradle build di IntelliJ (v.13.1.4) Walk-through ini mengasumsikan Anda tahu cara membuat file keystore. Agar tutorial ini bisa berfungsi, Anda perlu file keystore Anda berada di folder aplikasi Anda dan Anda harus memiliki file zipalign.exe Anda di 'SDK-ROOT \ tools'. File ini biasanya ditemukan di 'SDK-ROOT \ build-tools' dan di bawah folder ini akan berada di folder api tertinggi (alfa atau beta saya sarankan versi alfa).
Bagi Anda yang ingin langsung masuk ke sini adalah file gradle build.
Anda dapat membuat bagian dari file build ini (atas) dari opsi menu: Struktur File / Proyek Dari sini pilih Aspek dan klik 'Android-Gradle (App). Dari sini Anda akan melihat tab: 'Properti', 'Penandatanganan', 'Rasa', 'Bangun Jenis' dan 'Ketergantungan' untuk penelusuran ini, kami hanya akan menggunakan 'Penandatanganan' dan 'Bangun Jenis'. Di bawah 'Tipe Bangun' (di bagian nama) masukkan nama apa pun yang ingin Anda identifikasi konfigurasi tipe bangun Anda dan di 4 bidang lainnya masukkan informasi keystore Anda (atur jalur keystore yang di bawah folder aplikasi Anda).
Di bawah 'Bangun Jenis' masukkan nilai 'assembleRelease' ke dalam bidang nama, 'Debuggable' harus disetel ke false, 'Jni Debug Build' harus salah, set 'Jalankan Proguard' ke true dan 'Zip Align' ke true. Ini akan menghasilkan file build, tetapi tidak seperti yang digambarkan di atas, Anda harus menambahkan beberapa hal ke file build sesudahnya. Lokasi file ProGuard di sini akan ditetapkan secara manual dalam file gradle build. (seperti yang digambarkan di atas)
Wadah DSL yang harus Anda tambahkan setelahnya adalah sebagai berikut:
Anda juga harus menambahkan:
perhatikan wadah DSL ini di atas ('dependensi') harus di bagian bawah file konfigurasi tetapi tidak di dalam wadah DSL android. Untuk membangun wadah dependensi dari menu IntelliJ, pilih: File / Struktur Proyek. Dari sana pilih Aspek lagi dan kemudian Android-Gradle (aplikasi). Anda akan melihat 5 tab yang sama seperti yang disebutkan di atas. Pilih tab 'Ketergantungan' dan tambahkan dependensi yang Anda butuhkan.
Setelah semua ini dilakukan, Anda akan melihat file build Gradle mirip dengan file di bagian atas walk-through ini. Untuk membangun rilis selaras zip yang ditandatangani, Anda harus membuka tugas Gradle. Anda dapat membuka jendela ini dengan memilih View / Tool Windows / Gradle. Dari sini Anda dapat menggandakan Klik 'assembleAssembemblelease. Ini seharusnya menghasilkan APK yang bisa digunakan.
Masalah potensial yang dapat terjadi saat mengkompilasi rilis Anda adalah (tetapi tidak terbatas pada): File build Gradle Anda berada di tempat yang salah. Ada dua file build Gradle; satu di folder root aplikasi Anda dan yang lain di folder aplikasi di bawah root aplikasi. Anda harus menggunakan yang terakhir.
Anda mungkin juga memiliki masalah serat. (Catatan: Android Developer Studio jauh lebih baik dalam menemukan masalah Lint daripada IntelliJ Anda akan melihat ini ketika mencoba membuat APK yang ditandatangani dari opsi menu)
Untuk mengatasinya, Anda harus meletakkan wadah DSL berikut di dalam wadah android (di atas):
memasukkan ini ke dalam wadah DSL Android Anda akan menyebabkan file kesalahan dihasilkan di folder build (langsung di bawah folder aplikasi Anda) nama file harus seperti 'lint-results-release-fatal.html' file ini akan memberi tahu Anda kelas tempat kesalahan terjadi. File lain yang akan dihasilkan adalah file XML yang berisi 'ID masalah' yang terkait dengan kesalahan serat. Nama file harus seperti 'lint-results-release-fatal.xml'. Di suatu tempat di dekat bagian atas file Anda akan melihat simpul 'masalah' di dalamnya Anda akan melihat sesuatu yang mirip dengan 'id = "IDOfYourLintProblem"'
Untuk memperbaiki masalah ini, buka file di proyek Anda yang terdaftar di file 'lint-results-assembleRelease-fatal.html' dan masukkan baris kode berikut dalam file Java Class tepat di atas nama kelas: @SuppressLint ("IDOfYourLintProblem "). Anda mungkin harus mengimpor 'android.annotation.SuppressLint;'
Jadi file kelas java Anda akan muncul seperti:
Perhatikan bahwa menekan kesalahan serat tidak selalu merupakan IDE terbaik yang Anda mungkin lebih baik untuk mengubah kode Anda yang menyebabkan kesalahan serat.
Masalah lain yang berpotensi terjadi adalah jika Anda belum menetapkan variabel lingkungan untuk variabel lingkungan Gradle HOME. Variabel ini bernama 'GRADLE_HOME' dan harus disetel path direktori home gradle, sesuatu seperti 'C: \ gradle-1.12' Kadang-kadang Anda mungkin juga ingin mengatur variabel lingkungan untuk 'ANDROID_HOME' atur ini ke 'ANDA- SDK-Root \ sdk '
Setelah ini selesai kembali ke jendela tugas Gradle dan klik dua kali assembleAssembleRelease.
Jika semuanya berhasil, Anda harus dapat membuka aplikasi folder \ build \ apk dan menemukan file APK yang dapat digunakan.
sumber
Namun pendekatan lain untuk masalah yang sama. Karena tidak disarankan untuk menyimpan kredensial apa pun dalam kode sumber, kami memutuskan untuk menetapkan kata sandi untuk penyimpanan kunci dan alias kunci dalam file properti terpisah sebagai berikut:
Jika Anda menggunakan git, Anda dapat membuat file teks bernama, misalnya, secure.properties. Anda harus memastikan untuk mengecualikannya dari repositori Anda (jika menggunakan git, menambahkannya ke file .gitignore). Kemudian, Anda perlu membuat konfigurasi penandatanganan, seperti yang ditunjukkan beberapa jawaban lainnya. Satu-satunya perbedaan adalah bagaimana Anda memuat kredensial:
Jangan pernah lupa untuk menugaskan penandatanganan konfigurasi untuk tipe rilis rilis secara manual (untuk beberapa alasan saya terkadang menganggap itu akan digunakan secara otomatis). Selain itu, tidak wajib untuk mengaktifkan proguard, tetapi dianjurkan.
Kami menyukai pendekatan ini lebih baik daripada menggunakan variabel lingkungan atau meminta input pengguna karena dapat dilakukan dari IDE, dengan beralih ke tipe build realease dan menjalankan aplikasi, daripada harus menggunakan baris perintah.
sumber
Android Studio Buka File -> Struktur Proyek atau tekan Ctrl + Alt + Shift + S
Lihat Gambar
Klik Oke
Maka signConfigs akan menghasilkan pada file build.gradle Anda.
sumber
Saya memiliki beberapa masalah yang membuat baris berikut di tempat yang salah:
Pastikan Anda memasukkan bagian SignConfigs di dalam bagian android:
dari pada
Mudah untuk melakukan kesalahan ini.
sumber
Ini adalah 2019 dan saya harus menandatangani APK dengan V1 (tanda tangan jar) atau V2 (tanda tangan APK lengkap). Saya Google "menghasilkan grad apk yang ditandatangani" dan itu membawa saya ke sini. Jadi saya menambahkan solusi asli saya di sini.
Pertanyaan asli saya: Cara menggunakan V1 (Jar signature) atau V2 (tanda tangan APK Lengkap) dari file build.gradle
sumber
Untuk melengkapi jawaban lainnya, Anda juga dapat menempatkan file properti gradle.prop di folder modul Anda sendiri, bersama dengan build.gradle, untuk berjaga-jaga jika keystore Anda dikhususkan untuk satu proyek.
sumber
saya bekerja di Ubuntu14.04. vim ~ / .bashrc dan tambahkan ekspor ANDROID_KEYSTORE = ekspor ANDROID_KEYALIAS =
dan kemudian di set build.gradle.
sumber
System.console()
pengembaliannull
.Alternatifnya adalah dengan mendefinisikan tugas yang berjalan hanya pada rilis rilis.
sumber
Anda dapat meminta kata sandi dari baris perintah:
The
if-then-else
blok mencegah permintaan password ketika Anda sedang membangun sebuah rilis. Meskipunelse
cabang tidak dapat dijangkau, ia menipu Gradle untuk membuatinstall...Release
tugas.Backstory . Seperti dicatat oleh https://stackoverflow.com/a/19130098/3664487 , " Script gradle dapat meminta input pengguna menggunakan System.console (). Metode readLine ." Sayangnya, Gradle akan selalu meminta kata sandi, bahkan ketika Anda sedang membuat rilis debug (lih. Bagaimana cara membuat file apk bertanda rilis menggunakan Gradle? ). Untungnya, ini bisa diatasi, seperti yang saya tunjukkan di atas.
sumber
Menambahkan cara saya untuk melakukannya di React-Native menggunakan paket react-native-config .
Buat file .env:
perhatikan ini seharusnya tidak menjadi bagian dari kontrol versi.
di Anda
build.gradle
:sumber
Dalam kasus saya, saya mengunggah apk yang salah, ke rilis aplikasi lain.
sumber
Untuk Groovy (build.gradle)
Anda tidak harus menempatkan kredensial penandatanganan Anda langsung di build.gradle file . Sebaliknya kredensial harus berasal dari file yang tidak di bawah kontrol versi.
Letakkan file dengan penandatanganan.properti tempat modul khusus build.gradle ditemukan. Jangan lupa untuk menambahkannya ke file .gitignore Anda !
menandatangani.properti
build.gradle
sumber
Untuk Skrip Kotlin (build.gradle.kts)
Anda tidak boleh memasukkan kredensial penandatanganan Anda langsung di build.gradle.kts file . Sebaliknya kredensial harus berasal dari file yang tidak di bawah kontrol versi.
Letakkan file signed.properties tempat modul khusus build.gradle.kts ditemukan. Jangan lupa untuk menambahkannya ke file .gitignore Anda !
menandatangani.properti
build.gradle.kts
sumber
jika Anda tidak ingin melihat Cannot invoke method readLine () pada objek nol. Anda perlu menulis di gradle.properties terlebih dahulu.
sumber