Android代码混淆后查看日志

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

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

怎么解决这个问题呢

通过mapping文件

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

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

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

Android代码混淆后查看日志_第1张图片

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

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

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

来保留文件名跟行号

Android代码混淆后查看日志_第2张图片

接下来就是解决方案

方案1
比如说我们把错误日志上传到了bugly或者firebase这种第三方平台。
我们可以通过上传mapping文件,比如bugly中,
Android代码混淆后查看日志_第3张图片
如果是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 true
            proguardFiles 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目录

Android代码混淆后查看日志_第4张图片

使用proguard.bat

Android代码混淆后查看日志_第5张图片

你可能感兴趣的:(android开发,android,android)