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.