首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过proguard Android来混淆包中的类?

ProGuard是一个开源的Java字节码优化和混淆工具,可以用于Android应用程序的代码混淆和优化。通过使用ProGuard,可以减小应用程序的大小,提高应用程序的性能,并增加应用程序的安全性。

要通过ProGuard来混淆Android包中的类,可以按照以下步骤进行操作:

  1. 配置ProGuard:在Android项目的根目录下的build.gradle文件中,添加ProGuard的配置。可以通过以下代码示例来配置:
代码语言:txt
复制
android {
    // ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

上述配置中,minifyEnabled true表示启用代码混淆,proguardFiles指定了ProGuard的配置文件。

  1. 创建ProGuard配置文件:在项目的app模块下,创建一个名为proguard-rules.pro的文件,并在该文件中添加混淆规则。可以根据需要添加自定义的规则,也可以使用一些常见的规则模板。以下是一个示例配置文件的内容:
代码语言:txt
复制
# 保留应用入口类
-keep public class com.example.MyApplication {
    public static void main(java.lang.String[]);
}

# 保留特定的类和方法不被混淆
-keep class com.example.MyClass {
    public void myMethod();
}

# 保留特定的类不被混淆
-keep class com.example.MyClass

# 保留特定的类和成员不被混淆
-keepclassmembers class com.example.MyClass {
    public <init>(android.content.Context);
    public void myMethod();
}

# 保留特定的类和成员不被混淆,并且不移除未使用的类和成员
-keep,allowobfuscation class com.example.MyClass {
    public <init>(android.content.Context);
    public void myMethod();
}

# 保留特定的类和成员不被混淆,并且不移除未使用的类和成员,但移除无效的代码
-keep,allowobfuscation,optimizationpasses=2 class com.example.MyClass {
    public <init>(android.content.Context);
    public void myMethod();
}

上述配置文件中,使用-keep关键字来指定需要保留的类、方法或成员。可以根据需要进行灵活的配置。

  1. 运行混淆:在Android Studio的菜单栏中,选择Build -> Generate Signed Bundle / APK,然后选择APK,并点击Next。在下一步中,选择一个已有的密钥或创建一个新的密钥,并填写相关信息。最后,点击Finish来生成APK文件。

在生成APK文件的过程中,ProGuard会自动应用配置文件中的混淆规则,对代码进行混淆和优化。生成的APK文件中的类和方法名称将被混淆,提高了代码的安全性。

需要注意的是,混淆过程可能会导致一些问题,例如代码中使用了反射、动态加载类等特性,这些需要在ProGuard配置文件中进行相应的保留规则配置,以避免运行时出现问题。

推荐的腾讯云相关产品:腾讯云移动应用安全加固(MSaaS),详情请参考腾讯云移动应用安全加固(MSaaS)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留及成员混淆结果 | 保留注解以及被注解修饰成员方法 )

文章目录 一、Proguard 默认混淆结果 二、Proguard 保留及成员混淆结果 三、Proguard 保留注解以及被注解修饰/成员/方法 更多 ProGuard 混淆配置参考 : https...://www.guardsquare.com/en/products/proguard/manual/usage 一、Proguard 默认混淆结果 ---- ProGuard 默认混淆结果 , 就是没有..., 其余 Java 文件都被混淆 ; 二、Proguard 保留及成员混淆结果 ---- 在 应用 Module 下 proguard-rules.pro 中进行如下配置 : # 保留 MainActivity...; public @interface Keep { } ProGuard 配置 保留该注解 , 以及 被该注解修饰 ; # 保留 Main 及成员 -keep public class kim.hsl.handler.Main...} 编译混淆结果 : Handler 和 成员没有被混淆 ; 因此可以使用注解形式 , 灵活配置某个 / 方法 / 成员 不被混淆 ;

1.7K00

Android 混淆那些事儿

