- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
读懂android中的代码混淆
读懂Android中的代码混淆本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。希望可以帮助大家更好的学习和使用代码混淆。作者:技术小黑屋来源:知乎|2017-03-02 13:05javascript:favorBox(open);?收藏 javascript:;?分享 本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。希望可以帮助大家更好的学习和使用代码混淆。什么是混淆关于混淆维基百科上该词条的解释为代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆影响到的元素有类名变量名方法名包名其他元素混淆的目的混淆的目的是为了加大反编译的成本,但是并不能彻底防止反编译.如何开启混淆通常我们需要找到项目路径下app目录下的build.gradle文件找到minifyEnabled这个配置,然后设置为true即可.一个简单的示例如下buildTypes?{??release?{??minifyEnabled?true??proguardFiles?getDefaultProguardFile(proguard-android.txt),???proguard是什么Java官网对Proguard的定义ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or higher, or for Java Micro Edition.Proguard是一个集文件压缩,优化,混淆和校验等功能的工具它检测并删除无用的类,变量,方法和属性它优化字节码并删除无用的指令.它通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果.最后它还校验处理后的代码混淆的常见配置-keepKeep用来保留Java的元素不进行混淆. keep有很多变种,他们一般都是-keep-keepclassmembers-keepclasseswithmembers一些例子保留某个包下面的类以及子包-keep?public?class?.widget.**?保留所有类中使用otto的public方法#?Otto??-keepclassmembers?class?**?{??@com.squareup.otto.Subscribe?public?*;??@com.squareup.otto.Produce?public?*;??}??保留Contants类的BOOK_NAME属性-keepclassmembers?class?guardsample.Constants?{??public?static?java.lang.String?BOOK_NAME;??}??更多关于Proguard keep使用,可以参考官方文档-dontwarndontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,如果我们不进行处理,通常会导致build中止.因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告.比如关闭Twitter sdk的警告,我们可以这样做-dontwarn?com.twitter.sdk.**?其他混淆相关的介绍,都可以通过访问官方文档获取.哪些不应该混淆反射中使用的元素如果一些被混淆使用的元素(属性,方法,类,包名等)进行了混淆,可能会出现问题,如NoSuchFiledException或者NoSuchMethodException等.比如下面的示例源码//Constants.java??public?class?Constants?{??public?static?String?BOOK_NAME?=?book_name;??}??//MainActivity.java??Field?bookNameField?=?null;??try?{??String?fieldName?=?
文档评论(0)