我正在Intellij Idea(不使用gradle / maven)中构建Java应用程序,该应用程序使用JCEF(Java Chromium嵌入式框架)。该程序取决于一些本地库和其他jar。目录结构如下所示:
-assets
-blob_storage
-cache
-cert
-rel
-sample-data
debug.log
lastmsg.dat
preferences.json
app.jar
app-ob.jar
所有其他目录都是无关紧要的,但rel
。 rel
包含Jcef运行所需的所有本机dll。 app.jar
是Intellij Idea生成的jar的非混淆版本,app-ob.jar
是使用proguard混淆的同一jar。我现在面临的问题是,如果RuntimeException
不可用或具有以空字符串作为其值的字段,则混淆版本的jar会抛出一个preferences.json
。干净,无混淆的罐子运行没有问题。我的config.pro
文件看起来像这样:
-injars app.jar
-outjars app-ob.jar
-libraryjars C:\Program Files\Java\jre1.8.0_161\lib\rt.jar
-keepattributes SourceFile,Signature,LineNumberTable,Exceptions, *Annotation*
-dontoptimize
-keepdirectories
-keep public class application.MainFrame {
public static void main(java.lang.String[]);
}
我正在使用以下命令运行它:
C:\Users\Devashish\Desktop\proguard6.0.3\bin>proguard @config.pro -dontwarn
其他jar依赖项(例如Gson和Commons-exec)由Intellij打包在jar文件中。我想指出的是,如果没有-dontwarn
,则proguard会发出警告,提示诸如17 References are not found
和Code is inconsistent
之类的东西,但是jar的未混淆版本可以正常工作,所以我只附加了-dontwarn
。有人可以帮我解决吗?还是我需要添加更多信息(在这种情况下,请在评论中让我知道)?