大家好,又见面了,我是你们的朋友全栈君。
Android代码混淆常见配置
1.manifest中注册的都不能混淆,如果混淆了就找不到了,所以一下类不能被混淆,一般保持原样。
-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
keep就是 告诉proguard不用混淆这个类
2.第三方包不能混淆
找到应用中引入的包
查看包的包名;
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { }
-libraryjars指明lib包的在工程中的路径,而
-dontwarn android.support.v4.** 不要警告找不到android.support.v4.** { }这个包里面的类的相关引用,防止可接受警告的出现影响到程序的运行。
-keep class android.support.v4.** { *; }保持第三方库中的类不混淆
4.引入.so库,不然混淆后就无法找到
-libraryjars libs/armeabi/libcapscreen.so -libraryjars libs/armeabi/libencrypt.so -libraryjars libs/armeabi/libfile.so
5.实体类、反射R文件不能混淆
#过滤R文件的混淆: -keep class **.R$* { *;
}
4.JNI不能混淆
其他不能被混淆的类有:
# 保持 native 方法不被混淆
–keepclasseswithmembernames class * {
native;
}
# 保持自定义控件类不被混淆
–keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
}
# 保持自定义控件类不被混淆
–keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet, int); }
# 保持自定义控件类不被混淆
–keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# 保持枚举 enum 类不被混淆
–keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# 保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
6.当混淆运行结束后会产生以下文件:
dump.txt:
描述.apk文件中所有类文件的内部结构
mapping.txt:
列出原始类的方法、字段与混淆后的代码间的映射,这个文件比较重要,如果你的代码混淆后会产生bug的话,log提示中是混淆后的代码,希望定位到源代码的话就可以根据mapping.txt反推。
sends.txt:
列出了未被混淆的类和成员
usage.txt
列出了在apk中删除的代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139353.html原文链接:https://javaforall.cn