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 立即下载

相关推荐

斑马打印机状态监控进阶:不用SDK也能获取打印状态的3种野路子

本文介绍了三种不依赖官方SDK的斑马打印机状态监控方法,包括SGD命令、TCP端口嗅探和共享打印机日志分析。这些方案适用于老旧系统或网络受限环境,帮助运维人员实时掌握打印状态,提升设备管理效率。特别适合工业自动化和物流仓储场景中的应急处理。

weixin_42628688的博客 427

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

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

u010194271的博客 1万+

ROS自定义地图实战:从CAD到导航的完整流程

本文详细介绍了如何将CAD图纸或手绘草图高效转换为ROS机器人可直接使用的导航地图。通过解析PGM与YAML标准格式,提供从图像处理、尺度校准到集成AMCL与move_base导航栈的完整实战流程,帮助开发者跳过繁琐的SLAM建图,实现快速、精准的自定义地图部署。

weixin_29083475的博客 496

安卓代码混淆指南

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

king的专栏 2082

SAP S/4HANA 可扩展性 – 面向初学者的简化指南

可扩展性(Extensibility)是 SAP ECC 和 SAP S/4HANA 的一项关键功能。它使客户能够通过定制其业务流程来创造竞争优势,并使合作伙伴能够通过量身定制的解决方案来丰富核心 ECC 或 S/4HANA。在过去的几十年中,SAP 的 on-premise 版本客户和合作伙伴主要使用经典的 ABAP 扩展性来扩展他们的 ERP 解决方案。经典扩展性允许 ABAP 开发人员使用甚至修改所有 SAP 对象。尽管经典扩展性非常强大和灵活,但在当今的云世界中,它已不再是一个好的选择。

SAP学习成长之路的博客 1809

RK平台以太网设置中添加代理设置

以太网中配置Configuration的时候可以IpConfiguration的初始化函数来设置代理类型和代理参数。通过添加一个KEY_ETH_PROXY的选项来设置代理的配置,然后再设置以太网静态或者动态的类型时候下发给系统进行设置。

Android系统开发笔记 657

ProGuard配置详解

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

彬_小彬的博客 3462

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Robot_PLC_HMI_Automation 9896

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

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

638

基于截图详解:SAP GUI for Java 如何设置登录链接,以及 conn= 连接字符串该怎么写

摘要:SAP GUI for Java 的连接属性配置关键是在"高级"页签的"conn="后填写连接字符串。连接字符串格式取决于网络拓扑:直连应用服务器使用"/H/主机/S/端口";通过消息服务器负载均衡使用"/M/消息服务器/S/端口/G/组名";经SAProuter访问则需添加路由器前缀。配置时需注意专家模式会覆盖其他页签设置,且连接字符串还支持附加参数如客户端、语言和默认事务码。具体填写内容应根据Basis团队提供的系统信

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

ROS2 机械臂末端刀具执行曲面路径规划入门教程

Noether工具路径规划系统摘要 Noether是一款用于网格曲面刀具路径规划的软件,支持喷涂、打磨、检测等机器人工艺流程。其核心流程分为三步:1)网格修改(平滑、分割等预处理);2)刀具路径规划(生成有序路径点序列);3)刀具路径修改(姿态调整等后期处理)。系统提供栅格规划和边界规划两种模式,支持自定义扩展。配套GUI工具可配置完整流程,包含网格处理、路径生成和可视化功能。通过示例演示了多组件网格处理、拼图边缘铣削等典型应用场景,并指导用户进行插件开发,实现圆柱体提取、摄像机悬停等定制化功能。系统采用模

机器人控制与仿真应用 916

Android studio 代码混淆使用 —— ProGuard

Android studio 代码混淆使用 —— ProGuard

王小六的博客 1910

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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、付费专栏及课程。

余额充值