Android中可以通过混淆减少apk的大小,提高apk反编译的难度。

但是在混淆过后会遇到一个问题,就是日志,比如说错误日志的函数会变成abcd.

怎么解决这个问题呢

通过mapping文件

mapping文件是混淆后的代码跟正常代码的一个映射文件

通过这个文件可以把混淆后的代码转换成正常的代码展示

mapping文件在minifyEnabled 为false的时候,是不会产生的。当我们设置了minifyEnabled 为true,也就是开启混淆之后,默认是会在app下的build/outpus/mapping文件夹中产生一个mapping.txt文件

也可以通过在app下的proguard-rules.pro 文件中加入 -printmapping mapping.txt
就会在app下面输出一个mapping.txt文件

可以通过在混淆文件中加入

#保留源文件名称以及行号
-keepattributes SourceFile,LineNumberTable
#保留自定义异常
-keep public class * extends java.lang.Exception

来保留文件名跟行号

接下来就是解决方案

方案1
比如说我们把错误日志上传到了bugly或者firebase这种第三方平台。
我们可以通过上传mapping文件,比如bugly中,

如果是firebase,在开启混淆后,会报一个错
Execution failed for task ‘:app:uploadCrashlyticsMappingFileDebug’

Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.

这是因为firebase自动上传mapping的时候,因为国外网络原因,无法自动上传
需要设置

 debug {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.xxx//指定签名文件签名// 设置是否要自动上传firebaseCrashlytics {mappingFileUploadEnabled true}}

但是这样的话,就不能上传mapping文件了,这个可能需要解决这个网络问题了

方案二
1.cmd进入sdk/tools/proguard/bin目录

2.将混淆后的日志cache_file_name.txt和上文提到的mapping文件放入此目录中。

3.执行命令:retrace.bat mapping.txt cache_file_name.txt

通过sdk中的工具,用命令的方式输出原日志。cache_file_name.txt这个文件可以自己随意定义,只需要把错误日志复制到里面就行了

方案三

还可以通过gui图形界面的方式输出
还是进入到 sdk/tools/proguard/bin目录

使用proguard.bat

Android代码混淆后查看日志相关推荐

  1. Android代码混淆后的定位

    Android代码混淆后的定位 什么是代码混淆 如何开启Android Studio的代码混淆 如何在程序奔溃后定位到奔溃的代码行 mapping.txt 分析流程 什么是代码混淆 在java写的.j ...

  2. Android混淆后的日志查看方法(mac)

    Android混淆后的日志查看方法(mac) 注:这是本人常用方法,如下述方法有错误或更好的办法,请大佬评论指出,防止误导他人.收集日志用的友盟,混淆后的日志在友盟错误列表-错误详情-详细日志, 1. ...

  3. android 混淆后的机制,Android 代码混淆机制

    Android 代码混淆机制 由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量.函数名.数据结构等信息,根据其编译打包后的AP ...

  4. Android代码混淆工具Proguard学习

    概述 Proguard代码混淆工具:可以对代码进行去冗余压缩,代码优化,代码混淆等.在Android中的主要应用就是对代码混淆:就是将类名,方法名,Field名变成如a,b,c或者1,2,3等难以阅读 ...

  5. android代码混淆个人总结及踩坑

    android代码混淆个人总结及踩坑 前言 公司项目使用组件化开发的形式,需要对自己负责的模块进行一些混淆配置,关于混淆相信做android开发的都或多或少有过一些接触,通过对混淆文件的配置从而将代码 ...

  6. android 代码混淆

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  7. android混淆语法(android代码混淆工具)

    android 代码混淆算法有哪些 根据SDK的版本不同有2中不同的代码混淆方式,以上的proguard.cfg参数详解中所涉及到的信息是在较低版本SDK下的混淆脚本,事实上在高版本的SDK下混淆的原 ...

  8. Android代码混淆之混淆规则

    请尊重他人的劳动成果,转载请注明出处:<Android代码混淆技巧> 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆.SDK已经集成了ProGua ...

  9. Android 代码混淆Proguard

    混淆概念 Android代码混淆,又称Android混淆,是伴随着Android系统的流行而产生的一种APP保护技术,用于保护APP不被破解和逆向分析. 在Android的具体表现就是打包时,将项目里 ...

最新文章

  1. centos 静态ip_CentOS 6 静态 IP 配置
  2. 【阿里云课程】1小时快速掌握Tensorflow核心功能,完成完整的项目实践
  3. php篮球比赛,篮球数据API接口 - 【篮球比赛动画直播变化数据】API调用示例代码...
  4. 桶排序(BucketSort)(java)
  5. python中递归函数基例_智慧树python答案
  6. solr 时间转成java_solr时区设置解决时间多8小时问题
  7. Arm学习总结之 32位和64位寄存器
  8. 判断字符串和数组是否为空
  9. Spring中利用java注解声明切面
  10. python移动文件
  11. TCP 和 UDP 有什么区别?
  12. dm9000网卡 S3C2440
  13. 传感器与检测技术考试
  14. 11月合资SUV销量:日系车统治榜单 大众产品攻势“拳意渐乱”
  15. mysql主主报错_MySQL 主主报错: Fatal error: The slave I/O thread stops because master and slave have...
  16. 江苏电信用户将体验iPhone6s的极速4G+网络
  17. [语录]足球解说员贺炜语录
  18. 触发拍照4G低功耗摄像机数据监控方案
  19. c语言写rpg游戏,第1章 序(来,我们一起写个角色扮演游戏)
  20. 发现新鲜的画法,文艺极简水彩线描简笔画植物:草叶集(一)

热门文章

  1. CODING 敏捷实战系列课第二讲:Scrum 敏捷项目管理核心要素之 3355
  2. python3封装pymysql,方便快速调用
  3. 解决 Android studio 出现“The emulator process for AVD xxx has terminated.”的错误
  4. 运动装备怎么选?五款好用的运动装备推荐
  5. SonarQube安装配置202202
  6. office常用技能总结--Excel函数之DCOUNT
  7. 《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第六章课后习题参考答案
  8. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术
  9. python 个位,十位,百位 求解
  10. 基于WPF的Metro风格的MehApp库介绍