Jak korzystać z ProGuard w Android Studio?


98

To mój pierwszy projekt w Android Studio, a kod moich aplikacji nie jest zaciemniony. Używam tej konfiguracji w pliku build.gradle: wprowadź opis obrazu tutaj

Używam kompilacji> Generuj podpisany plik APK ... z zaznaczonym Run Proguard. A kiedy testowałem przy użyciu Apk_OneClick.v4.2, mój kod jest całkowicie łatwy do odczytania:

wprowadź opis obrazu tutaj

Proszę pomóż mi. :(


pokaż reguły proguard zdefiniowane w pliku tekstowym dla zaciemnionego kodu.
— pyus13

Jak sprawdzić, czy aplikacja jest zaciemniona, czy nie?
— VVB,

@VVB przez odwrotną inżynierię plik APK, jak sądzę: D
— hotHead

Odpowiedzi:


71

Prawdopodobnie nie podpisujesz wersji wydania pakietu APK za pomocą kreatora podpisywania. Możesz zbudować pakiet APK wydania z wiersza poleceń za pomocą polecenia:

./gradlew assembleRelease

lub możesz wybrać wariant wydania z widoku Warianty kompilacji i zbudować go z GUI:

Główne okno IDE pokazujące warianty kompilacji


Wspaniały! Przetestowałem, zmieniając debug na runProguard, prawda i działa idealnie. Teraz czytam twoją odpowiedź i działa !!!! Wielki człowiek! Dziękuję Ci.
— Felipe Porge Xavier

Ups, przypadkowo umieściłem „assembleDebug” zamiast „assembleRelease” w moich instrukcjach wiersza polecenia. Poprawiłem odpowiedź.
— Scott Barta

Jaka jest ścieżka do pliku .apk eksportowanego za pomocą wiersza poleceń?
— Shajeel Afzal

50

Możesz skonfigurować plik build.gradle pod kątem implementacji programu Proguard. Może to być na poziomie modułu lub na poziomie projektu.

 buildTypes {

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

    }

}

Pokazana konfiguracja dotyczy poziomu debugowania, ale możesz napisać własne style kompilacji, jak pokazano poniżej w buildTypes:

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

Lepiej jest mieć debugowanie, minifyEnabled falsekompilację produkcyjną i inne kompilacje jako minifyEnabled true.

Skopiuj plik proguard-rules.txt do katalogu głównego modułu lub folderu projektu, takiego jak

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

Możesz zmienić nazwę pliku, jak chcesz. Po skonfigurowaniu użyj jednej z trzech dostępnych opcji, aby wygenerować kompilację zgodnie z typem buildType

  1. Przejdź do zadania oceny w prawym panelu i wyszukaj assembleRelease/assemble(#your_defined_buildtype)zadania pod modułami

  2. Przejdź do opcji Build Variant w lewym panelu i wybierz kompilację z listy rozwijanej

  3. Przejdź do katalogu głównego projektu w Eksploratorze plików i otwórz cmd / terminal i uruchom

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

Windows gradlew assembleRelease or assemble(#your_defined_buildtype)

Możesz znaleźć apk w katalogu module / build.

Więcej o konfiguracji i lokalizacji plików proguard można znaleźć pod linkiem

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


Gdzie mogę powiedzieć, aby użyć mojej konstrukcji produkcyjnej?
— Felipe Porge Xavier

tak, masz rację :) możesz zobaczyć to samo w zakładce Wariant kompilacji na lewym panelu bocznym.
— pyus13

Ale apk nie ma zaciemniania ... :(
— Felipe Porge Xavier

czy zapisałeś konfigurację w proguard-rule.txt zobacz kilka przykładów tutaj proguard.sourceforge.net/index.html#manual/examples.html
— pyus13

Nie znaleziono metody Gradle DSL runProguard ().
— SleepNot

41

NB .: Teraz zamiast

runProguard false

będziesz musiał użyć

minifyEnabled false

5
zgaduję, że powinno być
— ustawione

1

Spróbuj zmienić nazwę pliku „proguard-rules.txt” na „proguard-android.txt” i usuń odniesienie do „proguard-rules.txt” w pliku gradle. getDefaultProguardFile(...)Wywołanie odwołuje inny domyślny plik PROGUARD, jeden udostępnianej przez Google, a nie, że w swoim projekcie. Więc usuń to również, aby tutaj plik gradle brzmiał:

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

Nie pracuj dla mnie. Umieściłem mój niestandardowy proguard-android.txt w tym samym katalogu przez proguard-rules.txt, ale nic się nie zmieniło w moim kodzie.
— Felipe Porge Xavier

0

Pozostałe odpowiedzi to świetne odniesienia do korzystania z proguard. Jednak nie widziałem omawianego problemu, na który natknąłem się, że był to głupek. Po wygenerowaniu podpisanej wersji .apk jest ona umieszczana w /releasefolderze w Twojej aplikacji, ale moja aplikacja miała plik APK, którego nie było w /releasefolderze. Dlatego spędziłem godziny na dekompilowaniu niewłaściwego apk, zastanawiając się, dlaczego moje zmiany proguard nie mają żadnego wpływu. Mam nadzieję, że to komuś pomoże!


0

Oto niektóre z najczęściej używanych reguł Proguard, które należy dodać w pliku proguard-rules.pro w systemie Android Sutdio.

Nóż do masła

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

Modernizacja

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

Maskowanie kodu

-keepclassmembers class com.yourname.models** { <fields>; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.