android的Proguard混淆

来源:互联网 发布:小米5怎么设置4g网络 编辑:程序博客网 时间:2024/04/28 11:38

这几天在混淆代码过程中遇到好几个坑,所幸堵了《app研发录》这本书,帮了我的大忙。

现记录先后遇到的几个坑:

1. butterknife,在混淆时注意是6.0还是7.0,混淆方式不一样;

2. 实体bean不要混淆,这会影响到JSON的使用;

3. 内部类尽量独立出来,无法独立单独的class,要标记不要混淆;

4. 友盟sdk,打包时一直提醒几千个警告,目前不知怎么解决


其他方面,下面这篇博客也有很大帮助:

Android Proguard原理


第三方库的混淆可以参考:

各框架库混淆


另外,记录下我的proguard内容,很多部分是拜《App研发录》的帮助,有兴趣的可以看看这本书(非广告):

#---------------------------------------------基本设置------------------------------------------------optimizationpasses 5   #代码混淆压缩比,0-7之间,默认5-dontusemixedcaseclassnames   #混淆时不使用大小写混合,混淆后类名小写-dontskipnonpubliclibraryclasses   #指定不去忽略非公共的类-dontskipnonpubliclibraryclassmembers   #指定不去忽略非公共的类的成员-dontpreverify   #不做预校验,android一般不用,加快速度-verbose   #生成映射文件-printmapping proguardMapping.txt   #映射文件名称-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*   #混淆算法,一般不变-keepattributes *Annotation*   #Annotation不混淆,对于JSON实体映射重要,例如FastJson/Gson-keepattributes Signature   #避免混淆泛型,对于JSON实体映射重要-keepattributes SourceFile,LineNumberTable   #抛出异常时保留代码行号#保留所有本地native方法-keepclasseswithmembernames class * {    native <methods>;}#保留继承自Activity、Application类的子类,可能被外部调用-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 * extends android.view.View-keep public class com.android.vending.licensing.ILicensingService#-------------------------------------------v4/v7/Fragment-------------------------------------------dontwarn android.support.v7.**-keep class android.support.v7.**{*;}-keep interface android.support.v7.app.**{*;}-keep public class * extends android.support.v7.**-keep public class * extends android.app.Fragment#保留Activity中方法参数是view的方法,使onClick不受影响-keepclassmembers class * extends android.app.Activity {    public void *(android.view.View);}#枚举类不被混淆-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}#自定义控件(继承自View)不被混淆-keep public class * extends android.view.View{    *** get*();    void set*(***);    public <init>(android.content.Context);    public <init>(android.content.Context, android.util.AttributeSet);    public <init>(android.content.Context, android.util.AttributeSet, int);}#Parcelable序列化类不混淆-keep class * implements android.os.Parcelable {    public static final android.os.Parcelable$Creator *;}#Serializable序列化类不混淆-keepclassmembers class * implements java.io.Serializable {    static final long serialVersionUID;    private static final java.io.ObjextStreamField[] serialPersistentFields;    private void writeObject(java.io.ObjectOutputStream);    private void readObject(java.io.ObjectInputStream);    java.lang.Object writeReplace();    java.lang.Object readResolve();}#R类及资源不混淆-keep class **.R$*{    *;}#带有回调函数onXXXEvent的不混淆-keepclassmembers class * {    void *(**On*Event);}#保留实体类和成员不被混淆-keep public class com.qtest.journal.bean.**{#    public void set*(***);#    public *** get*();#    public *** is*();    *;}#WebView处理-keepclassmembers class * extends android.webkit.webViewClient {    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);    public boolean *(android.webkit.WebView, java.lang.String);}-keepclassmembers class * extends android.webkit.webViewClient {    public void *(android.webkit.webView, java.lang.String);}#内嵌类#Javascript处理#反射处理#release包去除敏感verbose/debug的log日志信息-dontobfuscate   #prevent from changing class name and method name etc...-assumenosideeffects class android.util.Log{    public static int d(...);    public static int v(...);}#第三方jar:#----------------------------------------------Gson混淆----------------------------------------------keep class sun.misc.Unsafe { *; }#-------------------------------------------butterknife----------------------------------------------keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewInjector { *; }   #butterknife6.0#-keep class **$$ViewBinder { *; }   #butterknife7.0-keepclasseswithmembernames class * {    @butterknife.* <fields>;}-keepclasseswithmembernames class * {    @butterknife.* <methods>;}#---------------------------------------------Volley-------------------------------------------------keep class com.android.volley.** {*;}-keep class com.android.volley.toolbox.** {*;}-keep class com.android.volley.Response$* { *; }-keep class com.android.volley.Request$* { *; }-keep class com.android.volley.RequestQueue$* { *; }-keep class com.android.volley.toolbox.HurlStack$* { *; }-keep class com.android.volley.toolbox.ImageLoader$* { *; }#---------------------------------------------友盟sdk-----------------------------------------------# -dontshrink# -dontoptimize -dontwarn com.google.android.maps.** -dontwarn android.webkit.WebView -dontwarn com.umeng.** -dontwarn com.tencent.weibo.sdk.** -dontwarn com.facebook.** -keep public class javax.** -keep public class android.webkit.** -dontwarn android.support.v4.** -keep enum com.facebook.** -keepattributes Exceptions,InnerClasses,Signature -keepattributes *Annotation* -keepattributes SourceFile,LineNumberTable -keep public interface com.facebook.** -keep public interface com.tencent.** -keep public interface com.umeng.socialize.** -keep public interface com.umeng.socialize.sensor.** -keep public interface com.umeng.scrshot.** -keep public class com.umeng.socialize.* {*;} -keep class com.facebook.** -keep class com.facebook.** { *; } -keep class com.umeng.scrshot.** -keep public class com.tencent.** {*;} -keep class com.umeng.socialize.sensor.** -keep class com.umeng.socialize.handler.** -keep class com.umeng.socialize.handler.* -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;} -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;} -keep class im.yixin.sdk.api.YXMessage {*;} -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;} -dontwarn twitter4j.** -keep class twitter4j.** { *; } -keep class com.tencent.** {*;} -dontwarn com.tencent.** -keep public class com.umeng.soexample.R$*{     public static final int *; } -keep public class com.umeng.soexample.R$*{     public static final int *; } -keep class com.tencent.open.TDialog$* -keep class com.tencent.open.TDialog$* {*;} -keep class com.tencent.open.PKDialog -keep class com.tencent.open.PKDialog {*;} -keep class com.tencent.open.PKDialog$* -keep class com.tencent.open.PKDialog$* {*;} -keep class com.sina.** {*;} -dontwarn com.sina.** -keep class  com.alipay.share.sdk.** {    *; } -keepnames class * implements android.os.Parcelable {     public static final ** CREATOR; } -keep class com.linkedin.** { *; } -keepattributes Signature -dontwarn com.linkedin.platform.internals.**


0 0
原创粉丝点击