Szhangbiao's blog

记录一些让自己可以回忆的东西

0%

记一次 Android 代码混淆的全过程

这个文档的目的主要是为了记录为两个 Application 的 module 添加混淆支持的过程,同时也会添加混淆支持后遇到的 Crash 和解决方案,以便后续接手人员查缺补漏。

添加配置步骤

  • 基础参数设置
  • 通用混淆规则
  • Kotlin 混淆*
  • 第三方库或 SDK 混淆规则

这里的通用混淆规则网上一大堆,主要就是考虑以下几点

  • 系统组件等一些固定方法会被系统调用的
  • 反射和 Native 对应的类和方法
  • 自定义 View 等自定义类
  • 实体类与序列化的类

注:*是可选项,kotlin 携程一般不会报错,不过如果报 Module with the Main dispatcher is missing 就要把 kotlin 给 keep 一下

第三方库或 SDK 列举

Third Library :insurance模块 :app模块 备注
androidx
Room Rules reference
Crashlytics Rules reference
Hilt - -
RxJava - Rules reference
Volley - Rules reference
Gson Rules reference
Moshi Rules reference
Glide Rules reference
Zxing - -
mmkv - -
Facebook - Facebook Core
Facebook Login
AppsFlyer Rules reference
Okhttp Okhttp
Okio
Retrofit Rules reference
Jodatime Rules reference
Timber Rules reference
Blurry - Rules reference
PdfViewer Rules reference
Gigya -

注:查看以上第三方库的 proguard 的 link,Android Studio 默认开启 R8 的话,link 中包含 META-INF 的 proguard rules 都可以不加,默认会从 sdk 下读取

Release 下打开 log 的方法

首先在 build.gradle.ktxbuildTypes 下添加 isDebuggable = true,就像下面这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
buildTypes {
getByName("debug") {
isDebuggable = true
isMinifyEnabled = false
signingConfig = signingConfigs.getByName("debug")
}
getByName("release") {
isDebuggable = true
isMinifyEnabled = true
isShrinkResources = true
signingConfig = signingConfigs.getByName("release")
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}

以在 Release 包下支持 debug 模式

其次 Android Studio 在 release 编译下 Crashlytics会要求上传 mapping.text 文件,这时可能要求你的 Android Studio 支持代理,比如我的 Android Studio 就需要在 gradle.properties里添加

1
2
systemProp.https.proxyHost = 127.0 .0 .1
systemProp.https.proxyPort = 7890

最后你的手机如果不支持 Google Services 的话就要在 SplashViewModel里你当前的 Flow 会走到 state = PLAY_SERVICE_MISSING,这是就需要把 stepForward()方法里的 PLAY_SERVICE_MISSING下的 if 条件里的 environment.isDebug给去掉,不然流程走不下去

问题及解决方法

目前已安稳上线,没有遇到是混淆产生的问题!