2012-05-11 20 views
8

Chcę użyć Proguard do zaciemnienia kodu aplikacji. Nie potrzebuję optymalizacji i nie potrzebuję programu Proguard, aby usunąć klasy lub metody. Wszystko czego chcę, to zaciemnianie. Aplikacja korzysta z kilku projektów bibliotecznych.Android i Proguard - jak zaciemnić, ale nie zoptymalizować żadnego kodu?

Uderzyłem głową o ścianę, próbując to zrobić i nie działa tak, jak chcę. Podczas wykonywania egzaminu widzę komunikat NoSuchMethodExceptions w aplikacji, mimo że wydawało mi się, że wyłączyłem opcje zmniejszania Proguarda.

Jakie są magiczne ustawienia, aby program Proguard JUST był zaciemniany i nie optymalizował ŻADNEGO kodu?

AKTUALIZACJA. Potwierdziłem za pomocą prób i błędów, że to właśnie proces zaciemniania (a nie optymalizacja lub zmniejszanie) powoduje wyjątki NoSuchMethodExceptions.

Proguard.cfg

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 
-dontshrink 
-keep public class * extends Object 
-keep class com.myapp.** { *; } 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class com.myapp.activity.Splash 
-keep public class com.myapp.alarm.AlarmsViewer 
-keep public class com.myapp.activity.About 
-keep public class com.myapp.activity.Base 
-keep public class com.myapp.activity.BaseWithMenu 
-keep public class com.myapp.alarm.Alarm 
-keep public class com.myapp.alarm.AlarmFragment 
-keep public class com.myapp.alarm.AlarmPagerAdapter 
-keep public class com.myapp.alarm.AlarmStore 
-keep public class com.myapp.app.App 
-keep public class com.myapp.preferences.Preferences 
-keep public class com.myapp.preferences.PreferencesStore 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class com.actionbarsherlock.** { *; } 
-keep interface com.actionbarsherlock.** { *; } 

-keepattributes *Annotation* 

-keep public interface com.android.vending.licensing.ILicensingService 

-dontwarn android.support.** 
+0

Jeśli nie wiesz, jak zaciemniać bez optymalizacji, w jaki sposób można wiedzieć, że krok optymalizacji jest problemem? – for3st

Odpowiedz

6

miałem podobne problemy jakiś czas temu i rozwiązać go dla mnie przez brutalnej siły i szczęścia. Moja proguard.cfg jest podobny, ale mam linie:

-dontshrink 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

nie pamiętam skąd mam pomysł dla tych opcji optymalizacyjnych, ale wydają się działać dla mnie.

Zawsze jest haczyk wszystko przełączyć

-dontoptimize 

(Określa, nie do optymalizacji plików klas wejście domyślnie optymalizacji jest włączona;.. Wszystkie metody są optymalizowane na poziomie kodu bajtowego)

który może być bardziej odpowiednie.

Wreszcie mam metody, które są wymienione jedynie w plikach XML (kliknij teleskopowe), które musiały być wyraźnie trzymane z

-keepclassmembers class * extends android.app.Activity { 
    public void myClickHandler(android.view.View); 
} 
+4

Nie mam żadnych procedur obsługi kliknięć XML, a nawet z opcjami -dontoptimize i -dontshrink określonymi jako nadal wysuwa się z wyjątkiem NoSuchMethodException. Zaskakujący. Co za kupa nadprogramowych śmieciowego Proguarda. –

+0

Przepraszam, że to nie działa. Muszę się z tobą zgodzić - instrukcja jest bardzo trudna do naśladowania. Naprawdę powinien to być przełącznik z umaszczeniem. Niestety potrzebujemy zaciemniania, ponieważ apki są tak łatwe do rozebrania. – NickT

+1

Wow. Podręcznik ProGuard> Wprowadzenie> Punkty wejścia ... Podręcznik ProGuard> Rozwiązywanie problemów> Problemy w czasie uruchamiania> NoSuchMethodException. –

Powiązane problemy