前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 安全】DEX 加密 ( Proguard 简介 | Proguard 相关网址 | Proguard 混淆配置 )

【Android 安全】DEX 加密 ( Proguard 简介 | Proguard 相关网址 | Proguard 混淆配置 )

作者头像
韩曙亮
发布2023-03-28 18:51:14
6810
发布2023-03-28 18:51:14
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、Proguard 简介


Android 开发中 Proguard 主要作用是对 Java 代码进行如下操作 :

  • 压缩 Shrink : 检测并 删除 没有使用的类 , 字段 , 方法 , 属性 ;
  • 优化 Optimize : 优化字节码 , 移除无用指令 ;
  • 混淆 Obfuscate : 使用 a , b , c 无意义名称 , 对开发者定义的 类 , 字段 , 方法 进行 重命名 , 增加阅读难度 ;
  • 预检 Preveirfy : Java 平台对 处理后的代码 进行预检 ;

最常用的是混淆操作 ;

上述执行顺序 : 压缩 Shrink -> 优化 Optimize -> 混淆 Obfuscate -> 预检 Preveirfy ;

二、Proguard 相关网址


Proguard 官网 : https://www.guardsquare.com/en/products/proguard

Proguard 官方指导手册 : https://www.guardsquare.com/en/products/proguard/manual

Proguard 用法 : https://www.guardsquare.com/en/products/proguard/manual/usage

Proguard 混淆相关文档 : https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions

在这里插入图片描述
在这里插入图片描述

三、Proguard 混淆配置


Proguard 混淆相关文档 : https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions

Proguard 混淆配置 :

-keep 指定 类 , 类成员 , 不被混淆 ; ( 类成员指的是类的成员方法 和 成员属性 )

-keepclassmembers 指定 类成员 不被混淆 , 类 和 类 方法 可以混淆 ;

-keepclasseswithmembers 指定 类 和 类成员 , 不被混淆 , 前提是 指定的类成员存在 ;

开启 Proguard : 在 Module 下的 build.gradle 中进行如下配置 , 其中 release 标签是进行发布版本的混淆设置 , debug 标签是测试版本的混淆设置 ;

代码语言:javascript
复制
android {
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            // 打印 proguard-android-optimize.txt 路径
            print("proguardPath = ${getDefaultProguardFile('proguard-android-optimize.txt')}")
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

上述 proguard-rules.pro 是开发者自己手动配置的 ,

上述 proguard-android-optimize.txt 混淆配置文件是系统自动生成的 ,

该 proguard-android-optimize.txt 文件生成的依据是根据开发者的 proguard-rules.pro 混淆配置生成的 ;

编译时打印变量 : 上述使用了 print(“proguardPath = ${getDefaultProguardFile(‘proguard-android-optimize.txt’)}”) 语句 , 打印了混淆脚本 proguard-android-optimize.txt 的路径 , 其打印结果如下 , 该混淆脚本在 应用的 \build\intermediates\proguard-files\ 目录下 ;

代码语言:javascript
复制
proguardPath = Y:\002_WorkSpace\001_AS\Handler\app\build\intermediates\proguard-files\proguard-android-optimize.txt-3.6.1
在这里插入图片描述
在这里插入图片描述

生成混淆配置脚本 proguard-android-optimize.txt : 如果没有上述脚本 , 即删除了 build 目录 , 进入 Gradle 界面 , 执行 app -> Tasks -> other -> extractProguardFiles 任务 , 即可重新生成混淆配置脚本 ;

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Proguard 简介
  • 二、Proguard 相关网址
  • 三、Proguard 混淆配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档