Proguard
2016-01-24 00:51
337 查看
启用Proguard(使用Gradle编译)
在build.gradle文件中使用minifyEnabled属性来启用或禁用Proguard.如:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
其中的getDefaultProguardFile('proguard-android.txt')这个函数用来获取Android
SDK中tools/proguard/文件夹下的ProGuard的默认配置。另外Android Studio在模块的根目录下添加了 proguard-rules.pro文件,以便开发者为当前模块添加自定义的ProGuard规则。
配置ProGuard
有些特殊的情况不能被混淆,如:
AndroidManifest.xml文件中引用的类
JNI中调用到的方法
动态引用的方法和变量
否则会在运行时找不到这些类或方法。
可以通过在ProGuard配置文件中添加 -keep来避免被混淆,如:
-keep
public class
<MyClass>
更多的命令和选项请参考ProGuard
Manual .
解密混淆后的堆栈
ProGuard运行时会生成mapping.txt文件,显示混淆前后的类的比对。
可以使用 <sdk_root>/tools/proguard/ 文件夹下的 retrace.bat(Linux
or Mac OS X 中是 retrace.sh )来将混淆后的堆栈转换为可读的信息。使用方法如下:
retrace.bat|retrace.sh
[-verbose] mapping.txt
[<stacktrace_file>]
如:
retrace.bat
-verbose mapping.txt obfuscated_trace.txt
对已发布的应用程序的调试考虑
为防止mapping.txt文件被覆盖,需要为发布的每一个版本保存该文档以便debug时定位。如通过添加版本号来修改文件的名字。
在build.gradle文件中使用minifyEnabled属性来启用或禁用Proguard.如:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
其中的getDefaultProguardFile('proguard-android.txt')这个函数用来获取Android
SDK中tools/proguard/文件夹下的ProGuard的默认配置。另外Android Studio在模块的根目录下添加了 proguard-rules.pro文件,以便开发者为当前模块添加自定义的ProGuard规则。
配置ProGuard
有些特殊的情况不能被混淆,如:
AndroidManifest.xml文件中引用的类
JNI中调用到的方法
动态引用的方法和变量
否则会在运行时找不到这些类或方法。
可以通过在ProGuard配置文件中添加 -keep来避免被混淆,如:
-keep
public class
<MyClass>
更多的命令和选项请参考ProGuard
Manual .
解密混淆后的堆栈
ProGuard运行时会生成mapping.txt文件,显示混淆前后的类的比对。
可以使用 <sdk_root>/tools/proguard/ 文件夹下的 retrace.bat(Linux
or Mac OS X 中是 retrace.sh )来将混淆后的堆栈转换为可读的信息。使用方法如下:
retrace.bat|retrace.sh
[-verbose] mapping.txt
[<stacktrace_file>]
如:
retrace.bat
-verbose mapping.txt obfuscated_trace.txt
对已发布的应用程序的调试考虑
为防止mapping.txt文件被覆盖,需要为发布的每一个版本保存该文档以便debug时定位。如通过添加版本号来修改文件的名字。
相关文章推荐
- [NOI2005]维修数列 (Splay)
- teradata EXPLAIN 读懂关键字--读懂执行计划
- $(document).ready(function(){}),jq第一个入口分析
- CodeForce 614B Gena's Code(水题)
- 关于天气预报api返回值的处理
- 计算机网络中往返时延RTT概念学习
- 10分钟过“第一行代码”
- 一个程序猿学生寒假自我修养
- socket中的网络字节序/本地字节序互相转换函数。
- JAVA中的主方法的含义
- 乔布斯和盖茨的历史性对话(转录)
- SSAS 聚合设计提升CUBE的查询性能(转载)
- JavaScrip——简单练习(输出方式,简单表单验证)
- ActionEnter cannot be resolved to a type
- 使用新申请的163邮箱发邮件出现的问题
- Linux常用命令_文件管理
- 不支持170号段解决方法
- [转]: stm328种GPIO模式
- ActionEnter cannot be resolved to a type
- 编写脚本实现MySQL主从复制状态监控