Android 混淆其实很简单

本文介绍了Android混淆的原理和作用,包括Proguard的Shrinking、Optimization和Obfuscation功能。Android混淆通过在build.gradle中设置minifyEnabled true并配置proguard-rules.pro文件来实现。混淆规则涉及类名、方法和成员变量的保护,同时强调了jni方法、反射类、Android组件、自定义View、服务端交互实体和Parceable子类等特殊情况的处理。通用混淆规则的设置对于保护代码安全和避免混淆错误至关重要。
摘要由CSDN通过智能技术生成
简介

在 Android 打出正式的 APK 安装包时,通常为了增加别人反编译后阅读源代码的难度,需要做一些混淆工作。在 Android Studio 中配合 Gradle 很容易完成这个操作。

Proguard 作用
  • 压缩 Shrinking : 默认是开启的,移除未被使用的类和成员,并且在 优化Optimization **工作执行后还会再次执行。
  • 优化 Optimization : 默认是开启的,在字节码级别执行优化,让应用运行的更快。
  • 混淆 Obfuscation : 默认是开启的,增大反编译的难度,除了被 keep 保持的类和类成员都会被随机命名。

它们都是可以在配置文件 proguard-rules.pro 中进行关闭的,比如:

-dontshrink       # 关闭压缩
-dontoptimize     # 关闭优化
-dontobfuscate    # 关闭混淆
Android 开启混淆

Android 开启混淆只需在 build.gradle 中配置 minifyEnabled true ,然后在 proguard-rules.pro 加入混淆规则即可。

android {
    ........
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

开启混淆后,在打出 release 版包时,会在 build/outputs/mapping/ 目录下生成 mapping.txt 文件,该文件是原始代码和混淆后的代码的一种对应转换关系,我们推导出原始代码名称。

混淆对应关系

基本规则
  • 星号 *
-keep class com.xing.weijian.*
-keep class com.xing.weijian.**

(1) 一个 * 号表示只保持该包下的类名不被混淆,而子包下的类名还是会被混淆的。

一个星号

(2) 两个 * 号表示该包和所含子包,子包包含的多级子包下的类名都保持不被混淆。

这里写图片描述

注意:上面这配置只保持了类名没有被混淆,但是其中的方法和成员变量的名称还是被混淆改变了,如果既想保持类名,又想保持方法和成员变量不被混淆,需要使用以下方式:

-keep class com.xing.weijian.* {*;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值