一、AndroidSDK自带proguard混淆

一、AndroidSDK自带proguard混淆
在Android SDK中自带有proguard代码混淆器,但在默认的情况下该混淆器是没有打开的。该混淆器在SDK中的路径是android-sdk-windows\tools\proguard


启动Android-sdk-windows\tools\proguard\lib\proguardgui.jar可以使用独立UI的proguard。 




ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.  


ProGuard的使用是为了:  


1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 


2.创建的程序和程序库很难使用反向工程. 


3.所以它能删除来自源文件中的没有调用的代码 


4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件. 


Eclipse中使用proguard的方法如下:


1.启动代码混淆功能


新建Android项目工程里面默认是带有proguard.cfg的代码混淆配置文件,如果没有请从其它项目中copy一个过来。代码混淆功能默认是没有启动这个配置的,需要手动地在项目根目录default.properties文件里面添加指定这个配置文件如下: 


# Project target.   
target=Android-7   
# set proguard.config   
proguardproguard.config=proguard.cfg  
2.打包发布APK 


由于在 Debug下,不可能会有人会混淆代码,因此这只在release中有效。使用签名和无签名的方式都可以发布APK包。


这时候生成的apk,我发现是比debug版本(\bin目录下面)的要小。


 
二、反编译方法


反编译APK包步骤如下:


1.使用 dex2jar 把apk中的dex转为jar,解压apk得到classed.dex,执行下面的命令:


D:\dex2jar-0.0.7.7-SNAPSHOT>dex2jar.bat classes.dex


生成classes.dex.dex2jar.jar 


2.用 jd-gui 进行反编译查看classes.dex.dex2jar.jar包,如下图。


 






本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-11/47122.htm
<think>好的,用户想了解如何在Android中使用ProGuard进行解混淆,特别是教程和映射文件的使用。首先,我需要回顾ProGuard的基本作用。ProGuard主要用于代码压缩、优化混淆,通过混淆类名、方法名来增加反编译的难度,保护代码安全[^1]。但混淆后的代码在出现错误时,日志中的类名和方法名都是混淆过的,难以理解,这就需要解混淆来处理。 接下来,用户可能需要知道解混淆的具体步骤。首先,生成映射文件是关键,因为ProGuard每次构建都会生成mapping.txt,记录了混淆前后的对应关系[^2]。这个文件通常位于build/outputs/mapping/目录下,需要妥善保存,否则无法恢复堆栈跟踪。 然后是使用retrace工具,Android SDK自带的retrace脚本(retrace.bat或retrace.sh)可以将混淆后的堆栈跟踪转换为可读的形式。用户需要将映射文件和崩溃日志起提供给retrace工具。例如,使用命令`retrace.bat -verbose mapping.txt obfuscated_trace.txt`可以还原日志[^3]。 另外,用户可能还关心如何配置ProGuard以确保生成映射文件。在build.gradle文件中,需要启用混淆并指定配置,比如设置minifyEnabled为true,以及配置proguardFiles。同时,可能需要排除某些不需要混淆的类或方法,避免出现问题。比如使用-keep规则来保留特定的类或方法。 还可能遇到多模块的情况,这时候每个模块可能有自己的混淆配置,需要合并处理。引用中提到,可以添加-printconfiguration来输出完整的规则报告,帮助调试配置问题。用户可能需要检查各个模块的proguard-rules.pro文件,确保配置正确。 另外,用户可能想知道如何自动保存映射文件,避免丢失。可以在proguard-rules.pro中添加-printmapping指定路径,每次构建自动保存,方便后续使用。同时,使用版本控制系统或CI工具来管理这些文件,确保每个版本都有对应的映射文件。 最后,常见问题比如映射文件不匹配导致解混淆失败,需要确保使用与构建版本完全相同的映射文件。另外,第三方库的混淆可能需要特别处理,避免混淆后调用出错。这些都是用户在实际操作中可能会遇到的难点,需要提前说明。 总结步骤:生成映射文件→使用retrace工具还原日志→配置ProGuard确保生成映射→处理多模块和第三方库的混淆问题。同时,提供示例命令和配置代码,帮助用户更直观地操作。</think>在Android中使用ProGuard进行解混淆主要依赖**映射文件(mapping.txt)**和工具链的支持。以下是具体步骤: --- ### 、生成ProGuard映射文件 1. **启用ProGuard混淆** 在模块的`build.gradle`中配置: ```groovy android { buildTypes { release { minifyEnabled true // 启用代码压缩和混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } ``` 每次构建后,映射文件会生成在`build/outputs/mapping/release/mapping.txt`。 2. **保存映射文件** 建议将`mapping.txt`与构建版本绑定保存(如上传到版本控制系统),避免后续无法解混淆。 --- ### 二、使用映射文件解混淆堆栈跟踪 1. **获取崩溃日志** 从用户设备或日志平台获取混淆后的错误堆栈,例如: ``` java.lang.NullPointerException: at a.a.a(Unknown Source:12) ``` 2. **使用Retrace工具** Android SDK自带`retrace`脚本(位于`/tools/proguard/bin/`): ```bash retrace.bat -verbose mapping.txt obfuscated_trace.txt > deobfuscated_trace.txt ``` 输出结果会将`a.a.a`还原为原始类名和方法名。 --- ### 三、高级配置与注意事项 1. **自定义映射文件路径** 在`proguard-rules.pro`中添加: ```proguard -printmapping mapping.txt # 指定映射文件输出路径 ``` 2. **保留关键信息(防混淆)** 若需保留特定类或方法不被混淆(如反射调用的类): ```proguard -keep public class com.example.MyClass { *; } ``` 3. **多模块混淆处理** 如果项目包含多个模块,需合并各模块的`mapping.txt`文件,或使用`-applymapping`指定主模块映射。 --- ### 四、常见问题 1. **映射文件不匹配** 确保使用的`mapping.txt`与崩溃日志对应的APK版本致,否则解混淆会失败。 2. **第三方库混淆问题** 在`proguard-rules.pro`中添加库的保留规则,例如: ```proguard -keep class com.google.gson.** { *; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值