代码混淆

转载自http://blog.csdn.net/qq_15807167/article/details/51657972
仅作为学习使用

开启混淆:
设置两个属性为true
这里写图片描述

配置好混淆规则,对应用签名打包即可:
这里写图片描述
混淆规则文件:proguard-rules.pro

基础混淆规则:

-optimizationpasses 5         # 指定代码的压缩级别
-dontusemixedcaseclassnames   # 是否使用大小写混合
-dontpreverify           # 混淆时是否做预校验
-verbose               # 混淆时是否记录日志

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法

#不混淆需要根据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   

# 保持 native 方法不被混淆
-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);
}

# 保持枚举 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 *;
}

依赖注入的框架需要加上其避免混淆规则:
比如butterknife:
http://jakewharton.github.io/butterknife/

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

友盟第三方登录和分享:
关于qq,微信,sina的jar包的混淆规则:
http://dev.umeng.com/social/android/login-page

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
#-libraryjars libs/SocialSDK_QQZone_2.jar   # 注意,这条会报重复混淆,要注释掉
-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 public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-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{*;}
-keep public class [your_pkg].R$*{
    public static final int *;
}

报错:找不到某个jar包中的类:
解决方法:不混淆这个jar包:

# 不混淆七牛的jar包
#(声明lib文件)-libraryjars **.jar
#(不提示警告)-dontwarn com.xx.bbb.**
#(不进行混淆)-keep class com.xx.bbb.** { *;}

#-libraryjars libs/qiniu-android-sdk-7.0.9.jar -->jar包已被统一声明,所以这里不用再重复声明
-dontwarn com.qiniu.android.**
-keep class com.qiniu.android.** { *;}

至此,打包可以成功:

运行,eventbus报错:
说明eventbus的包不能混淆
解决:保留eventbus中的类,以及我们的类中的onevent方法:

#eventbus 
-dontwarn de.greenrobot.event.**
-keep class de.greenrobot.event.** { *; }
-keepclassmembers class ** {
    public void onEvent*(**);
    void onEvent*(**);
}

javabean类多层调用时空指针:
找不到内部的类:
解决:不混淆domain包下的javabean:

# 保留domain包中的类
-keep class com.qxinli.android.domain.** { *; }

其他:
不混淆volley,jpush:

# 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$* { *; }


#jpush
#-libraryjars libs/jpush-sdk-release1.6.3.jar
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }

最终:混淆成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值