ProGuard, Android Studio'da nasıl kullanılır?


98

Bu, Android Studio'daki ilk projem ve uygulamalarımın kodu karmaşık değil. Bu yapılandırmayı build.gradle dosyasında kullanıyorum: görüntü açıklamasını buraya girin

Proguard Çalıştır işaretli olarak Oluştur> İmzalı APK Oluştur ... seçeneğini kullanıyorum. Ve Apk_OneClick.v4.2'yi kullanarak test ettiğimde kodumun okunması tamamen kolay:

görüntü açıklamasını buraya girin

Lütfen bana yardım et. :(


Gizleme kodu için metin dosyasında tanımlanan proguard kurallarınızı gösterin.
— pyus13

Uygulamanın karmaşık olup olmadığı nasıl kontrol edilir?
— VVB

Ters araçsal APK-dosyası tarafından @VVB sanırım: D
— hothead

Yanıtlar:


71

Muhtemelen imzalama sihirbazı aracılığıyla APK'nin yayın yapısını imzalamıyorsunuzdur. Sürüm APK'sini komut satırından şu komutla oluşturabilirsiniz:

./gradlew assembleRelease

veya Derleme Varyantları görünümünden sürüm varyantını seçebilir ve GUI'den oluşturabilirsiniz:

Derleme Varyantlarını gösteren IDE ana penceresi


Harika! Proguard'ı doğru çalıştırmak için hata ayıklamayı değiştirmeyi test ettim ve mükemmel çalışıyor. Şimdi cevabınızı okudum ve işe yarıyor !!!! Harika adam! Teşekkür ederim.
— Felipe Porge Xavier

Hata! Komut satırı yönergelerime yanlışlıkla "assembleRelease" yerine "assembleDebug" ekledim. Cevabımı düzelttim.
— Scott Barta

Komut satırı aracılığıyla dışa aktarılan .apk dosyasının yolu nedir?
— Shajeel Afzal

50

Build.gradle dosyanızı proguard uygulaması için yapılandırabilirsiniz. Modül düzeyinde veya proje düzeyinde olabilir.

 buildTypes {

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

    }

}

Gösterilen yapılandırma hata ayıklama seviyesi içindir, ancak aşağıdaki buildTypes içinde gösterildiği gibi kendi derleme çeşitlerinizi yazabilirsiniz:

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

Hata ayıklama minifyEnabled falseve üretim oluşturma ve diğer yapıları minifyEnabled true.

Proguard-rules.txt dosyanızı modülünüzün kök dizinine veya proje klasörüne kopyalayın.

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

Dosyanızın adını istediğiniz gibi değiştirebilirsiniz. Yapılandırmadan sonra, buildType'a göre yapınızı oluşturmak için mevcut üç seçenekten birini kullanın

  1. Sağ paneldeki görevi derecelendirmeye gidin ve assembleRelease/assemble(#your_defined_buildtype)modül altında görevleri arayın

  2. Sol Panelde Varyant Oluştur seçeneğine gidin ve açılır menüden yapıyı seçin

  3. Dosya Gezgini'nde proje kök dizinine gidin ve cmd / terminali açın ve çalıştırın

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

pencereler gradlew assembleRelease or assemble(#your_defined_buildtype)

Apk'yi module / build dizininizde bulabilirsiniz.

Yapılandırma ve proguard dosyalarının konumu hakkında daha fazla bilgiyi bağlantıda bulabilirsiniz.

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


Myproductionbuild'i kullanmayı nerede söyleyebilirim?
— Felipe Porge Xavier

ya, haklısınız :) aynısını sol paneldeki varyant oluştur sekmesinde de görebilirsiniz.
— pyus13

Ancak apk'de belirsizlik yok ... :(
— Felipe Porge Xavier

yapılandırmayı proguard-rule.txt olarak yazdınız mı buradaki bazı örneklere bakın proguard.sourceforge.net/index.html#manual/examples.html
— pyus13

Gradle DSL yöntemine sahibim runProguard () bulunamadı.
— SleepNot

41

NB .: Şimdi yerine

runProguard false

kullanmanız gerekecek

minifyEnabled false

5
sanırım doğru olarak
— ayarlanmış

1

'Proguard-rules.txt' dosyanızı 'proguard-android.txt' olarak yeniden adlandırmayı deneyin ve gradle dosyanızdaki 'proguard-rules.txt' referansını kaldırın. getDefaultProguardFile(...)Çağrı farklı bir varsayılan proguard dosyası, bir Google tarafından sağlanan ve projenizde o başvurur. Öyleyse bunu da kaldırın, böylece burada gradle dosyası şunu okur:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}

Benim için çalışmayın. Özel proguard-android.txt'mi proguard-rules.txt ile aynı dizine koydum, ancak kodumda hiçbir şey değişmedi.
— Felipe Porge Xavier

0

Buradaki diğer cevaplar proguard'ı kullanma konusunda harika referanslardır. Bununla birlikte, karşılaştığım bir zihin bükücü olan tartışılan bir konu görmedim. İmzalı bir .apk sürümü oluşturduktan sonra, bu /release, uygulamanızdaki klasöre yerleştirilir, ancak uygulamamın /releaseklasörde olmayan bir apk'si vardı . Bu nedenle, proguard değişikliklerimin neden hiçbir etkisi olmadığını merak ederek yanlış apk'yi yeniden derlemek için saatler harcadım. Umarım bu birine yardımcı olur!


0

İşte Android Sutdio'da proguard-rules.pro dosyasına eklemeniz gereken En Yaygın Proguard Kurallarından Bazıları.

Tereyağı bıçağı

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

Güçlendirme

 -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.** { *; }

Kod gizleme

-keepclassmembers class com.yourname.models** { <fields>; }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.