为什么要混淆 我们apk在打包发布之前,都要进行混淆处理避免源代码和资源文件被小白用户通过反编译拿到。...我们来看一下Proguard几个步骤如何处理Entry Points。 在压缩阶段,Proguard从上述Entry Points开始遍历搜索哪些成员被使用。...Android Studio 默认混淆方案及字段解读 开启混淆 参见google官方文档压缩代码和资源 要通过Proguard启动代码压缩,在build.gradle文件内相应构建类型添加minifyEnabled...>] 例如mac平台下: retrace.sh -verbose mapping.txt obfuscated_trace.txt 默认混淆方案及字段解读 下面结合默认混淆文件内容解释混淆参数....** 本和所包含子包下名都保持 -keep class com.lily.test.* 保持该包下名 -keep class com.lily.test.** {*;} 保持和子名和里面的内容均不被混淆

3.2K50

android混淆那些坑

混淆步骤ProGuard会对非EntryPoint和方法进行重命名。 Proguard使用 Proguard工具目录结构 ?...Proguard四项核心功能shrink,optimize,obfuscate和preverify执行都是由proguard.jar完成,不过proguard.jar只能通过命令行方式来使用。...proguardgui.jar是Proguard提供一个图形界面工具,通过proguardgui.jar可以方便查看和编辑Proguard配置,以及调用proguard.jar执行一次优化过程。...混淆之后jar文件执行过程如果出现异常,生成异常信息将很难被解读,方法调用堆栈都是一些混淆之后名字,通过retrace.jar可以将异常堆栈信息方法名还原成混淆名字,方便程序解决bug...(windows大小写不敏感) -dontusemixedcaseclassnames # 指定不去忽略非公共 # 默认跳过,有些情况下编写代码与在同一个包下,并且持有内容引用

3.2K60

一篇文章带你领略Android混淆魅力

只要是我们亲身经历过 App 打包上线过程,或多或少都需要了解一些代码混淆基本操作。那么,混淆到底是什么?它好处有哪些?具体效果如何?别急,下面我们一一探索它"独特"魅力?。...从上面两张图可以看出:经过混淆处理之后,我们 APK 名、名、成员名等都被替换为随机、无意义名称,增加了代码阅读和理解困难程度,提高了反编译成本。...} } } 以上就是开启混淆基本操作了,通过 minifyEnabled 设置为 true 开启混淆。...以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...:1107) 1.通过 retrace 脚本工具 首先我们要进入到 Android SDK 路径 /tools/proguard/bin 目录,这里以 Mac 系统为例,可以看到如下内容: ?

95720

Android开发:请你吃一顿史上最全Android混淆大餐

好处有哪些?具体效果如何?别急,下面我们一一探索它"独特"魅力。 混淆简介 代码混淆(Obfuscated code)是将程序代码以某种规则转换为难以阅读和理解代码一种行为。...从上面两张图可以看出:经过混淆处理之后,我们 APK 名、名、成员名等都被替换为随机、无意义名称,增加了代码阅读和理解困难程度,提高了反编译成本。...} } } 以上就是开启混淆基本操作了,通过 minifyEnabled 设置为 true 开启混淆。...以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...:1107) 通过 retrace 脚本工具 首先我们要进入到 Android SDK 路径 /tools/proguard/bin 目录,这里以 Mac 系统为例,可以看到如下内容: ?

4.4K30

android开发笔记之 Android代码混淆打包

大家好,又见面了,我是你们朋友全栈君。 大家应该都听过代码混淆吧,如果大家有去反编译过别人APK的话,应 该会看到好多名和名是a,b.c….之类吧,这里就提到了一个概念: 混淆。...三, 是我们java 元素名称是在配置文件配置好。 所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆。...} 使用给定文件关键字作为要混淆方法名称 -overloadaggressively 混淆时应用侵入式重载 -useuniqueclassmembernames 确定统一混淆成员名称增加混淆...-flattenpackagehierarchy {package_name} 重新包装所有重命名并放在给定单一 -repackageclass {package_name} 重新包装所有重命名文件中放在给定单一...”这行前“#”删除,最后导出即可 实现对代码混淆,即使我们没有去编写proguard-project.txt内容。

77120

Android安全攻防战,反编译与混淆技术完全解析(下)

