混淆(Proguard)用法 最近项目中遇到一些混淆相关的问题,由于之前对proguard了解不多,所以每次都是面向Stackoverflow的编程。...首先不清楚别人的答案是不是一定符合自己的需求;其次,再遇到同类问题还是得抓瞎。于是下决心看了一下proguard的官方文档。很长,但是很详细,在这里整理一下笔记,分享给大家。...如果有Android SDK的同学可以在{ANDROID_SDK_ROOT}/tools/proguard/lib/目录下找到proguard.jar这个jar包。...如果出现问题,就不要用这个配置了。...它放在{android_sdk_home}/tools/proguard/proguard-android.txt文件中,其它的可以参考的例子在{android_sdk_home}/tools/proguard
文章目录 一、Proguard 简介 二、Proguard 相关网址 三、Proguard 混淆配置 一、Proguard 简介 ---- Android 开发中 Proguard 主要作用是对 Java...proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }...} } 上述 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工具进行构建,我们只需要在工程应用目录的...build.gradle文件中设置minifyEnabled为true,然后可以到proguard-rules.pro文件中加入我们的混淆规则即可。...大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写的混淆文件,proguard-android.txt...除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它包括资源混淆,字符串加密,类加密和dex文件分割等。...因为这个方法需要和native方法保持一致; -keepclasseswithmembernamesclass*{# 保持native方法不被混淆 native ;} 2,反射用到的类不混淆(否则反射可能出现问题
文章目录 一、Proguard 配置简介 二、Proguard 完整注释 一、Proguard 配置简介 ---- 更多 ProGuard 混淆配置参考 : https://www.guardsquare.com.../en/products/proguard/manual/usage 1 ....-keepclasseswithmembers class * { @android.support.annotation.Keep (...); } 二、Proguard 完整注释...# 如果想要启用优化 , 不能只在 ProGuard 项目配置中将优化标志设为 true ; # 相反还要在 build.gradle 中指向 "proguard-android-optimize.txt...-dontnote com.google.android.vending.licensing.ILicensingService # 不混淆 Native 函数 # http://proguard.sourceforge.net
介绍 之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...java -jar proguard.jar @myconfig.pro Filter 每一个类、属性、方法都会有一个全名,例如java.lang.String。...默认ProGuard会读取public以及non-public的类。然而,non-public的类通常没有关联的。可以忽略他们,提升ProGuard速度,而且也不会影响output。...如果因为这个option无法找到那个class的话 ,ProGuard会打印出来Warning的。...(android.content.Context, android.util.AttributeSet); public (android.content.Context
ProGuard ProGuard只读取jars,wars,zips,ears等文件格式的文件。然后对它们进行shrinks,optimizes,obfuscates,preverifies。...会保持入口函数原有的名字来保证这些函数仍然可以呗访问 Preverification:这一步是唯一一步不需要知道入口的 反射(Reflection) 反射和自检(introspection)是代码自动处理中特殊的问题...使用(Usages) 如果想要执行ProGuard,只需: java -jar proguard.jar options ......你可以在ProGuard安装的lib目录下找到proguard的Jar包。或者,把bin目录包含到命令行脚本中去。...参考资料 Proguard官方文档
背景 随着业务的快速发展,Release构建速度问题不断凸显,从2020年底构建50min到如今接近1h30min的构建时长,其中Proguard阶段耗时占用了接近40%, 时刻影响着工作效率。...然而我们另辟蹊径,自研一套Inc-Proguard方案,解决了无法增量Proguard问题,实现将耗时降低到分钟级别。 问题出在哪?...目前Android微信采用模块化的Gradle构建方式,也是业界普遍采用的一种方式。...,也不允许您修改优化的行为,比如-optimizations 和 -optimizationpasses,这种黑盒的行为往往一旦出现了问题,高昂的维护成本也不容忽视;第三章节我们将进一步解释采用Proguard...10分钟左右,由于两者优化目的不同,R8也包括的Dalvik字节码方面的内容,后续有可能增加耗时,其他原因上述也提到; Android微信针对dex的部分有自己的优化工作,主要目的是减少dex数量,对Tinker
不幸的是,ProGuard 可能会发现一些引用的类缺失,并给予告警,导致您的构建失败。 修复这个问题的关键是仔细观察构建时输出的消息,理解这些警告的内容并定位他们。...在某些情况下,ProGuard 的警告确实有助于您发现闪退的罪魁祸首和关于您配置上的其他问题。...为了阻止这样的代码被移除或混淆,您应当在 ProGuard 配置中指定额外 keep 规则。这取决于作为应用开发者的你,需要去发现哪些部分代码有问题并提供必要的规则。...否则太难去定位问题了,因为名字都混淆过了。 ? 上传 APK 对应的 ProGuard 映射文件至 Google Play 控制台,从而获得混淆前的堆栈信息。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版的 SDK Tools 和 Android Gradle 插件版本2.2.0+上,可以在构建时从
sudio为例: android工程中混淆配置文件:proguard-rules.pro (默认文件名) 混淆开关: 在 build.gradle buildTypes { release {...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...每次发布都要保留它方便该版本出现问题时调出日志进行排查,它可以根据版本号或是发布时间命名来保存或是放进代码版本控制中。 2. dump.txt 描述apk内所有class文件的内部结构。...在线说明手册 位于sdk中的目录: sdk/tools/proguard Android 混淆代码总结 Android 代码混淆 选项说明 使用proguard混淆android代码
ProGuard技术的功能概括为以下4项: 1.压缩(shrinks) :检查并移除代码中无用的类,字段,方法,属性。 2.优化(optimizes):对字节码进行优化,移除无用的指令。...详细介绍 (1) ProGuard 配置 -include{filename}:从给定的文件中读取配置参数。...不需要预校验preverify, proguard的4个步骤之一, 去掉这一步可加快混淆速度 -dontpreverify # 有了verbose这句话,混淆后就会生成映射文件 -verbose #...# 针对第三方jar包的解决方案 # 一般而言,这些SDK都是经过ProGuard混淆了的。 # 而我们所要做的,是避免这些SDK的类和方法在我们的App中被混淆。...ProGuard代码混淆详细攻略 - CSDN博客 https://blog.csdn.net/shensky711/article/details/52770993 用ant实现自动打包android
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解。...根据ProGuard的具体使用环境,我分在Eclipse工具和android源码两种编译环境浅谈ProGuard的使用方法。...=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android...都变成了简单的a、b、c、d等毫无含义的字母,这样就达到了混淆的目的: 但在实际使用过程中,我们会发现当前apk中的有些方法和类,是要供外部使用的,而此时混淆了名称,外部调用就会报错了,那么怎么解决这个问题...中的有些方法和类,是要供外部使用的,而此时混淆了名称,外部调用就会报错了,那么怎么解决这个问题?
在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
在压缩阶段,Proguard从这些入口点开始递归确定哪些类或类成员要被使用,其余的都会被丢弃。 在优化阶段,ProGuard进一步优化代码。...只有在最终对Android时,它才不是必需的,因此您可以将其关闭以缩短处理时间。 -android 指定已处理的类文件针对Android平台。...然后ProGuard确保一些功能与Android兼容。 例如,如果您正在处理Android应用程序,则应该指定此选项。 一般规则 -verbose 指定在处理期间写出更多信息。...可选的过滤器是一个正则表达式; ProGuard不打印有关匹配名称的类的注释。 -dontwarn [class_filter] 指定不警告有关未解决的引用和其他重要问题。...-ignorewarnings 指定打印任何关于未解决的引用和其他重要问题的警告,但在任何情况下都继续处理,忽略警告。 忽略警告可能是危险的。
文章目录 一、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时会遇到部分方法混淆错乱的问题...ProGuard文档对于这个问题没有给出具体的原因和可靠的解决方案,在-applymapping一节提到如果代码发生结构性变化可能会输出上面的警告,建议使用-useuniqueclassmembernames...为了解决这个问题,我们决定探究一下ProGuard源码来看下为什么会出现这个问题,如何修复这个问题? 从源码中寻找答案 先看一下ProGuard怎么表示一个方法: ?...ProGuard代码优化可以解决这些问题,移除没有使用到的代码、优化指令、逻辑,以及方法内部的局部变量分配和内联,让程序运行的更快、占用磁盘、内存更低。
另外指定proguard的阶段为package,springboot打包在repackage阶段 proguard.cfg 主要的重点在这个proguard.cfg配置 -target 1.8 ##指定...org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [app.jar:0.0.1-SNAPSHOT] 更换bean命名策略 庆幸的是,我们可以通过改变spring的bean的命名策略来解决这个问题...配置仅仅是根据自身工程的情况来量身定做的,不是通用的,具体的场景还需要根据具体情况对proguard参数进行调整。...doc ProGuard manual Tips for using ProGuard with Spring framework Spring bean自定义命名策略 Understanding Spring...@Autowired usage ProGuard 最全混淆规则说明
当 ProGuard(混淆)集成到 Android 构建中时,新的 com.android.feature Gradle 插件(用于构建 AIA (安卓即时应用程序)模块)根本不存在,并且 ProGuard...问题剖析 - 两种不同的构建方式 在一个典型的场景中,在模块化应用程序并使用新的 Gradle 插件后,您的项目结构将如下所示: ? 一个典型的多功能安装 + 即时应用程序项目。...现在我们明白了为什么 ProGuard(混淆)会失败了,是时候解决这个问题了:确保我们为项目配置添加必要的保留规则,以防止在不同模块(在一个模块中定义,在另一个中使用)之间的类被移除或混淆。...要解决这个问题,首先要启用 ProGuard(混淆)来开发即时应用程序(例如使用刚刚在前面步骤中设置的构建方式)。...(混淆)问题而崩溃。
文章目录 一、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...保留注解以及被注解修饰的类/成员/方法 ---- 创建注解 : package kim.hsl.handler; public @interface Keep { } ProGuard 中配置 保留该注解
Pre Maven - 代码混淆proguard-maven-plugin vs 代码加密classfinal 概述 ProGuard是一个Java代码混淆工具,它可以让你的Java程序变得更小、更快,...所以ProGuard只是增加了反编译的难度,并不能完全防止代码被反编译。 总之,ProGuard是一个很好用的Java代码混淆工具,可以保护你的代码,让你的程序变小变快。.../proguard-maven-plugin/ 实战 proguard.cfg # 指定Java编译目标版本为1.8 -target 1.8 # Proguard配置项:指定不进行代码缩小优化 -dontshrink... 打包 混淆包 常见问题和解决方法...可以尝试使用Proguard的-keep指令保留这些类。 反射相关错误:如果项目中使用了反射,确保在Proguard配置中保留相关类和方法。
领取专属 10元无门槛券
手把手带您无忧上云