本文主要研究一下如何使用proguard混淆java9代码

maven

com.github.wvengen

proguard-maven-plugin

package

proguard

6.0.1

${project.build.finalName}.jar

${project.build.finalName}.jar

!META-INF/maven/**,!module-info.class

true

${project.basedir}/proguard.cfg

${java.home}/jmods/java.base.jmod(!**.jar;!module-info.class)

net.sf.proguard

proguard-base

6.0.1

runtime

这里使用6.0.1版本的proguard-base

proguard.cfg

-target 9

-dontshrink

-dontoptimize

-useuniqueclassmembernames

-adaptclassstrings

-dontusemixedcaseclassnames

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keepclasseswithmembers public class * { public static void main(java.lang.String[]);}

这里target要指定为9版本

问题

duplicate class definitions

[proguard] Warning: class [META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class] unexpectedly contains class [org.apache.logging.log4j.util.ProcessIdUtil]

[proguard] Reading library jar [/Users/demo/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.10.0/log4j-to-slf4j-2.10.0.jar]

[proguard] Reading library jar [/Users/demo/.m2/repository/org/apache/logging/log4j/log4j-api/2.10.0/log4j-api-2.10.0.jar]

[proguard] Note: duplicate definition of library class [org.apache.logging.log4j.util.ProcessIdUtil]

[proguard] Note: duplicate definition of library class [org.apache.logging.log4j.util.StackLocator]

[proguard] Reading library jar [/Users/demo/.m2/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar]

[proguard] Reading library jar [/Users/demo/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar]

[proguard] Warning: class [META-INF/versions/9/org/apache/logging/log4j/util/StackLocator.class] unexpectedly contains class [org.apache.logging.log4j.util.StackLocator]

[proguard] Note: there were 2 duplicate class definitions.

[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)

[proguard] Warning: there were 2 classes in incorrectly named files.

[proguard] You should make sure all file names correspond to their class names.

[proguard] The directory hierarchies must correspond to the package hierarchies.

[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#unexpectedclass)

[proguard] If you don't mind the mentioned classes not being written out,

[proguard] you could try your luck using the '-ignorewarnings' option.

[proguard] Error: Please correct the above warnings first.

如果没有使用到log4j的话,可以在progurard.cfg文件中配置dontwarn忽略

can't find referenced class

[proguard] Warning: cn.example.Demo: can't find referenced class java.io.ByteArrayOutputStream

[proguard] Warning: there were 858 unresolved references to classes or interfaces.

[proguard] You may need to add missing library jars or update their versions.

[proguard] If your code works fine without the missing classes, you can suppress

[proguard] the warnings with '-dontwarn' options.

[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

[proguard] Warning: there were 1 unresolved references to library class members.

[proguard] You probably need to update the library versions.

[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)

[proguard] Error: Please correct the above warnings first.

这种多半是没有配置好libraryjars的问题,比如这里就是没有配置java.base.jmod的问题。如果还依赖有其他jmod,可以根据具体日志修改配置。

Can't read java.base.jmod

[proguard] Reading library directory [/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods/java.base.jmod(!**.jar;!module-info.class)]

[proguard] Error: Can't read [/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods/java.base.jmod(!**.jar;!module-info.class)] (No such file or directory: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods/java.base.jmod(!**.jar;!module-info.class))

这个是在maven的pom文件配置lib引起的

${java.home}/jmods/java.base.jmod(!**.jar;!module-info.class)

可能是该plugin的问题,将其配置移到proguard.cfg就可以

-libraryjars /jmods/java.base.jmod(!.jar;!module-info.class)

小结

这里的例子仅仅还是jdk是模块化的,但是工程代码还没有模块化。等所有依赖都模块化了,可以重新试验一下。

doc

java proguard_使用proguard混淆java9代码相关推荐

  1. java proguard 使用_使用proguard混淆java9代码

    序 本文主要研究一下如何使用proguard混淆java9代码 maven com.github.wvengen proguard-maven-plugin package proguard 6.0. ...

  2. Android逆向笔记-Proguard混淆Android代码以及去打印日志信息

    本笔记只记录其现象和功能,不记录具体怎么去用他. 这个Proguard全称应该是project guard,用来混淆Android代码的.如下未使用Proguard的类: 使用Proguard后: 这 ...

  3. 从异常堆栈中还原 ProGuard 混淆过的代码

    在Android开发中我们经常会用到代码混淆, 但是如果这时候我们的app出现了崩溃, 返回的调用栈就比较麻烦, 不知道到底哪里有问题, 如下 at android.view.LayoutInflat ...

  4. java源代码加密+使用proguard混淆java web项目代码+自定义Classloader

    如何保护我们的源代码,实际上,应该有几种方法可以使用:1.使用代码混淆器 2.重载应用服务器的classloader 使用代码混淆器proguard进行代码混淆 1.首先下载proGuard.zip到 ...

  5. ProGuard混淆Java项目的核心代码

    开发需求 众所周知,class文件可以进行反编译从而泄露核心代码,为了保护知识产权,需要对代码进行混淆再进行打包.现阶段采用proguard去做一个基本的混淆,使代码的可读性降低. 操作步骤 [模块目 ...

  6. proguard java 教程,[Gradle中文教程系列]-跟我学Gradle-使用proguard混淆你的spring boot应用...

    使用proguard混淆你的spring boot应用 Proguard介绍 安卓开发的同学想必对Proguard都是十分熟悉的,由于java的反编译实在是太容易,使用它可以对java源码进行混淆处理 ...

  7. Proguard混淆代码(1)

    [意义]混淆代码,可以加大别人反编译的难度,从而最大化的保护自己的代码安全. [场景]我写了一个发短信的程序,回调给游戏一个发短信是否成功的参数,如果成功,游戏就给用户加道具.本意:只想暴露给游戏 d ...

  8. 安卓与“Proguard”——安卓的代码混淆

    什么是代码混淆 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义.被混淆过的程序代码,仍然遵照 ...

  9. 一步步教你使用Proguard混淆Java源代码

    一步步教你使用Proguard混淆Java源代码 java代码很容易被反编译,以下使用proguard来保护我们的代码 proguard选项很多,容易迷糊,现在就把我的配置写下来(实际使用中),以供参 ...

最新文章

  1. 【单片机】以输出方波为例的 定时器使用
  2. 睿云智合(Wise2C)谈论docker
  3. UART接口与COM口的区别
  4. JDK动态代理和CGLIB代理的区别
  5. python和java对比并发_Python并发编程之从性能角度来初探并发编程(一)
  6. mysql myisam存储引擎_MySQL浅谈MyISAM存储引擎
  7. 与 SENet 互补提升,华为提出自注意力新机制:Weight Excitation
  8. android 支付宝沙箱测试环境,Android支付宝沙箱环境使用教程
  9. 项目信息追踪(Log)
  10. str()和repre()的区别
  11. oracle实例名,数据库名,服务名等概念差别与联系
  12. System.Timers.Timer 与 System.Threading.Timer 小间隔
  13. php该怎么下载文件,php怎么实现下载文件?
  14. 智能胖墩机器人_我就是那个叫胖墩儿的送货机器人
  15. 数据结构与算法 php pdf,数据结构与算法之美(完结)云盘分享_IT教程网
  16. h5难做吗_H5系列课程| 做一只涨工资的H5 没有你想得那么难
  17. abaqus的python安装文件在哪_拓展abaqus python 模块
  18. Unity进度条制作
  19. USA gov data from Bitly
  20. 安卓获取string.xml文件里的值

热门文章

  1. java中代码块之静态代码块和非静态代码块
  2. matlab剪切复制文件,matlab文件复制、剪切、删除
  3. android 定时器的例子
  4. 【校内训练2019-04-03】星际穿越
  5. potplay的使用
  6. el-table表格做滚动条样式处理
  7. Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)
  8. 用 Ant Blazor 实现 PropertyGrid
  9. CocosCreator接入GoogleAdMob激励广告
  10. BackgroundWorker 使用范例