Android Studio:ProGuard 混淆配置

【我的Android进阶之旅】Android 混淆文件资源分类整理之二:将混淆文件拆分成更小粒度的混淆文件 在我2017年的文章【我的Android进阶之旅】Android 混淆文件资源分类整理中,我已经提及过。 之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库、第三方库都越来越多,导致proguard-rules.pro 越来越臃肿,而且随着开发人员增多导致proguard-rules.pro 文件里面的配置越来越混乱。 一、拆分proguard-rules.pro混淆 阅读详情

在 Android Studio 中可通过配置 proguard-rules.pro 对生成的 apk 和 jar 进行加密,以免被轻易破解。(附:破解方法)

Android Studio 创建Module后,会自动生成 proguard-rules.pro 文件,在其中添加需要的规则即可,另外需要配置 build.gradle,开启混淆功能。

    buildTypes {
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            // VersionName后缀
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }
        release {
	        // 不显示log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            // 混淆
            minifyEnabled true
            // Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource
            shrinkResources true
            // 混淆配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

其中,release 部分配置了开启混淆,保证打包 release 时会进行混淆。debug 不进行混淆,否则无法调试。

若需要混淆的 jar,那么在库类型的 moudle 中也需要配置 proguard-rules.pro 及 build.gradle,生成后即可在 build\intermediates\bundles\release 中获得混淆后的 jar。


ProGuard 简介

ProGuard 能够对 Java 类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。

  • 压缩(Shrink):检测和删除没有使用的类,字段,方法和属性。

  • 优化(Optimize):对字节码进行优化,并且移除无用指令。

  • 混淆(Obfuscate):使用 a,b,c 等无意义的名称,对类,字段和方法进行重命名。

  • 预检(Preveirfy):主要是在 Java 平台上对处理后的代码进行预检。

常用规则如下:

斜体字 表示需要设置的参数,[ ] 中的内容表示可选的配置。

  • 【-assumenosideeffects class_specification】

Assume that the specified methods don’t have any side effects, while
optimizing.

假设调用不产生任何影响,在 proguard 代码优化时会将该调用 remove 掉。如 system.out.println 和 Log.v 等。
  • 【-dontwarn [class_filter]】

Don’t warn about unresolved references at all.

  • 【-dump [filename]】

Write out the internal structure of the processed class files, to the
standard output or to the given file.

  • 【-keep [,modifier,…] class_specification】

Preserve the specified classes and class members.

  • 【-keepattributes [attribute_filter]】

Preserve the given optional attributes; typically Exceptions,
InnerClasses, Signature, Deprecated, SourceFile, SourceDir,
LineNumberTable, LocalVariableTable, LocalVariableTypeTable,
Synthetic, EnclosingMethod, and *Annotation*.

  • 【-keepclasseswithmembernames class_specification】

Preserve the names of the specified classes and class members, if all
of the specified class members are present (after the shrinking step).

  • 【-keepclassmembers [,modifier,…] class_specification】

Preserve the specified class members, if their classes are preserved
as well.

  • 【-keepnames class_specification】

Preserve the names of the specified classes and class members (if they
aren’t removed in the shrinking step).

  • 【-libraryjars class_path】

Specifies the library jars (or wars, ears, zips, or directories).

应用的依赖包,如 android-support-v4。
  • 【-optimizationpasses n】

The number of optimization passes to be performed.

  • 【-optimizations optimization_filter】

The optimizations to be enabled and disabled.

  • 【-printmapping [filename]】

Print the mapping from old names to new names for classes and class
members that have been renamed, to the standard output or to the given
file.

  • 【-printseeds [filename]】

List classes and class members matched by the various -keep options,
to the standard output or to the given file.

  • 【-printusage [filename]】

List dead code of the input class files, to the standard output or to
the given file.


ProGuard 常用配置

android sdk 的 /sdk/tools/proguard/proguard-android.txt 中已经提供了基本的混淆配置,不需要在 proguard-rules.pro 中重复配置。

sdk 提供的 proguard-android.txt 中提供的默认配置说明参见 Android : proguard-android.txt 解析。

除此之外,需要在 proguard-rules.pro 中添加的常用配置如下:

######################## 公共 ########################

#指定代码的压缩级别
-optimizationpasses 5

# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#记录生成的日志数据,gradle build时在本项目根目录输出
#apk 包内所有 class 的内部结构
-dump class_files.txt
#未混淆的类和成员
-printseeds seeds.txt
#列出从 apk 中删除的代码
-printusage unused.txt
#混淆前后的映射
-printmapping mapping.txt

#移除log代码
-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

#不混淆反射用到的类
-keepattributes Signature
-keepattributes EnclosingMethod

#保持继承自系统类的class不被混淆
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep interface android.support.v7.app.** { *; }
-keep class android.support.v7.** { *; }
-keep public class * extends android.support.v7.**
-keep public class * extends android.app.Fragment
-keep class * extends android.**{*;}

#不混淆Serializable接口的子类中指定的某些成员变量和方法
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

######################## Module自定义 ########################

############ 不混淆引用的jar ############

#不混淆butterknife
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
-dontwarn butterknife.internal.**

#不混淆AndroidBootstrap
-keep class com.beardedhen.androidbootstrap.**{*;}
-dontwarn com.beardedhen.androidbootstrap.**

#不混淆应用宝自更新jar
-keep class com.qq.**
-dontwarn com.qq.**
-keep class com.tencent.**
-dontwarn com.tencent.**

############ 保持自定义控件不被混淆 ############

-keepclasseswithmembernames class * {
    public <init>(android.content.Context);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int, int);
}

