时间:2015-02-25 来源:

Android代码混淆之混淆规则 【编程语言】

请尊重他人的劳动成果web外包,转载请注明出处:《Android代码混淆技巧》

《Android代码混淆指南》 

推荐阅读:《Android开发之反编译与防止反编译》

ProGuard默认会对第三方库也进行混淆的,web外包而第三方库有的已经混淆过了,html前端制作有的使用了Java反射技术,div页面所以我们在进行代码混淆的时候要排除这些第三方库.排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了)中添加如下规则:

1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆.

        

3.如果使用了枚举要保证枚举不被混淆.

        ProGuard是一个免费的Java类文件收缩,承接网页前端外包优化网页html切图排版,混淆和预校验器.它可以检测并删除未使用的类,网页html切图排版字段,承接网站前端方法和属性.它可以优化字节码,html切图报价并删除未使用的指令.它可以将类、字段和方法使用短无意义的名称进行重命名.最后,承接网页制作预校验的Java6或针对Java MicroEdition的所述处理后的码.

a.混淆时保护引用的第三方jar包

  下面就和大家分享一下对使用了第三方库的项目进行混淆的经验.

2.如果使用了自定义控件那么要保证它们参与混淆.

如:-libraryjars libs/baidumapapi_v3_2_0.jar  #保护引用的第三方jar包不被混淆

b.混淆时保护第三方jar包中的类不被混淆

        因为Android是使用Java开发的web外包,所以开发者可以使用ProGuard对代码进行混淆.SDK已经集成了ProGuard工具,web外包开发者可以从SDK目录下的\tools\proguard目录中进行查看.

注意:在使用Eclipse+ADT时需要加入-libraryjars libs/...,如果你是使用Android Studio开发的项目则不需要加入libs包中的jar包,网页切图制作这是因为div+css+js切图,通过Android Studio进行混淆代码时,网页重构报价默认已经将 lib目录中的 jar 都已经添加到打包脚本中承接网站前端,所以不需要再次手动添加,承接网站前端否则会出现“ java.io.IOException: The same input jar is specified twice” 错误.

如:-keep class com.baidu.** { *; }   #让ProGuard不要警告找不到com.baidu.**这个包里面的类的相关引用

附:小编开发中用到的一些混淆规则psd切图html,大家可以根据需要复制到自己的项目中的混淆规则的文件中即可.

################common############### -keep class com.jph.android.entity.** { *; } #实体类不参与混淆 -keep class com.jph.android.view.** { *; } #自定义控件不参与混淆 ################baidu map############### -libraryjars libs/baidumapapi_v3_2_0.jar -libraryjars libs/locSDK_5.0.jar -keep class com.baidu.** { *; } -keep class vi.com.gdi.bgl.android.**{*;} -dontwarn com.baidu.** ################afinal################## #-libraryjars libs/afinal_0.5_bin.jar #-keep class net.tsz.afinal.** { *; } #-keep public class * extends net.tsz.afinal.** #-keep public interface net.tsz.afinal.** {*;} #-dontwarn net.tsz.afinal.** ################xutils################## -libraryjars libs/xUtils-2.6.14.jar -keep class com.lidroid.xutils.** { *; } -keep public class * extends com.lidroid.xutils.** -keepattributes Signature -keepattributes *Annotation* -keep public interface com.lidroid.xutils.** {*;} -dontwarn com.lidroid.xutils.** -keepclasseswithmembers class com.jph.android.entity.** { <fields>; <methods>; } ################支付宝################## -libraryjars libs/alipaysecsdk.jar -libraryjars libs/alipayutdid.jar -libraryjars libs/alipaysdk.jar -keep class com.alipay.android.app.IAliPay{*;} -keep class com.alipay.android.app.IAlixPay{*;} -keep class com.alipay.android.app.IRemoteServiceCallback{*;} -keep class com.alipay.android.app.lib.ResourceMap{*;} ################gson################## -libraryjars libs/gson-2.2.4.jar -keep class com.google.gson.** {*;} #-keep class com.google.**{*;} -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.stream.** { *; } -keep class com.google.gson.examples.android.model.** { *; } -keep class com.google.** { <fields>; <methods>; } -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -dontwarn com.google.gson.** ################httpmime/httpcore########## -libraryjars libs/httpcore-4.3.2.jar -libraryjars libs/httpmime-4.3.5.jar -keep class org.apache.http.** {*;} -dontwarn org.apache.http.** ####################jpush################## -libraryjars libs/jpush-sdk-release1.7.1.jar -keep class cn.jpush.** { *; } -keep public class com.umeng.fb.ui.ThreadView { } #双向反馈功能代码不混淆 -dontwarn cn.jpush.** -keepclassmembers class * { public <init>(org.json.JSONObject); } #不混淆R类 -keep public class com.jph.android.R$*{ public static final int *; } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } ####################umeng################## -libraryjars libs/umeng-analytics-v5.2.4.jar -keep class com.umeng.analytics.** {*;} -dontwarn com.umeng.analytics.** #-keep public class * extends com.umeng.** #-keep public class * extends com.umeng.analytics.** #-keep public class * extends com.umeng.common.** #-keep public class * extends com.umeng.newxp.** -keep class com.umeng.** { *; } -keep class com.umeng.analytics.** { *; } -keep class com.umeng.common.** { *; } -keep class com.umeng.newxp.** { *; } -keepclassmembers class * { public <init>(org.json.JSONObject); } -keep class com.umeng.** -keep public class com.idea.fifaalarmclock.app.R$*{ public static final int *; } -keep public class com.umeng.fb.ui.ThreadView { } -dontwarn com.umeng.** -dontwarn org.apache.commons.** -keep public class * extends com.umeng.** -keep class com.umeng.** {*; } ####################universal-image-loader######## -libraryjars libs/universal-image-loader-1.9.3.jar -keep class com.nostra13.universalimageloader.** {*;} -dontwarn com.nostra13.universalimageloader.** ####################zxing##################### -libraryjars libs/zxing.jar -libraryjars libs/zxing_apply.jar -keep class com.google.zxing.** {*;} -dontwarn com.google.zxing.** ####################BASE64Decoder################## -libraryjars libs/sun.misc.BASE64Decoder.jar ####################support.v4##################### -libraryjars libs/android-support-v4.jar -keep class android.support.v4.** { *; } -dontwarn android.support.v4.** ###################other#################### # slidingmenu 的混淆 -dontwarn com.jeremyfeinstein.slidingmenu.lib.** -keep class com.jeremyfeinstein.slidingmenu.lib.** { *; } # ActionBarSherlock混淆 -dontwarn com.actionbarsherlock.** -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } -keep class * extends java.lang.annotation.Annotation { *; } -keepclasseswithmembernames class * { native <methods>; } -keep class com.jph.android.entity.** { <fields>; <methods>; } -dontwarn android.support.** -dontwarn com.slidingmenu.lib.app.SlidingMapActivity -keep class android.support.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } -keep class com.slidingmenu.** { *; } -keep interface com.slidingmenu.** { *; }

