为什么android studio不能推断我们需要哪些类,所以可以使用shrink删除其他类?
为什么我们需要手动编写应该保留哪些类?
答案 0 :(得分:2)
ProGuard是一种通用的Java开发工具。它对于可能从Android清单,布局资源,菜单资源,首选项XML等引用的类一无所知。
更一般地说,ProGuard无法可靠地确定通过反射加载哪些类,这就是上述所有类的实现方式。对于这些课程,您需要教ProGuard保留它们。
答案 1 :(得分:1)
"更新项目"来自/ ANDROID_SDK / tools / android的命令将生成一个带有应该保留的公共类的proguard。
默认设置足以满足大多数应用程序的需求。 您应该在WebViews上添加用作JavaScript侦听器的Innerclasses。 你发现你需要名字(反思或其他)的案例
默认的proguard.cfg如下所示:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-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 * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}