Android代码混淆
来源:互联网 发布:linux 将多个文件压缩 编辑:程序博客网 时间:2024/05/16 10:55
Android代码混淆
一、 代码混淆原理
Java代码编译成二进制class文件,这个class文件也可以被反编译成源代码。出了注释以外,原本的code基本都可以看到。
为了防止重要的code被泄露,我们就需要对代码进行混淆,也就是把方法、字段、包和类这些java元素的名称改成无意义的名称,这样代码的主体结构没有变化,还可以运行,但是要阅读理解代码的架构却很难。proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的,同时他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。
缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。
1. 我们用到反射的地方(一些注解框架也会用到反射)。
2. 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂,比如在WebView中需要用到与js交互的接口时,被js调用的函数名不能被混淆。
3. 是我们的java 元素名称是在配置文件中配置好的。所以使用proguard时,我们需要有个配置文件告诉proguard 哪些java 元素是不能混淆的。
二、 在AndroidStudio中配置混淆
在项目的build.gradle配置文件中加入如下代码即可:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'
}
}
这里有两个需要注意的问题:
一是上面使用的build.gradle是app目录中的那个。在生成项目的时候其实已经有默认的代码的,只需稍加修改即可。
二是由于gradle的版本不同,上面的代码可能有些改动:在gradle2.2之前的版本,使用的是runProguard true,而在gradle2.2之后的版本则使用的是minifyEnabled true。而查看项目使用的gradle的版本方法:File——>Setting,搜索中输入gradle,再Gradle Home中说明。
代码中的'proguard-android.txt'文件对应SDK下/tools/proguard/proguard-android.txt,这个文件是一些项目混淆需要的基本配置,这个一般不需要去管它,而'proguard-project.txt'就是用户自己配置的混淆打包规则,这个文件放在项目目录下(也就是与项目build.gradle同级目录)。
三、 配置混淆文件
如果想要不混淆第三方jar包可以使用语句 –keep com.*.** {*;}保留类及其成员。
以下是ProGuard的一些常用参数及其作用:
保留选项
-keep { modifier }{class_specification} 保护指定的类文件和类的成员
-keepclassmembers{modifier}{class_specification} 保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers{class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类成员存在。
-keepnames{class_specification} 保护指定的类和类的成员的名称(如果他们不会在压缩步骤中被删除)
-keepclassmembernames{class_specification} 保护指定的类的成员的名称(如果他们不会在压缩步骤中被删除)
-keepclasseswithmembernames{class_specification} 保护指定的类和类的成员的名称,如果所有指定的类成员存在(在压缩步骤之后)
-printseeds{filename} 列出类和类的成员-keep选项的清单,标准输出到给定的文件
压缩
-dontshrink 不删除无效代码。
- Android 代码混淆,混淆打包
- Android 代码混淆 webview混淆
- [Android]混淆Android代码
- [Android]混淆Android代码
- Android代码混淆------apk文件代码混淆
- android 代码混淆proguard
- Android项目代码混淆
- android 代码混淆总结
- android 代码混淆
- android代码混淆
- 混淆Android代码
- Android代码混淆 反编译
- android 代码混淆
- Android 代码混淆
- android 代码混淆
- Android代码混淆技术
- android 代码混淆
- Android代码混淆
- CVPR 2013 papers
- 将Maven项目发布到Nexus私服
- flash ActionScript快速入门(全部章节)
- httpd-YUM安装配置
- Mybatis返回Map的一种实现
- Android代码混淆
- pycharm4.5.1 注册码 破解
- CVPR 2012 papers
- 黑马程序员_C语言基础_循环结构使用区别,9*9口诀表
- UVA - 1368 - DNA Consensus String (字符串处理)
- 开发规范
- Android面试题Activity部分
- ==和equals的区别
- CVPR 2011 papers