(下面会讲) 除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它的功能包括资源混淆,字符串加密,类加密和dex文件分割等。...如果有Android SDK的同学可以在{ANDROID_SDK_ROOT}/tools/proguard/lib/目录下找到proguard.jar这个jar包。...或者,也可以在{ANDROID_SDK_ROOT}/tools/proguard/bin目录下直接使用脚本执行命令。...那我们的命令可以这样写: java -jar proguard.jar @proguard.cfg 这个文件也就是我们在Android Studio中经常配置的混淆文件了。...它放在{android_sdk_home}/tools/proguard/proguard-android.txt文件中,其它的可以参考的例子在{android_sdk_home}/tools/proguard
Proguard 混淆配置 : -keep 指定 类 , 类成员 , 不被混淆 ; ( 类成员指的是类的成员方法 和 成员属性 ) -keepclassmembers 指定 类成员 不被混淆 , 类...和 类 方法 可以混淆 ; -keepclasseswithmembers 指定 类 和 类成员 , 不被混淆 , 前提是 指定的类成员存在 ; 开启 Proguard : 在 Module 下的 build.gradle...} } 上述 proguard-rules.pro 是开发者自己手动配置的 , 上述 proguard-android-optimize.txt 混淆配置文件是系统自动生成的 , 该 proguard-android-optimize.txt...(‘proguard-android-optimize.txt’)}”) 语句 , 打印了混淆脚本 proguard-android-optimize.txt 的路径 , 其打印结果如下 , 该混淆脚本在...\intermediates\proguard-files\proguard-android-optimize.txt-3.6.1 生成混淆配置脚本 proguard-android-optimize.txt
以我们的常用开发工具andorid studio 为例,Android Studio自身集成Java语言的ProGuard作为压缩,优化,混淆和预校验,并配合Gradle工具进行构建,我们只需要在工程应用目录的...大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写的混淆文件,proguard-android.txt...除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它包括资源混淆,字符串加密,类加密和dex文件分割等。...底层组件和类不要混淆 -keep public class * extends android.app.Activity -keep public class * extends android.app.Application...; 7,Parcelable的子类和Creator静态成员变量不混淆,否则会产生Android.os.BadParcelableException异常; -keepclass*implementsAndroid.os.Parcelable
文章目录 一、Proguard 配置简介 二、Proguard 完整注释 一、Proguard 配置简介 ---- 更多 ProGuard 混淆配置参考 : https://www.guardsquare.com...保留这些类和类成员 : # 保留这些类和类成员 -keep public class com.google.vending.licensing.ILicensingService 5 ....保留类成员 , 包括成员函数 和 成员变量 : # 不要混淆 Activity 及 子类的 成员 , 以防在 XML 的 onCLick 属性中用到 ....# 如果想要启用优化 , 不能只在 ProGuard 项目配置中将优化标志设为 true ; # 相反还要在 build.gradle 中指向 "proguard-android-optimize.txt...verbose # 保留一些反射中可能用到的属性 -keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod # 保留这些类和类成员
ProGuard会把处理的结果写到一个或者多个Jar包中。如果输入的文件包含了资源文件,那么它们的名字和内容都会被obfuscated类名所影响。...而其他的classes和class members就会被丢弃 Optimization:ProGuard进一步优化代码。...经过之前的优化,非入口的Classes和Methods都可以变成private,static,final,而没用的参数也会被移除,一些函数会被内联 Obfuscation:ProGuard会重命名非入口的...Class和Class Members。...在ProGuard中,Classes和Class Member都可以创建或者通过名字动态调用,这种方式也是一个特殊的入口。
介绍 之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...**则可以匹配所有在mypackage和它子目录的所有类 而Fields和Methods与Java中类似。除了Method的参数中不需要包含它的名字,就和Javap中一样。...默认ProGuard会读取public以及non-public的类。然而,non-public的类通常没有关联的。可以忽略他们,提升ProGuard速度,而且也不会影响output。...如果因为这个option无法找到那个class的话 ,ProGuard会打印出来Warning的。...默认的,ProGuard在解析classes会跳过这些类成员,因为程序通常不会引用它们。有些情况下,程序的包和Library的包相同,从而可以引用包可见的类成员。
目前Android微信采用模块化的Gradle构建方式,也是业界普遍采用的一种方式。...,也不允许您修改优化的行为,比如-optimizations 和 -optimizationpasses,这种黑盒的行为往往一旦出现了问题,高昂的维护成本也不容忽视;第三章节我们将进一步解释采用Proguard...而 R8 【图6】是 D8 的衍生产品,旨在集成 ProGuard 和 D8 的功能,目前仍在优化中,逐渐成熟,具体查看QuardSquare官网[1]了解更多。...: 图7 Proguard输出两个产出文件 usage.txt 和 mapping.txt【图7】,usage.txt 是将无用Class、Field和Method进行删除,mapping.txt保留...Class、Field和Method的original-obfucate class mapping、inline mapping【图8】,其中inline最为常见,也是Proguard难以增量的主要原因之一
如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 在一些版本的 Android 设备上,DEX 代码会在安装或者运行时被编译成机器码。...在您读 ProGuard 手册时,您没必要看那些 输入 / 输出的部分,因为这些 Android Gradle 打包插件会替您指定输入源(您和第三方库的代码) 和 Android jar 库(您构建应用时用到的...APK Analyzer 和 ProGuard Android Studio 集成的 APK Analyzer 可以帮您看到哪些类被 ProGuard 移除了并支持为它们生成 keep 规则。...除了让您的代码更小巧之外, ProGuard 和 R8 可以选择优化您的代码让它运行得更快,当然这又是另一篇文章的话题了…… ---- ¹ proguard-android.txt 文件之前是在 SDK...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+上,可以在构建时从
混淆代码能有效防止被反编译,防止自己的劳动成果被别人窃取; 混淆配置文件及开关的设置 配置文件的位置以及开关的设置位置,android studio 和eclipse稍微有些差异,这里以android...minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro.../proguard-android.txt # You can edit the include path and order by changing the ProGuard # include...3. seeds.txt 列出了没有被混淆的类和成员。 4. usage.txt 列出了源代码中被删除在apk中不存在的代码。...在线说明手册 位于sdk中的目录: sdk/tools/proguard Android 混淆代码总结 Android 代码混淆 选项说明 使用proguard混淆android代码
详细介绍 (1) ProGuard 配置 -include{filename}:从给定的文件中读取配置参数。...预检测 -dontpreverify 执行ProGuard后会生成的文件: 1)dump.txt 描述apk文件里的所以类的内部结构 2)mapping.txt 列出了原始的和混淆后的类...>/bin/projuard目录下,如果您使用ant工具;如果使用eclipse,则置于/proguard目录下面 Proguard通配符 通配符 描述 <field...# 针对第三方jar包的解决方案 # 一般而言,这些SDK都是经过ProGuard混淆了的。 # 而我们所要做的,是避免这些SDK的类和方法在我们的App中被混淆。...ProGuard代码混淆详细攻略 - CSDN博客 https://blog.csdn.net/shensky711/article/details/52770993 用ant实现自动打包android
ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。...根据ProGuard的具体使用环境,我分在Eclipse工具和android源码两种编译环境浅谈ProGuard的使用方法。...ProGuard的混淆文件:proguard-project.txt和project.properties(在老版本的ADT中,只会生成一个叫proguard.cfg的文件)。...: sdk.dir, user.home) ,意指要让ProGuard 来压缩和混淆代码,把这句注释去掉即可!...此时就需要我们配置混淆的个性化文件proguard-project.txt(eclipse环境中)或者proguard.flags(android源码环境),在其中去配置不需要混淆的类、方法和变量等。
在android中在android Manifest文件中的activity,service,provider, receviter,等都不能进行混淆。...一些在xml中配置的view也不能进行混淆,android提供的默认配置中都有。...ProGuard的输出文件及用处 混淆之后,会给我们输出一些文件,在gradle方式下是在/build/proguard/目录下,ant是在/bin/proguard目录,eclipse构建在/proguard...seeds.txt 列出了未被混淆的类和成员 usage.txt 列出了从apk中删除的代码 另外Proguard文件中包含retrace脚本,可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息,window...下时retrace.bat,linux和mac是retrace.sh,在/tools/proguard/文件夹下。
文章目录 一、Proguard 混淆后的报错信息 二、Proguard 混淆映射文件 mapping.txt 更多 ProGuard 混淆配置参考 : https://www.guardsquare.com.../en/products/proguard/manual/usage 一、Proguard 混淆后的报错信息 ---- 前提 : proguard-rules.pro 混淆配置中配置保留行数 ; # 保留行数...:2473) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop...(Handler.java:30) , 报错的是混淆后的信息 , 可读性很差 ; 二、Proguard 混淆映射文件 mapping.txt ---- 前提 : proguard-rules.pro 混淆配置中配置保留行数...; # 保留行数 -keepattributes SourceFile,LineNumberTable Proguard 混淆后 , 会提供一个 原始代码 与 混淆过的代码 的对应关系文件 mapping.txt
可选过滤器是Java虚拟机和ProGuard支持的属性名称的逗号分隔列表。 属性名称可以包含?,*和**通配符,并且可以在之前加上!否定器。...只有在最终对Android时,它才不是必需的,因此您可以将其关闭以缩短处理时间。 -android 指定已处理的类文件针对Android平台。...然后ProGuard确保一些功能与Android兼容。 例如,如果您正在处理Android应用程序,则应该指定此选项。 一般规则 -verbose 指定在处理期间写出更多信息。...如果指定了一个方法,则ProGuard仅将该方法作为入口点进行保存。其代码可能仍会进行优化和调整。 类规范 类规范是类和类成员(字段和方法)的模板。...ProGuard支持可能由编译器设置的其他修饰符synthetic,bridge和varargs。
文章目录 一、Proguard 默认混淆结果 二、-keepclassmembers 混淆效果 二、-keepclasseswithmembernames 混淆效果 更多 ProGuard 混淆配置参考...: https://www.guardsquare.com/en/products/proguard/manual/usage 一、Proguard 默认混淆结果 ---- ProGuard 的默认混淆结果
ProGuard简介 ProGuard是2002年由比利时程序员Eric Lafortune发布的一款优秀的开源代码优化、混淆工具,适用于Java和Android应用,目标是让程序更小,运行更快,在Java...背景 在我们实施插件化、热补丁修复时,为了让插件、补丁和原来的宿主兼容,必须依赖ProGuard的applymapping功能的进行增量混淆,但在使用ProGuard的applymapping时会遇到部分方法混淆错乱的问题...前者包含我们编写代码、第三方的SDK,而后者通常是系统库,不需要编译到程序中,比如引用的android.jar、rt.jar。...ProGuard代码优化可以解决这些问题,移除没有使用到的代码、优化指令、逻辑,以及方法内部的局部变量分配和内联,让程序运行的更快、占用磁盘、内存更低。...初始化 ProGuard初始化会读取我们配置的proguard-rule.txt和各种输入类以及依赖的类库,输入的类被ClassPool统一管理,我们的rule.txt配置了keep类的条件,ProGuard
插件,使用的proguard-base版本是5.3.3 这里使用java8,因此libs那里照常配置rt.jar,jce.jar,如果是java9的话,则需要换成相应的模块。...另外指定proguard的阶段为package,springboot打包在repackage阶段 proguard.cfg 主要的重点在这个proguard.cfg配置 -target 1.8 ##指定...配置仅仅是根据自身工程的情况来量身定做的,不是通用的,具体的场景还需要根据具体情况对proguard参数进行调整。...doc ProGuard manual Tips for using ProGuard with Spring framework Spring bean自定义命名策略 Understanding Spring...@Autowired usage ProGuard 最全混淆规则说明
这里有许多通用和 安卓即时程序专用(AIA 意为 Android Instant Apps)的技术可以减少 APK 大小,你应该都去了解一下,但使用 ProGuard(混淆)来移除未使用的代码对 nstant...当 ProGuard(混淆)集成到 Android 构建中时,新的 com.android.feature Gradle 插件(用于构建 AIA (安卓即时应用程序)模块)根本不存在,并且 ProGuard...它为资源文件和 Android Manifest 中使用的类生成所需的 ProGuard(混淆)规则,但在构建即时应用程序的情况下,它们最终可能会出现在错误的模块中。...更好的方法是在完整的,可安装的应用程序中重新使用 ProGuard(混淆)映射文件,但设置和维护起来很困难。更简单的方法是简单地禁用非基本特征中的混淆。...要为非基本模块禁用混淆处理,请将此规则添加到其ProGuard(混淆)配置中: -dontobfuscate 如果你在基本模块和非基本模块之间有共享配置文件,我建议你创建一个单独的配置文件。
文章目录 一、Proguard 默认混淆结果 二、Proguard 保留类及成员混淆结果 三、Proguard 保留注解以及被注解修饰的类/成员/方法 更多 ProGuard 混淆配置参考 : https...://www.guardsquare.com/en/products/proguard/manual/usage 一、Proguard 默认混淆结果 ---- ProGuard 的默认混淆结果 , 就是没有...除了 MainActivity , 以及 MainActivity 中的 3 个内部类 , IdleHandler , Handler , Thread , 其余 Java 文件都被混淆 ; 二、Proguard...保留类及成员混淆结果 ---- 在 应用 Module 下的 proguard-rules.pro 中进行如下配置 : # 保留 MainActivity 类名 -keep public class...* @param next */ public void handleMessage(Message next) { } } 编译混淆结果 : Handler 的类 和
ProGuard主要做了三件事: 压缩代码 - 它会删除程序中没有用到的类、属性和方法,让程序变小。 优化代码 - 它会优化代码结构,让程序运行更快。...混淆代码 - 它会把类名、属性名和方法名改成难懂的名字,让代码变得很难看懂。.../proguard-maven-plugin/ 实战 proguard.cfg # 指定Java编译目标版本为1.8 -target 1.8 # Proguard配置项:指定不进行代码缩小优化 -dontshrink...配置中保留了所有必要的类和方法。...可以尝试使用Proguard的-keep指令保留这些类。 反射相关错误:如果项目中使用了反射,确保在Proguard配置中保留相关类和方法。
领取专属 10元无门槛券
手把手带您无忧上云