Как отключить все функции Android ProGuard, кроме обфускации?

Google предполагает, что разработчики могут захотеть запутать байтовый код:

http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html

Я следовал инструкциям Google, чтобы получить запутанное Android-приложение, которое, на первый взгляд, работало. Но были введены некоторые странные ошибки, которых нет в незапутанном приложении. Я продолжал отключать параметры ProGuard, чтобы получить эту конфигурацию:

-dontoptimize -dontshink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose

Все равно баги есть. Есть ли что-нибудь еще, что я могу отключить, чтобы получить только чистое запутывание? Обфускация была бы хороша, но я готов отключить другие функции ProGuard.


person Androider    schedule 01.10.2010    source источник
comment
Привет! Вы нашли решение по своему вопросу? Я тоже столкнулся с такой же проблемой. stackoverflow.com/questions/47716524 /   -  person yozhik    schedule 08.12.2017


Ответы (1)


Это то, что я использую:

-libraryjars ${android.jar}
-injars      temp.jar
-outjars    proguard.jar

#-printseeds: Prints the un-obfuscated filenames
-printseeds
-printmapping mapping-used-to-retrace-exceptions.txt
-verbose

#-dontusemixedcaseclassnames: Necessary when building on windows where x.class and X.class is the same file
-dontusemixedcaseclassnames

#-repackageclasses: Adds further obfuscation, Counter-indication: classes that look for resource files in their package directories will no longer work properly if they are moved elsewhere. When in doubt, just leave the packaging untouched by not using this option.
-repackageclasses ''

#-dontskipnonpubliclibraryclasses: Counter-indication: you probably shouldn't use this option when processing code that is to be used as a library, since classes and class members that weren't designed to be public in the API may become public.
-dontskipnonpubliclibraryclasses

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep 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*(...); 
}
-keep class * extends android.preference.Preference { 
  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*(...); 
}    
# LVL License binder class
-keep class com.android.vending.licensing.ILicensingService    
# This is necessary for LVL among others. According to proguard doc java accesses enum fields by introspection.
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#Optimization settings
-dontoptimize

Он запутывает, но сохраняет общедоступными общедоступные методы и имена классов, необходимых для Android. Как вы просили, он не оптимизируется - оптимизации с большей вероятностью сломают вашу программу из-за удаленных методов и конструкторов.

Если вы хотите попробовать включить оптимизацию, вот что я делаю (не забудьте удалить опцию -dontoptimize выше)

#Optimization settings    
# Keep (ie. don't remove) all public constructors of all public classes, but still obfuscate+optimize their content. This is necessary because optimization removes constructors which I use through reflection.
-keepclassmembers class * {
    <init>(...);
}

-optimizationpasses 7
-allowaccessmodification
# The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. 
-optimizations !code/simplification/arithmetic 

Я использую proguard 4.5, но другие версии, вероятно, работают так же хорошо.

person arberg    schedule 03.11.2010