只要一个中有存在native方法,它名就不会被混淆,native方法方法名也不会被混淆,因为C++代码要通过名+名+方法名进行交互。 但是别的代码还是会被混淆。...-keepclassmembers class **.R$* { public static ; } 表示不混淆R文件所有静态字段,我们都知道R文件是通过字段记录每个资源...proguard中一共有三组六个keep关键字,很多人搞不清楚它们区别,这里我们通过一个表格直观地看下: 关键字 描述 keep 保留成员,防止它们被混淆或移除。...回到Android Studio项目当中,刚才打出APK虽然已经成功混淆了,但是混淆规则都是按照proguard-android.txt默认规则,当然我们也可以修改proguard-android.txt...,一种是通过本地jar引入,一种是通过remote引入,其实这两种方式没什么区别,要保留代码都可以使用**这种通配符实现,如下所示: -keep class org.litepal.** {

1.7K70

ProGuardAndroid使用姿势

ProGuard 除了可以大幅减少代码空间之外,还可以让所有的标识符(和成员)都使用更短名字,如 a.A 和 a.a.B。这个过程就是混淆。...混淆通过两种方式减少代码:让表示名称字符串更短;在这些方法或者属性有相同签名情况,下这些字符串更容易被复用,最终减少了字符串池数目。 使用 ProGuard 是开启资源压缩前提条件....因为我们知道这些注解在运行时不会被使用,我们可以通过ProGuard 配置添加 -dontwarn 规则来安全地忽略掉这些警告,如 在 OkHttp 文档中加入这些规则: -dontwarn...“ 按钮), 您可以在 DEX 视图树中看到一些额外功能: 所有的名字都是混淆(即您可以看到原始名字) 被 ProGuard 配置规则 kept ,方法和属性会显示成粗体 您可以开启 “...关于 ProGuard 和 第三方库 就像您有责任为您自己代码提供 keep 规则一样,那些第三方库作者们也有义务向您提供必要混淆规则配置避免开启 Proguard 导致构建失败或者应用崩溃。

2.6K40

Android混淆你了解多少?

好处有哪些?具体效果如何?别急,下面我们一一探索它"独特"魅力。 ##1混淆简介 代码混淆(Obfuscated code)是将程序代码以某种规则转换为难以阅读和理解代码一种行为。...] 从上面两张图可以看出:经过混淆处理之后,我们 APK 名、名、成员名等都被替换为随机、无意义名称,增加了代码阅读和理解困难程度,提高了反编译成本。...} } } 以上就是开启混淆基本操作了,通过 minifyEnabled 设置为 true 开启混淆。...以上代码 proguard-android.txt 表示 Android 系统为我们提供默认混淆规则文件,而 proguard-rules.pro 则是我们想要自定义混淆规则,至于如何自定义混淆规则我们将在接下来会讲到...被反射元素 被反射使用、变量、方法、名等不应该被混淆处理。

1.8K00

Android 代码混淆机制

原理 android平台混淆原理是把代码中原来有具体含义名,名,变量名,方法名等名称全部替换成按顺序排列无意义英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样结果,并且就算代码被反编译出来...编写混淆脚本 找到Android项目目录下proguard-project.txt”文件,在proguard-project.txt文件,你需要做就是指定混淆规则,还有指明要过滤那些文件或代码块...2.保留了所有的Native变量名及名,所有中部分以设定了固定参数格式构造函数,枚举等等。(详细信息请参考\examples例子及注释) 3.需要序列化和反序列化不能被混淆。...二、通过ProGuard工具混淆代码 如果你想把你Android项目打包成jar文件然后再混淆,那这种方法比较适合 下载运行ProGuard工具 1.首先到http://proguard.sourceforge.net...jar 笔者是通过eclipse来到处Android项目jar,用Android Studio做也差不多,这就不过多介绍了。

1.5K20

android代码混淆

proguard 问题和风险 代码混淆后虽然有混淆优化好处,但是它往往也会带来如下几点问题 1,混淆错误,用到第三方库时候,必须告诉 proguard 不要检查,否则proguard 会报错。...本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射地方 如何实施 现在系统已经配置为混淆时候会保留 Android系统组件...    确定统一混淆成员名称增加混淆 -flattenpackagehierarchy {package_name}    重新包装所有重命名并放在给定单一 -repackageclass...{package_name}    重新包装所有重命名文件中放在给定单一 -dontusemixedcaseclassnames    混淆时不会产生形形色色名 -keepattributes...打包出来程序如何调试 一旦打包出来,就不能用eclipselogcat去看了,这里可以用android sdkddms.battool来看,一用就发现和logcat其实还是一个东西,就是多了个设备选择

