
ProGuard
柳鲲鹏
建立了编程学(编程基本功、平台化编程)、六石管理学等几个流派。
每涉及一个领域,都是顶级砖家。在这些领域中,如果遇到问题,最后肯定是搜索到本博客。
展开
-
全网首发:ProGuard如何混淆多个包
已知Proguard可以做到:多个输入包。使用injars可以做到。 只产生一个输出包。 有时我们需要,多个包混淆后依然是多个包。怎么办?解析mapping文件,建立源文件名与混淆名的对应关系。 解压输出包到目录A。 解压一个输入包到目录B。 根据对应关系:把输出目录A中的文件复制到B中(同时要建立目录);删除源文件名;清理空目录。 重新打包目录B。 复制所有输入包。 有人会问,为什么要解压输入包呢?因为输入包中有很多非class文件,这些文件的目录是不会调整的,这样最省事。原创 2021-09-27 07:56:20 · 427 阅读 · 0 评论 -
全网首发:Proguard加密后的getResource()问题
最近使用Proguard之后,同事跟吾说有问题,代码是:getClass().getResource("/sounds"); 加密前,加密后的输出:file:/C:/test.jar!/soundsnull 同事反编译之后,代码也确实是对的。这真是奇怪了。吾当时就说,我们这么多图标都能正确加载,怎么到了汝这里就错了?于是吾看了其他代码,改进了代码:getClass().getResource("/sounds/ok.wav");...原创 2021-09-18 08:07:10 · 339 阅读 · 0 评论 -
转载:ProGuard 混淆规则说明
转载内容https://www.jianshu.com/p/b471db6a01afhttps://www.jianshu.com/p/86ee6ef970efInput/Output Options 输入输出选项-include filename递归引入目录的配置文件-basedirectory directoryname-injars class_path指定应用程序要处理的jars包(或者wars、ears、zip、或者目录结构),它们里面的class文件会被处理并被写入到输出原创 2021-09-03 09:21:39 · 803 阅读 · 2 评论 -
ProGuard:保留包名,混淆类
保留包名,混淆类?这个有什么用?用处就是想混淆后,做分包处理。怎么办?也简单:-keeppackagenames com.ts.api原创 2021-09-03 09:20:10 · 1665 阅读 · 0 评论 -
Error: A JNI error has occurred, please check your installation and try again
今天加了一下优化选项,测试ProGuard。然后出现了错误。一想,同事刚加了个几个包,是不是因为这个?复制过来之后,依然出错:C:\Program Files\Taishan\Office\bin>..\jdk\bin\java -jar Office.jarError: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.Ve原创 2021-09-01 09:29:21 · 290 阅读 · 0 评论 -
ProGuard的各种参数说明
转自https://www.jianshu.com/p/d768f6d1d93b,免得以后找不到,所以复制在此。proguard分为4个步骤:压缩(shrink) 移除未使用的类、方法、字段等; 优化(optimize) 优化字节码、简化代码等操作; 混淆(obfuscate) 使用简短的、无意义的名称重全名类名、方法名、字段等; 预校验(preverify) 为class添加预校验信息。一、4个步骤中的常量配置1. 压缩(shrink)-dontshrink声明不进行压缩原创 2021-08-31 17:31:18 · 3297 阅读 · 0 评论 -
ProGuard:类混淆,类的指定函数保留
比如吾有类A,要求A类混淆,其中的函数f()不混淆:-keepclassmembers class A { public static void f();} 有人奇怪了,有这种需要?有。参考:https://quantum6.blog.csdn.net/article/details/120021237原创 2021-08-31 16:53:21 · 713 阅读 · 0 评论 -
全网首发:ScrollBarUI混淆后效果错误的分析
之前就遇到过问题,ScrollBar报错。这次是代码混淆后颜色不对,心里这个奇怪啊。刚开始以为是配置文件目录错了,于是进行了大范围的混淆屏蔽,最后定位到一个继承了BasicScrollBarUI的类。 那么这个类什么地方出问题了?先检查了重载,清理了一部分代码,还是有问题。 一看类不大,干脆所有函数不混淆。这下正确了。 逐步减少函数屏蔽,最后发现是这个函数的影响:public static javax.swing.plaf.ComponentUI createUI(javax.swin原创 2021-08-31 16:41:07 · 533 阅读 · 0 评论 -
ProGuard混淆时保留注释(@类内容)
吾一直以为注释是没用的,结果同事说出问题了。那就保留吧:# 保留 Annotation-keepattributes *Annotation*原创 2021-08-31 14:33:54 · 979 阅读 · 0 评论 -
ProGuard在windows上一定要加dontusemixedcaseclassnames
今天测试的时候,解压再压缩,大小就变小了。一直没有明白。后来试图进行处理前后目录对比时,发现提示文件覆盖。这才想起WINDOWS不区分大小写。加上这个参数就解决了。原创 2021-08-31 14:11:30 · 595 阅读 · 0 评论 -
全网首发:ProGuard保持一个类名函数名需要加public
以前的写法是:-keepclasseswithmembers class Main { public static void main(String[]);}-keep class tssdk.** { *; } 现在必须写成:-keepclasseswithmembers public class Main { public static void main(String[]);}-keep public class tssdk.** { *; }原创 2021-08-30 15:47:02 · 695 阅读 · 0 评论 -
dontshrink解决ProGuard错误:java.lang.StackOverflowError
开始以为是内存问题,后来搜索了一番,说是包是独立,不被任何人调用,所以不能使用shrink。吾在配置文件中加上:-dontshrink原创 2021-08-30 14:44:51 · 590 阅读 · 0 评论 -
You have to specify ‘-keep‘ options for the shrinking step
查了一下,说一定要有一个keep句子。加一个:-keep public class * { public protected *;}原创 2021-08-30 14:30:52 · 463 阅读 · 0 评论