代码混淆
来源:互联网 发布:淘宝运营视频教程下载 编辑:程序博客网 时间:2024/04/29 22:59
转载自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
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆(-)
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 代码混淆
- 混淆代码
- 代码混淆
- .NET加密方式解析--散列加密
- iOS 代码片段
- 通知----点击通知启动activity时保留导航
- cocos2dx安装和初步使用
- [noi 1789]算24
- 代码混淆
- TabLayout和ViewPager的使用
- Windows常见命令
- mysql的show processlist命令大作用
- Hibernate的HQL not like查询
- 解决 Redis on Windows Setup Wizard ended prematurely
- android蓝牙通信
- redis系列(一)redis基础
- 算24