Sejauh yang saya tahu, di android "rilis build" adalah APK bertanda tangan. Bagaimana cara memeriksanya dari kode atau apakah Eclipse memiliki semacam definisi rahasia?
Saya memerlukan ini untuk men-debug mengisi item ListView dari data layanan web (tidak, logcat bukan opsi).
Pikiran saya:
- Aplikasi
android:debuggable
, tetapi untuk beberapa alasan itu tidak terlihat dapat diandalkan. - ID perangkat pengkodean keras bukanlah ide yang baik, karena saya menggunakan perangkat yang sama untuk menguji APK yang ditandatangani.
- Menggunakan tanda manual di suatu tempat dalam kode? Masuk akal, tetapi suatu saat pasti akan lupa untuk mengubahnya, ditambah lagi semua pemrogram malas.
android
debugging
certificate
Im0rtality
sumber
sumber
Jawaban:
Ada cara berbeda untuk memeriksa apakah aplikasi dibuat menggunakan debug atau sertifikat rilis, tetapi cara berikut menurut saya paling baik.
Menurut info dalam dokumentasi Android Menandatangani Aplikasi Anda , kunci debug berisi nama yang dibedakan subjek berikut: " CN = Android Debug, O = Android, C = US ". Kita dapat menggunakan informasi ini untuk menguji apakah paket ditandatangani dengan kunci debug tanpa tanda tangan kunci debug hardcode ke dalam kode kita.
Diberikan:
Anda dapat mengimplementasikan metode isDebuggable dengan cara ini:
sumber
java.security.cert.X509Certificate
,java.security.cert.CertificateException
danandroid.content.pm.Signature
. Semua kelas lain tidak menyajikan beberapa pertandingan untuk sayaUntuk memeriksa flag debuggable, Anda dapat menggunakan kode ini:
Kotlin:
Untuk informasi lebih lanjut, silakan lihat Mengamankan Aplikasi LVL Android .
Atau, jika Anda menggunakan Gradle dengan benar, Anda dapat memeriksa apakah
BuildConfig.DEBUG
benar atau salah.sumber
Dijawab oleh Mark Murphy
Solusi jangka panjang yang paling sederhana dan terbaik adalah dengan menggunakan
BuildConfig.DEBUG
. Ini adalahboolean
nilai yang akan digunakantrue
untuk debug build,false
jika tidak:sumber
Jika Anda ingin memeriksa secara
APK
statis, Anda bisa menggunakanOutput ini
0
jikaAPK
tidak debuggable dan1
jika.sumber
aapt
tinggal di sini/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Mungkin terlambat, tapi penggunaan yang terjatuh
BuildConfig.DEBUG
sumber
Pertama tambahkan ini ke file build.gradle Anda, ini juga akan memungkinkan berjalannya debug dan rilis build secara berdampingan:
Tambahkan metode ini:
sumber
Sebuah build debug ditandatangani juga, hanya dengan kunci yang berbeda. Ini dibuat secara otomatis oleh Eclipse, dan sertifikatnya hanya berlaku untuk satu tahun. Apa masalahnya
android:debuggable
? Anda bisa mendapatkan nilai ini dari kode menggunakanPackageManager
.sumber
Opsi lain, layak disebutkan. Jika Anda perlu menjalankan beberapa kode hanya saat debugger terpasang, gunakan kode ini:
sumber
Diselesaikan dengan
android:debuggable
. Itu adalah bug dalam membaca item di mana dalam beberapa kasus tanda debug pada item tidak disimpan dalam catatan untukif (m.debug && !App.isDebuggable(getContext()))
selalu dievaluasifalse
. Salahku.sumber
Solusi di Kotlin yang saya gunakan saat ini:
dengan cara itu saya masih bisa SIGN di debug dan itu akan dilaporkan ke Crashlytics (contoh, untuk proses QA)
sumber