android混淆之从异常堆栈中还原ProGuard混淆过的代码
2016-08-18 15:59
525 查看
一 代码混淆的意义
代码混淆的一个主要的目的是为了能够保证代码的安全性:我们的代码发布出去以后,有的用户可能会使用某些反编译工具查看我们的代码,为了避免这样的行为,故有代码混淆。代码混淆以后,原有代码的包名,类名和方法名会被修改。
二、mapping文件位置
此路径为: app\build\outputs\mapping{}发布渠道}\release\mapping.txt如果不存在就在gradle中配置:
release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }
在proguard-rules.pro中配置:
-printseeds seeds.txt -printmapping mapping.txt -printusage unused.txt
文件说明:
dump.txt : 描述.apk文件中所有类文件间的内部结构 mapping.txt :列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。 seeds.txt :列出了未被混淆的类和成员 usage.txt : 列出了从.apk中删除的代码
三、实例操作
混淆后:java.lang.ArithmeticException: divide by zero at com.example.zzx.myapplication.d.a(Unknown Source) at com.example.zzx.myapplication.a.onClick(Unknown Source) at android.view.View.performClick(View.java:4760) at android.view.View$PerformClick.run(View.java:19762) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5336) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
mapping后:
java.lang.ArithmeticException: divide by zero at com.example.zzx.myapplication.Test.toTest()(Unknown Source) at com.example.zzx.myapplication.MainActivity.onClick(Unknown Source) at android.view.View.performClick(View.java:4760) at android.view.View$PerformClick.run(View.java:19762) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5336) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
四、如何实现
你可以在GUI或者命令行中进行操作。在GUI下操作 :
1) 打开< Android -sdk>/tools/proguard/bin/proguardgui.sh
2) 选择左边的 “ReTrace”操作.
3) 添加你的mapping文件和错误.
4) 点击“ReTrace!”
在命令行下操作
1) 将mapping.txt 和错误日志(txt保存一下)拷贝到你的这个目录下:
/tools/proguard/bin.
2) 在mac下,进入到对应目录,运行命令(确保你的错误文件名字是对的):
retrace.sh -verbose mapping.txt stacktrace.txt > out.txt
3) out.txt 就是解混淆之后的错误日志了.
现在加上源码,就比较容易定位问题了。
相关文章推荐
- 从异常堆栈中还原 ProGuard 混淆过的代码
- 从异常堆栈中还原 ProGuard 混淆过的代码
- 从异常堆栈中还原 ProGuard 混淆过的代码
- 从异常堆栈中还原 ProGuard 混淆过的代码
- JAVA之代码混淆proguard基础(三)从异常堆栈中还原 ProGuard 混淆过的代码
- JAVA之代码混淆proguard基础(三)从异常堆栈中还原 ProGuard 混淆过的代码 转载 2015年10月26日 09:47:18 2836 混淆成功后,除生成了指定类型的混淆包外,还会在工
- 从异常堆栈中还原 ProGuard 混淆过的代码
- Android:如何从堆栈中还原ProGuard混淆后的代码
- Android 代码混淆异常 transformClassesAndResourcesWithProguardForRelease FAILED
- Android混淆代码错误堆栈还原
- android 使用proguard 代码混淆后,出现异常 Missing type parameter.
- android 使用proguard 代码混淆后,出现异常 Missing type parameter.
- Android 2.3 代码混淆proguard技术介绍
- Android 2.3 代码混淆proguard技术介绍
- Android 使用JNI的项目通过Proguard混淆后程序异常的问题
- 关于Android使用proguard进行代码混淆
- android 混淆代码后出现的问题 异常 错误
- 使用ProGuard使你android代码保持混淆
- 在android中使用proguard混淆代码出现“Conversion to Dalvik format failed with error 1”错误的解决方法
- Android 2.3(同样适用于之前的版本) 代码混淆proguard技术介绍