Di versi terbaru ADT (r17), konstanta yang dihasilkan ditambahkan BuildConfig.DEBUG
yang disetel sesuai dengan tipe build. Masalah yang saya hadapi adalah bahwa ini tidak pernah disetel ke false, saya mengharapkannya berubah saat melakukan "Alat Android -> Ekspor Paket Aplikasi yang Ditandatangani" tetapi tidak untuk saya.
Jadi, bagaimana cara mengubah jenis build?
Menambahkan fitur yang memungkinkan Anda menjalankan beberapa kode hanya dalam mode debug. Build sekarang menghasilkan kelas yang disebut BuildConfig yang berisi konstanta DEBUG yang secara otomatis disetel sesuai dengan jenis build Anda. Anda dapat memeriksa konstanta (BuildConfig.DEBUG) dalam kode Anda untuk menjalankan fungsi khusus debug
Jawaban:
Saat ini Anda bisa mendapatkan perilaku yang benar dengan menonaktifkan "Bangun Secara Otomatis", membersihkan proyek dan kemudian mengekspor melalui "Alat Android -> Ekspor Paket Aplikasi yang Ditandatangani". Saat Anda menjalankan aplikasi
BuildConfig.DEBUG
harus salah.sumber
Dengan Eclipse , saya selalu menonaktifkan opsi "Bangun Secara Otomatis" sebelum Mengekspor aplikasi dalam rilis. Kemudian saya membersihkan proyek dan mengekspor. Jika tidak, ia mulai menyusun dalam mode debug, dan kemudian nilai BuildConfig.DEBUG mungkin salah.
Dengan Android Studio , saya cukup menambahkan variabel khusus saya sendiri di build.gradle:
Ketika saya membangun proyek, BuildConfig.java dibuat sebagai berikut:
Kemudian dalam kode saya, saya dapat menggunakan:
Saya merekomendasikan untuk membersihkan setelah beralih debug / rilis build.
sumber
Itu tidak berfungsi dengan baik:
Masalah 27940 : BuildConfig.DEBUG adalah "benar" untuk paket aplikasi yang diekspor
Sangat mengecewakan bahwa terkadang mereka merilis fitur buggy.
sumber
Itu berfungsi, tetapi perhatikan bahwa file kode tidak pernah berubah, bahkan saat mengekspor file yang ditandatangani. Ekspor proses mengubah nilai variabel ini ke false, yang mungkin memberikan kesan palsu bahwa itu tidak bekerja. Saya menguji ini dengan pernyataan logging seperti
Saat menguji, pernyataan Log saya tidak lagi menghasilkan keluaran apa pun.
sumber
Periksa
imports
, terkadang BuildConfig diimpor dari kelas pustaka mana pun secara tidak sengaja. Sebagai contoh:Dalam hal ini, BuildConfig.DEBUG akan selalu mengembalikan false ;
Dalam hal ini, BuildConfig.DEBUG akan mengembalikan varian build Anda yang sebenarnya .
ps Saya baru saja menyalin yang ini dari jawaban saya di sini: BuildConfig.DEBUG selalu salah saat membangun proyek perpustakaan dengan gradle
sumber
android.support.compat
. Saya rasa itu alasan lain untuk mendefinisikan bidang Anda sendiri dengan nama yang berbeda.Dari Mempersiapkan untuk Rilis :
Informasi lebih lanjut mengikuti tautan.
sumber
Solusi untuk saya:
Ini bekerja di r20
sumber
Saya ingin mengusulkan solusi sederhana jika Anda menggunakan proguard selama ekspor APK.
Proguard menyediakan cara untuk menghapus panggilan ke fungsi tertentu dalam mode rilis. Semua panggilan untuk log debugging dapat dihapus dengan pengaturan berikut di
proguard-project.txt
.Dan pengaturan optimasi di
project.properties
.Dengan ini, Anda tidak perlu mengkhawatirkan komputasi String yang tidak perlu yang meneruskan ke log debug yang ditunjuk oleh @Jeremyfa. Perhitungan baru saja dihapus dalam rilis build.
Jadi solusi untuk BuildConfig.DEBUG menggunakan fitur proguard yang sama seperti berikut.
Dan mengikuti pengaturan di
proguard-project.txt
.Saya lebih suka menggunakan ini untuk menonaktifkan
Build Automatically
opsi, karena ini tidak tergantung pada pengaturan IDE individu pembuat tetapi dipertahankan sebagai file yang berkomitmen yang dibagikan di antara pengembang.sumber
Tidak berfungsi dengan baik sejauh yang saya mengerti ( Masalah Android 22241 )
Saya mengalami masalah pada sebuah proyek (bekerja dengan Eclipse), konstanta itu tidak disetel ke true saat mengekspor APK yang ditandatangani dari proyek saya :(
Akan sangat senang mendengarnya berhasil
sumber
cara yang baik adalah membuat kelas Anda sendiri:
sumber
Saya telah melihat beberapa perilaku aneh yang berkaitan dengan saat nilai di BuildConfig disetel ke nilai akhirnya. Ini mungkin ada hubungannya dengan masalah Anda.
Penjelasan sederhananya adalah bahwa nilai default ditetapkan pada awalnya sebelum Proguard dijalankan, kemudian setelah Proguard dijalankan, file BuildConfig dibuat ulang dengan nilai yang sesuai. Namun, Proguard telah mengoptimalkan kode Anda pada saat ini dan Anda mengalami masalah.
Berikut adalah bug yang saya buat terhadap Gradle. https://code.google.com/p/android/issues/detail?id=182449
sumber