Saya mencoba mengatur proses penandatanganan sehingga kata sandi dan kata sandi kunci keystore tidak disimpan dalam file proyek build.gradle
.
Saat ini saya memiliki yang berikut di build.gradle
:
android {
...
signingConfigs {
release {
storeFile file("my.keystore")
storePassword "store_password"
keyAlias "my_key_alias"
keyPassword "key_password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Ini berfungsi dengan baik tetapi saya tidak harus meletakkan nilai untuk storePassword
, dan keyPassword
di repositori saya. Saya lebih suka untuk tidak menaruh storeFile
dan di keyAlias
sana juga.
Apakah ada cara untuk mengubah build.gradle
sehingga akan mendapatkan kata sandi dari beberapa sumber eksternal (seperti file yang hanya berada di komputer saya)?
Dan tentu saja, yang diubah build.gradle
harus dapat digunakan di komputer lain (bahkan jika komputer tidak memiliki akses ke kata sandi).
Saya menggunakan Android Studio dan di Mac OS X Maverics jika itu penting.
sumber
build.gradle
, Anda harus memiliki sesuatu selainbuild.gradle
, apakah itu adalah penyesuaian ke variabel lingkungan (per satu jawaban), file properti (per jawaban lain), atau cara lain. Jika Anda tidak ingin memiliki hal-hal di luarbuild.gradle
, maka menurut definisi semua informasi penandatanganan harus ada di dalambuid.gradle
.Jawaban:
Yang menyenangkan tentang Groovy adalah Anda dapat dengan bebas mencampurkan kode Java, dan cukup mudah dibaca menggunakan file kunci / nilai
java.util.Properties
. Mungkin ada cara yang bahkan lebih mudah menggunakan Groovy idiomatik, tetapi Java masih cukup sederhana.Buat
keystore.properties
file (dalam contoh ini, di direktori root proyek Anda di sebelahsettings.gradle
, meskipun Anda dapat meletakkannya di mana pun Anda suka:Tambahkan ini ke Anda
build.gradle
:sumber
storeFile file('AndroidManifest.xml')
) Dan kemudian menimpanya menyebabkan proses penandatanganan berlangsung.Error:(24, 0) Could not find property 'android' on root project 'RootProjectName'
mana baris 24 adalah yang dengan blok if. Menambahkanapply plugin: 'com.android.application'
ke root build.gradle juga membuat build gagal. Apa yang saya lakukan salah?Could not get unknown property 'android' for root project
Atau, jika Anda ingin menerapkan jawaban Scott Barta dengan cara yang lebih mirip dengan kode grader yang dibuat secara otomatis, Anda dapat membuat
keystore.properties
file di folder root proyek Anda:dan modifikasi kode gradle Anda ke:
Anda dapat menyimpan file properti ini di root modul Anda, dalam hal ini hanya menghilangkan
rootProject
, dan Anda juga dapat memodifikasi kode ini untuk memiliki beberapa set properti untuk keystores dan alias kunci yang berbeda.sumber
if ( keystorePropertiesFile.exists() )
memastikan file itu ada sebelum mencoba untuk mendapatkan atribut dan mencoba untuk masuk..txt
ekstensi di akhirkeystore.properties
file..txt
ekstensi padakeystore.properties
file.Cara termudah adalah membuat
~/.gradle/gradle.properties
file.Maka
build.gradle
file Anda dapat terlihat seperti ini:sumber
Setelah membaca beberapa tautan:
http://blog.macromates.com/2006/keychain-access-from-shell/ http://www.thoughtworks.com/es/insights/blog/signing-open-source-android-apps-without-disclosing- kata sandi
Karena Anda menggunakan Mac OSX, Anda dapat menggunakan Akses Keychain untuk menyimpan kata sandi Anda.
Kemudian dalam skrip gradle Anda:
Gunakan seperti ini:
sumber
Beginilah cara saya melakukannya. Gunakan Variabel Lingkungan
sumber
Neither path nor baseDir may be null or empty string. path='null'
Dimungkinkan untuk mengambil proyek gradasi Android Studio yang ada dan membangun / menandatanganinya dari baris perintah tanpa mengedit file apa pun. Ini membuatnya sangat bagus untuk menyimpan proyek Anda dalam kontrol versi sambil menjaga kunci dan kata sandi Anda terpisah dan tidak dalam file build.gradle Anda:
sumber
Jawaban yang diterima menggunakan file untuk mengontrol keystore mana yang akan digunakan untuk menandatangani APK yang berada di folder root proyek yang sama. Ketika kita menggunakan vcs seperti Git , bisa jadi hal yang buruk ketika kita lupa menambahkan file properti ke daftar abaikan. Karena kami akan mengungkapkan kata sandi kami kepada dunia. Masalahnya masih ada.
Alih-alih membuat file properti di direktori yang sama dalam proyek kami, kita harus membuatnya di luar. Kami membuatnya di luar dengan menggunakan file gradle.properties.
Berikut langkah-langkahnya:
1. Edit atau buat gradle.properties pada proyek root Anda dan tambahkan kode berikut, ingatlah untuk mengedit lintasan dengan Anda sendiri:
2.Buat properti androidproject.prop di / path / Anda / dan tambahkan kode berikut ke dalamnya, jangan lupa untuk mengubah /your/path/to/android.keystore ke jalur keystore Anda:
3.Dalam build.gradle modul aplikasi Anda (bukan build.gradle root proyek Anda) tambahkan kode berikut jika tidak ada atau sesuaikan dengannya:
4.Tambahkan kode berikut di bawah kode pada langkah 3:
Kode ini akan mencari properti AndroidProject.signing di gradle.properties dari langkah 1 . Jika properti ditemukan, itu akan menerjemahkan nilai properti sebagai path file yang menunjuk ke androidproject.properties yang kita buat di langkah 2 . Maka semua nilai properti darinya akan digunakan sebagai konfigurasi penandatanganan untuk build.gradle kami.
Sekarang kita tidak perlu khawatir lagi akan risiko mengekspos kata sandi kami.
Baca lebih lanjut di Signing Android apk tanpa memasukkan informasi keystore di build.gradle
sumber
Bagi yang ingin memasukkan kredensial mereka dalam file JSON eksternal dan membacanya dari gradle, inilah yang saya lakukan:
my_project / credentials.json:
my_project / android / app / build.gradle
Alasan saya memilih
.json
tipe file, dan bukan.properties
tipe file (seperti pada jawaban yang diterima), adalah karena saya ingin juga menyimpan data lain (properti khusus lain yang saya butuhkan) ke file yang sama (my_project/credentials.json
), dan masih harus mengurai parse menandatangani informasi dari dalam file itu juga.sumber
Pertanyaan ini telah menerima banyak jawaban yang valid, tetapi saya ingin membagikan kode saya yang mungkin berguna bagi pengelola perpustakaan , karena meninggalkan yang asli
build.gradle
cukup bersih .Saya menambahkan folder ke direktori modul yang saya
gitignore
. Ini terlihat seperti ini:keystore.jks
dansigning.properties
harus jelas. Dansigning.gradle
terlihat seperti ini:Dan yang asli
build.gradle
Seperti yang Anda lihat, Anda tidak perlu menentukan buildTypes sama sekali, jika pengguna memiliki akses ke
signing
direktori yang valid , ia hanya memasukkannya ke dalam modul dan ia dapat membangun aplikasi rilis yang ditandatangani yang valid, jika tidak, itu hanya berfungsi untuknya seperti itu biasanya akan dilakukan.sumber
apply from
perlu dicatat, harus datang setelahandroid
blokAnda dapat meminta kata sandi dari baris perintah:
Jawaban ini sebelumnya muncul: https://stackoverflow.com/a/33765572/3664487
sumber
Kata sandi saya berisi karakter khusus yang masuk dolar $ dan saya harus menghindarinya dalam file gradle.properties. Setelah itu, penandatanganan bekerja untuk saya.
sumber