Bagaimana cara menggunakan ProGuard di Android Studio?

98

Ini adalah proyek pertama saya di Android Studio, dan kode aplikasi saya tidak dikaburkan. Saya menggunakan konfigurasi ini dalam file build.gradle: masukkan deskripsi gambar di sini

Saya menggunakan Build> Generate Signed APK ... dengan Run Proguard dicentang. Dan, ketika saya telah menguji menggunakan Apk_OneClick.v4.2, kode saya sangat mudah dibaca:

masukkan deskripsi gambar di sini

Tolong bantu aku. :(

Felipe Porge Xavier
sumber
tampilkan aturan proguard Anda yang ditentukan dalam file teks untuk kode obfuscate.
pyus13
Bagaimana cara memeriksa apakah aplikasi dikaburkan atau tidak?
VVB
@VVB oleh file APK rekayasa terbalik Saya kira: D
hotHead

Jawaban:

71

Anda mungkin tidak benar-benar menandatangani build rilis APK melalui wizard penandatanganan. Anda bisa membuat APK rilis dari command line dengan perintah:

./gradlew assembleRelease

atau Anda dapat memilih varian rilis dari tampilan Build Variants dan membangunnya dari GUI:

Jendela utama IDE menampilkan Build Variants

Scott Barta
sumber
Bagus! Saya telah menguji mengubah debug menjadi runProguard true dan bekerja dengan sempurna. Sekarang saya membaca balasan Anda, dan bekerja !!!! Orang hebat! Terima kasih.
Felipe Porge Xavier
Ups, saya tidak sengaja memasukkan "assembleDebug" dan bukan "assembleRelease" dalam instruksi baris perintah saya. Saya memperbaiki jawaban saya.
Scott Barta
Apa jalur file .apk yang diekspor melalui baris perintah?
Shajeel Afzal
50

Anda dapat mengonfigurasi file build.gradle Anda untuk implementasi proguard. Itu bisa di tingkat modul atau tingkat proyek.

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

Konfigurasi yang ditampilkan adalah untuk level debug, tetapi Anda dapat menulis ragam build Anda sendiri seperti yang ditunjukkan di bawah ini di dalam buildTypes:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

Lebih baik debug dengan minifyEnabled falsedan productionbuild serta build lain sebagai minifyEnabled true.

Salin file proguard-rules.txt Anda di root modul atau folder proyek Anda seperti

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

Anda dapat mengubah nama file Anda sesuai keinginan. Setelah konfigurasi, gunakan salah satu dari tiga opsi yang tersedia untuk menghasilkan build Anda sesuai dengan buildType

  1. Pergi ke tugas gradle di panel kanan dan cari di assembleRelease/assemble(#your_defined_buildtype)bawah tugas modul

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

  3. Buka direktori root proyek di File Explorer dan buka cmd / terminal dan jalankan

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

Windows gradlew assembleRelease or assemble(#your_defined_buildtype)

Anda dapat menemukan apk di direktori modul / build Anda.

Lebih lanjut tentang konfigurasi dan lokasi file proguard tersedia di tautan

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard

pyus13
sumber
Di mana saya dapat mengatakan untuk menggunakan myproductionbuild?
Felipe Porge Xavier
ya, Anda benar :) Anda bisa melihat hal yang sama di tab build Variant di panel sisi kiri.
pyus13
Tapi apk tidak memiliki obfuscate ... :(
Felipe Porge Xavier
sudahkah Anda menulis konfigurasi di proguard-rule.txt lihat beberapa contoh di sini proguard.sourceforge.net/index.html#manual/examples.html
pyus13
Saya mengalami runProguard () metode Gradle DSL tidak ditemukan.
SleepNot
41

NB .: Sekarang, bukan

runProguard false

Anda harus menggunakan

minifyEnabled false
ViliusK
sumber
5
tebak itu harus
disetel
1

Coba ganti nama file 'proguard-rules.txt' menjadi 'proguard-android.txt' dan hapus referensi ke 'proguard-rules.txt' di file gradle Anda. The getDefaultProguardFile(...)panggilan referensi file default proguard yang berbeda, yang disediakan oleh Google dan tidak dalam proyek Anda. Jadi hapus ini juga, sehingga di sini file gradle terbaca:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}
SK9
sumber
Jangan bekerja untukku. Saya meletakkan proguard-android.txt kustom saya di direktori yang sama dengan proguard-rules.txt, tetapi tidak ada yang berubah dalam kode saya.
Felipe Porge Xavier
0

Jawaban lain di sini adalah referensi bagus tentang penggunaan proguard. Namun, saya belum melihat masalah yang saya hadapi yang merupakan penyok pikiran. Setelah Anda membuat rilis bertanda tangan .apk, itu dimasukkan ke dalam /releasefolder di aplikasi Anda tetapi aplikasi saya memiliki apk yang tidak ada di /releasefolder tersebut. Oleh karena itu, saya menghabiskan berjam-jam menguraikan apk yang salah sambil bertanya-tanya mengapa perubahan proguard saya tidak berpengaruh. Semoga ini bisa membantu seseorang!

mikeLundquist
sumber
0

Berikut adalah Beberapa Aturan Proguard Paling Umum yang perlu Anda tambahkan dalam file proguard-rules.pro di Android Sutdio.

Pisau mentega

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

Retrofit

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

Kode obfuscation

-keepclassmembers class com.yourname.models** { <fields>; }
Bhavik Nathani
sumber