1.5K80

Android插件化基础3----Android编译打包流程详解

系统资源build/tools/zipalign目录,它主要工作是将apk进行对齐处理,使apk所有资源文件举例文件起始偏移为4字节整数倍,这样通过内存映射访问apk时速度会更快,验证apk...Eclipse如何开启混淆 在Eclipse,文件根目录有如下两个文件 projiect.properties 和 proguard-project.txt。...proguardgui.jar:是Proguard提供一个图形界面工具,通过proguardgui.jar可以方便查看和编辑Proguard配置,以及调用proguard.jar执行一次优化过程。...针对第三方jar解决方案 我们在Android项目中不可避免要使用很多第三方提供SDK,一般而言,这些SDK是经过ProGuard混淆,而我们所需要做就是避免这些SDK和方法在我们APP...(六)、ProGuard混淆注意事项 在使用ProGuard过程,还有一些注意事项如下: 1、如何确保混淆不会对项目产生影响 测试工作要基于混淆进行,才能尽早发现问题,开发团队冒烟测试,也是要基于混淆

2K22

Android-Proguard(混淆)

build.gradle文件设置minifyEnabled为true,然后可以到proguard-rules.pro文件中加入我们混淆规则即可。...大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写混淆文件,proguard-android.txt...刚才是开启混淆,那我们如何关闭,比如关闭压缩,关闭优化呢? ?...除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用。它包括资源混淆,字符串加密,加密和dex文件分割等。...二:接下来我们来说一说混淆基本规则: ? 但如果你用两颗星,会发现,虽然名被保持了,但里面的变量名啥都变了,那如果我们既要本保持名和内容又要子保存呢?

1.3K40

Android 安装优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

开启 Proguard , 在编译时 , 会自动进行如下一系列优化 : 压缩 Shrink : 检查 并 删除 没有使用 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个时...层代码 , 使用无意义标识符替代 Java 名 , 变量名 , 方法名 等名称 ; 预检 Preveirfy : 预检 Java 平台上预处理代码 ; 开启 ProGuard 配置...’ , 配置了两个文件, 其中 proguard-android-optimize.txt 是默认混淆配置文件 , 由系统自动生成 ; proguard-rules.pro 是用户自己配置混淆配置文件...; 遇到某个编译遇到警告退出 , -dontwarn 配置该不要爆出警告 ; 遇到没有找到 , 使用 -keep 不要混淆该类 ; 常用混淆配置 : " -dontwarn " : 不要报出警告信息..., 如果出现警告 , 编译打包会被终止 ; # com 名下不要爆出警告 -dontwarn com.** " -keep " : 不要混淆 ; # com 名下不要混淆 -keep class

3.8K20

深入探索 Android 瘦身(上)

Proguard 作用 在 Android SDK 里面集成了一个工具 — Proguard,它是一个免费 Java 文件 压缩、优化、混淆、预先校验 工具。...此外,我们也可以在配置混淆文件将 android.util.Log 置为无效代码,以去除 apk 打印日志代码。而 proguard-rules.pro 是该模块下混淆配置。...APK中所有文件内部结构 mapping.txt 提供原始与混淆、方法和字段名称之间转换,可以通过proguard.obfuscate.MappingReader解析 seeds.txt...而 ProGuard 优化功能可以 通过更高效,直接访问方式 代替它。...关于如何去除 Dex Debug 信息是通过 ReDex StripDebugInfoPass 完成,其配置如下所示: { "redex" : { "passes"

2K30

Flutter App混淆加固、保护与优化原理

​引言 在移动应用程序开发,保护应用程序代码和数据安全至关重要。本文将探讨如何对Flutter应用程序进行混淆、优化和保护,以提高应用程序安全性和隐私。...一、混淆原理 混淆是一种代码保护技术,通过修改源代码或编译后代码,使其难以阅读和理解。混淆主要目的是提高反编译和逆向工程难度。通常,混淆可以通过以下方法实现: 重命名变量、函数和名。...这些文件可用于还原混淆堆栈跟踪。 2.2、混淆Android原生代码 要对Android原生代码进行混淆,请在android/app/build.gradle文件启用ProGuard或R8。...('proguard-android-optimize.txt'), 'proguard-rules.pro' } } 此外,确保在proguard-rules.pro文件添加必要混淆规则,例如保留与...保留JSON对应Java Bean对象:在proguard-rules.pro文件中保留与JSON相关Java Bean对象,使用-keep指令保留这些