-dontwarn com.baidu.**  #保持com.baidu.**这个包里面的所有类和所有方法不被混淆.

4.对第三方库中的类不进行混淆

点击次数:6512
作者:
web前端行业资讯
Web new NewsList
谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日谷歌母公司研发“闪光”网络技术无需铺设线缆 ,,2017年12月21日微软投资5千万美元利用人工智能对抗气候变化 ,,2017年12月21日谷歌中国2017:面向开发者的1年AI先行的1年 ,,2017年12月21日GreenKey加入Symphony软件基金会,将开源语音软件 ,,2017年12月21日腾讯发现者揭秘:怎么应对TensorFlow的安全风险,修复有多难 ,,2017年12月21日清华新成立两大交叉研究机构探索智能与未来 ,,2017年12月21日微软将AI融入生产力工具和搜索引擎与其它巨头竞争 ,,2017年12月21日Gfycat将利用机器学习技术创建高分辨率GIF动图 ,,2017年12月21日安全软件公司Avast开源化机器码反编译器RetDec ,,2017年12月21日谷歌开源TFGAN,让训练和评估GAN变得更加简单 ,,2017年12月21日社区对模块化不感兴趣时隔三周经典版FedoraServer27发布 ,,2017年12月21日Windows10加入OpenSSH客户端 ,,2017年12月21日FirefoxQuantum发布一个月安装量1.7亿 ,,2017年12月21日吴恩达宣布创业新项目已与富士康达成战略合作 ,,2017年12月21日Scala入门系列(十二):隐式转换2017年12月20日speedment入门教程2017年12月20日SLAM入门笔记(1):特征点的匹配2017年12月20日深入浅出了解frame和bounds2017年12月20日Jquery-截取过长字符串 【编程语言】2015年08月14日.Net开源之corefx、coreclr初探(二) 【编程语言】2015年02月15日用WPS文字中表格工具实现稿纸功能2014年01月28日EventBus框架原理解析(结合源码)(下) 【编程语言】2015年08月15日SpringDataRedis1.0.0.RC1发布 ,,2016年06月29日openwrtU盘热插拔自动挂载【研发管理】2015年06月18日leetcode211:AddandSearchWord-Datastructuredesign【编程语言】2015年05月20日Pythondatastructure 【编程语言】2014年12月29日D-DoingHomeworkHDU1074(动态规划+状态压缩)【编程语言】2015年04月24日初识Dubbo系列之5-Dubbo成熟度 【编程语言】2015年04月02日ZOJ3623BattleShips(完全背包)【编程语言】2015年04月09日snmpagent表格实现(子代理方式实现)【编程语言】2015年06月30日辛星浅析Linux中的at 【移动开发】2015年04月07日08-SQLite之in、between、alias【移动开发】2015年04月17日找到链表的第K个数【移动开发】2015年01月24日RT-Thread内核之线程调度(五) 【移动开发】2015年07月14日UVa400模拟vector 【编程语言】2015年04月03日java设计模式(10):代理模式(Proxy) 【编程语言】2014年11月18日不借助vue-cli,自行构建一个vue项目2017年11月01日关于ROS学习的一些反思 【综合】2015年09月07日【.NET】NuGet发布类库包,轻松管理dll文件【Web前端】2014年12月11日JavaStringAPI详解-不知道的就不懂Java 【Web前端】2014年12月09日华为面试题:识别有效的ip地址和子网掩码并分类C语言源码 【Web前端】2015年03月09日仙剑---相爱 【编程语言】2015年07月06日环信iOSDemo试用小记 【编程语言】2015年09月13日IT程序员及相关领域的好书推荐【编程语言】2015年07月27日AndroidCodeReview些许总结 【编程语言】2014年11月13日android源码百度网盘分享【研发管理】2015年06月05日linux同步ntpd服务器时间方式 【移动开发】2015年05月05日一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter 【移动开发】2015年05月25日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)