Использование install4j с proguard - PullRequest
0 голосов
/ 30 мая 2019

У меня есть приложение Spring Boot, которое я упаковываю в файл .jar.Эта фляга запутывается задачами gradle и библиотекой ProGuard.(Эта часть работает правильно. Я могу осмотреть и запустить флягу.)

Как только запутанный фляга готова, я использую install4j, включаю обфусцированный файл .jar и делайте установщик.После установки, когда я пытаюсь запустить программу, я получаю следующую ошибку:

java.lang.VerifyError: Expecting a stackmap frame at branch target 124 Exception Details:   Location:
    com/bla/test/Main.main([Ljava/lang/String;)V @95: ifeq   Reason:
    Expected stackmap frame at this location.   Bytecode:
    0000000: b800 5212 11b6 0057 120f b600 58b6 0053
    0000010: 4cbb 0022 592b 1202 b700 544d bb00 1f59
    0000020: b700 4d4e bb00 1e59 1208 b700 4b3a 04bb
    0000030: 001e 5912 03b7 004b 3a05 1905 ba00 6400
    0000040: 00b6 004c 2d19 04b6 004e 572d 1905 b600
    0000050: 4e57 2c04 b600 552c 2db6 0056 b800 5199
    0000060: 001d b800 503a 0619 062c b600 4fa7 000f
    0000070: 3a07 b200 3112 01b9 0060 0200 a700 00     Exception Handler Table:
    bci [103, 109] => handler: 112

    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)     at java.base/java.lang.Class.privateGetDeclaredMethods(Unknown Source)  at java.base/java.lang.Class.getDeclaredMethod(Unknown Source)  at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:83)  at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)  at com.install4j.runtime.launcher.WinLauncher.main(WinLauncher.java:25)

Я также пытался получить запутанную версию кода.Для генерации запутанного .jar я использовал следующую конфигурацию в:

-libraryjar 'etc/resources/libs/jackson-dataformat-xml-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-dataformat-yaml-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-core-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-databind-2.9.9.jar'
-libraryjar 'etc/resources/libs/dsl-json-1.9.3.jar'   
-dontnote
-dontwarn
-dontshrink
-dontoptimize
-useuniqueclassmembernames
-dontpreverify
-keepattributes Exceptions,InnerClasses,SourceFile,LineNumberTable,EnclosingMethod,*Annotation*
-keep interface *
-keep public class org.apache.logging.**
-keep public class com.potato.Main {
    public static void main(java.lang.String[]);
}
-overloadaggressively
-optimizationpasses 3
-allowaccessmodification 

Я обеспокоен флагами -dontwarn и -dontpreverify.Они помогли мне пройти процесс создания jar-файла с обфусцированными банками, но я совершенно уверен, что это всего лишь обходной путь.

Очень сложно отладить этот процесс и выяснить, что происходит.Кто-нибудь может указать мне правильное направление, пытаясь выяснить, что происходит с этой ошибкой?

...