############ 项目内部类的混淆配置 ############

#不混淆整个包
#-keep class com.test.test.**{*;}

#不混淆对外接口的public类名和成员名,否则外部无法调用
#-keep public interface com.test.test.**{*;}
#-keep public enum com.test.test.**{*;}
#-keep public class com.test.test.**{
#    public *;
#}

#忽略项目中其他Module的警告 ############
#-dontwarn com.test.test.**

注意事项

  • 反射用到的类不能混淆,JNI 方法不混淆

  • AndroidMainfest 中的类不混淆

  • 四大组件和 Application 的子类和 Framework 层下所有的类默认不会进行混淆

  • Parcelable 的子类和 Creator 静态成员变量不混淆,否则会产生 android.os.BadParcelableException 异常

  • 使用 GSON、fastjson 等框架时,所写的 JSON 对象类不混淆,否则无法将 JSON 解析成对应的对象

  • 使用第三方开源库或者引用其他第三方的SDK包时,需要在混淆文件中加入对应的混淆规则

  • 有用到 WEBView 的 JS 调用也需要保证写的接口方法不混淆


参考资料

Android studio 混淆配置详解 混淆 studio 使用Proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。 功能:Shrinking(压缩)、Optimization(优化)、Obfuscattion(混淆)、Preverification(预校验)四个操作。 优点: 1.删除项目无用的资源,有效减小apk大小; 2.删除无用的类、类成员、方法和属性,还可以删除无用的注释,最大限度的优化字节码文件; 3.使用简短无意义的名称重命名已存在的类、方法、属性等,增加逆向工程的难度。 配置 buildTypes { release { // true - 打开混淆 mi 立即下载

相关推荐

RTX 50系列显卡选购指南:从Stable Diffusion到深度学习,哪款最适合你的AI需求?

本文深入分析了RTX 50系列显卡如何满足不同的AI应用需求。针对Stable Diffusion图像生成,强调显存容量是关键;对于大语言模型本地推理,需平衡算力与显存;而深度学习训练则更看重算力效率。文章对比了RTX 5090、5080、5070等型号的核心规格与适用场景,并提供了从入门到专业的实战配置建议,帮助用户根据自身AI工作负载精准选择最具性价比的显卡。

linux6sysadmin的博客 692

Android混淆规则--proguard-rules.pro

一、混淆是什么,该怎么做? 如果我们的app正常发布就必须要经历混淆这一步,混淆可以使我们的app不那么容易被别人用反编译工具破解,就算被破解,想要读懂我们的源码也是非常费劲的,因为混淆过的源码的类和类成员会被随机命名,代码非常的乱和没有规律,除非之前用keep进行了保护。 以我们的常用开发工具andorid studio 为例,Android Studio自身集成Java语言的ProGuard作为压缩,优化,混淆和预校验,并配合Gradle工具进行构建,我们只需要在工程应用目录的build.gradle文

u010194271的博客 1万+

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

• 部署:CI/CD 双流水线,前端 push → GitHub Actions → Cloudflare Pages;• 后端:分层结构 routers → services → repositories → models,单测覆盖率 90 %。• 接口缓存:Redis + FastAPI Depends 实现接口级缓存,读 QPS 提升至 5 k。• 前端:BFF 由 React Query 代理,统一缓存、重试、分页。GET /items/{id} 详情。,前端同学无需等 Mock 即可联调。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1494

安卓代码混淆指南

混淆代码能有效防止项目被反编译,同时还可以适当减少apk的大小,在实际开发过程中尤为重要,经过长时间的摸索,对代码混淆有了一定的了解,下面写下个人心得: 1. 代码混淆的重要文件:proguard-rules.pro,如果你不小心删掉了,从其他地方复制一个或自己创建一个。 2. 开启混淆: 将build.gradle下的buildTypes->release->minifyEna...

king的专栏 2082

域控制器迁移后NETLOGON共享丢失的修复指南

本文详细解析了在Windows域控制器迁移后NETLOGON共享丢失的故障现象与修复方法。通过使用Dcdiag工具诊断,定位注册表键值SysVolReady异常及SCRIPTS目录缺失等核心原因,并提供了修改注册表、创建目录、重启Netlogon服务等逐步修复指南,帮助管理员快速恢复域用户登录功能,确保业务连续性。

weixin_29245767的博客 88

锂电池主动均衡理解

锂电池主动均衡方案总结: 来自:http://wenku.baidu.com/link?url=EWiyACZ3aLPhcOjI4FZL3uQ9d0FD6dBhADQSVQiaSmRHHATTdSig1Wy39JY7-ijCzbAEYG1ymz6Lv5zhGdZaStQSHzFt6v3h3_tMrJudz9O 目前车厂采用被动均衡方案的公司:(来自网页) 目前采用主动均衡的...

weixin_34365417的博客 2910

ProGuard配置详解

ProGuard是一个开源的Java class文件缩小器、优化器、混淆器和预验证器。它通过删除未使用的类、字段、方法和属性,优化字节码指令,并重命名类、字段和方法,使反编译后的代码难以理解,从而提高应用的安全性。以下是对ProGuard配置文件的一些详细解释和常见配置项的说明。

彬_小彬的博客 3462

GBT 27930-2015/2023国标充电协议A类CAN报文ID说明

国标充电CAN的ID,仅供学习参考。

qqq080的博客 7810

Android Studio:ProGuard 混淆配置 防止反编译

AndroidStudio中的项目可以用compile的形式引入github上的开源项目,可以引用module,而不一定都要用libs文件夹中添加jar包的形式。在最终realease打包时,混淆的设置是比较重要的,否则会导致生成的包有很多功能不能正常使用。下面列举一个基本的app的build...

638

Python学习(一)

快速入门 1.Linux系统中是可以直接使用Python进行编程,具体如下: 进入Python:在linux的Terminal中输入 Python ,进入Python的命令行; 退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。 2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。 3.Python程序的文件扩展名通常都是 .py。 4.执行Python程序的方式:在

SummerXRT的博客 1281

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1015

Android studio 代码混淆使用 —— ProGuard

Android studio 代码混淆使用 —— ProGuard

王小六的博客 1910

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 792

android studio代码混淆配置,android-studio/代码混淆规则配置文件proguard-rulespro.md at master · quanke/android-studio...

代码混淆规则配置文件:proguard-rules.pro如果我们想在打包的时候进行代码混淆,就需要在proguard-rules.pro中配置代码混淆规则.常用的代码混淆规则:# 在这里添加项目的代码混淆规则# 混淆规则请参考:http://proguard.sourceforge.net/index.html#manual/usage.html##################### 一般使...

weixin_39997443的博客 238

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android代码混淆配置:ProGuard

混淆

qq_42795723的博客 1449

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android Studio中module配置好的bulid.gradle和混淆proguard-rules.pro

apply plugin: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "corki.cn.ktvzp" minSdkVersion 15 targe

小菜希的Blog 8431

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android多模块混淆、多module混淆、多library混淆的正确姿势

Android Studio本身集成了ProGuard混淆工具,我们可以通过编辑build.gradle文件来开启混淆并且对代码进行压缩,对资源进行优化等。如下图 下面是代码,可以直接复制 buildTypes { release { minifyEnabled true //开启混淆 zipAlignEnabled true //压缩优化 shrinkResources true //移出无用资...

xqhys的博客 2452

安卓代码混淆技术分享

安卓代码混淆技术分享

阿甘正传 1012

Android studio 混淆打包 proguard-rules.pro 与 bulid.gradle 配置总结

现在写的app 基本都是经过混淆了的,如果不混淆, 发布出去,别人一反编译 就可以直接看你的源码了 ok 来说一下混淆吧: build.gradle文件 apply plugin: 'com.android.application' android { //签名文件 改为自己的路径 signingConfigs { config { ...

hao_qi 6789

Android Studio 代码混淆(你真的会混淆吗)

一、前言今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆。二、Android Studio 代码混淆基本配置在工程目录下,找到 proguard-rules.pro 文件,它就是你要进行编写混淆配置的文件,在这个文件中编写混淆规则当然,在这之前,还需要在你 module 的 build

GitHubClub 4万+

Android Studio中代码混淆

我们辛辛苦苦开发一款app,如果被心怀叵测的人恶意反编译,会让人感到恶心至极!所以考虑到安全性和应用的私密性,在打包的时候,都会进行一些代码混淆处理,Android Studio(一下简称AS)中的其实已经为我们处理到了极致,我们只需要简单的配置就可以,下面就为大家在AS开发中如何完成代码的混淆进行详细介绍: 1.在 buildType中打开混淆的开关和指定混淆文件的路径: build

尹人入胜的博客 738

Android 混淆 配置,Android混淆配置总结-持续更新

Android打正式的release包混淆是必备的,避免APP被反编译,使项目中隐秘的技术或信息被别人查看。Eclipse中混淆配置写在proguard-android.txt文件中,并在project.properties文件中设置proguard.config=proguard-project.txtAndroid studio则写在proguard-rules.pro中,当然写在progua...

weixin_42350411的博客 600

AndroidStudio下ProGuard混淆打包

转载自https://github.com/D-clock/Doc/blob/master/Gradle/4_AndroidStudio%E4%B8%8BProGuard%E6%B7%B7%E6%B7%86%E6%89%93%E5%8C%85.md 继前一篇笔记ProGuard基础语法和打包配置总结了一些打包混淆需要注意的地方。这几天忙着新项目的上线,切换到AndroidStudio下开

weizaishouex2010的专栏 3351

android studio .so混淆配置,Android studio 混淆配置详解

混淆studio 使用proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。功能:shrinking(压缩)、optimization(优化)、obfuscattion(混淆)、preverification(预校验)四个操作。优点:1.删除项目无用的资源,有效减小apk大小;2.删除无用的类、类成员、方法和属性,还可以删除无用的注释,最大限度的优化字节码文件;3.使用简...

weixin_31423913的博客 549
上一篇: Android : proguard-android.txt 解析
下一篇: Android Studio:生成 JavaDoc
doris_d
博客等级 码龄12年 79粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值