93110

Flutter App混淆加固、保护与优化原理

​引言 在移动应用程序开发,保护应用程序代码和数据安全至关重要。本文将探讨如何对Flutter应用程序进行混淆、优化和保护,以提高应用程序安全性和隐私。...一、混淆原理 混淆是一种代码保护技术,通过修改源代码或编译后代码,使其难以阅读和理解。混淆主要目的是提高反编译和逆向工程难度。通常,混淆可以通过以下方法实现: 重命名变量、函数和名。...这些文件可用于还原混淆堆栈跟踪。 2.2、混淆Android原生代码 要对Android原生代码进行混淆,请在android/app/build.gradle文件启用ProGuard或R8。...('proguard-android-optimize.txt'), 'proguard-rules.pro' } } 此外,确保在proguard-rules.pro文件添加必要混淆规则,例如保留与...保留JSON对应Java Bean对象:在proguard-rules.pro文件中保留与JSON相关Java Bean对象,使用-keep指令保留这些

39210

Android Instant App(安卓即时应用程序)启用 ProGuard混淆

混淆)没有考虑模块在运行时如何加载在一起。...为从代码中使用了跨模块添加保留规则 我们需要从功能 APKs 找出使用基本模块哪些。你可以通过检查来源手动追踪,但对于大型项目这种方法是不可行。...因此我们可以先通过 SDK android.jar 获取框架列表进行过滤: $ jar tf ~/Android/Sdk/platforms/android-27/android.jar |...要解决这个问题,首先要启用 ProGuard混淆开发即时应用程序(例如使用刚刚在前面步骤设置构建方式)。...请记住通过运行应用程序并检查所有可能情况彻底进行测试,因为某些错误只能在运行时发生。 ---- 希望本指南能够让你更好地理解为什么 ProGuard混淆)可以使你即时应用程序崩溃。

2.6K30

Android 代码混淆规则

如果开启了混淆Proguard默认情况下会对所有代码,包括第三方都进行混淆,可是有些代码或者第三方是不能混淆,这就需要我们手动编写混淆规则保持不能被混淆部分。 2....Proguard作用 Android混淆”可以分为两部分,一部分是 Java 代码优化与混淆,依靠 proguard 混淆实现;另一部分是资源压缩,将移除项目及依赖未被使用资源(资源压缩严格意义上跟混淆没啥关系...*; } 4.2 不混淆某个所有的 -keep class com.android.proguard.example.** { *; } 4.3 不混淆某个子类 -keep public...class * extends com.android.proguard.example.Test { *; } 4.4 不混淆所有包含了“model”及其成员 -keep public...隔开) tools:shrinkMode 开启严格模式 当代码通过 Resources.getIdentifier() 用动态字符串获取并使用资源时,普通资源引用检查就可能会有问题。

2.5K10

Android 混淆从入门到精通

说在前面 这里我们直接用Android Studio来说明如何进行混淆Android Studio自身集成Java语言ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单,只需要在工程应用目录...然后我们就可以到proguard-rules.pro文件中加入我们混淆规则了。 android { .......* 一颗星表示只是保持该包下名,而子包下名还是会被混淆;两颗星表示把本和所含子包下名都保持;用以上方法保持后,你会发现名虽然未混淆,但里面的具体方法和变量命名还是变了,这时如果既想保持名...如下例子就避免所有继承Activity混淆 -keep public class * extends android.app.Activity 如果我们要保留一个内部类不被混淆则需要用$符号...zipAlign,zipAlign可以让安装资源按4字节对齐,这样可以减少应用在运行时内存消耗。

1.4K90
领券