Which order? ProGuard + JWrapper + Launch4J

911 Views Asked by At

I understand that StackOverflow is geared towards answering specific questions and avoiding subjective opinion. I feel that my question(s) have only one correct answer and therefore I’m posting here.

I’ve created a Java desktop app (JavaFX) which I plan to distribute for commercial use. I’ve read that Java code is easily reverse-engineered so it’s critical to obfuscate using something like ProGuard. I’d like to package my app so that users double click a .exe (which they download from my site) and then an installer is run like any standard software does. This appears to be outside the scope of ProGuard, but I’ve found JWrapper and Launch4J which both seem to provide similar functionality. Both claim to wrap jars into Windows native executables, show splash screens, include JRE, but I'm confused where they differ.

Specifically, I need the following:

  • Installation Wizard (namely to place the exe somewhere safe + make shortcut on desktop, and also add the EULA somewhere).
  • Add EULA (End-User License Agreement) which specifies user’s limitations
  • Web updates for the app (JWrapper seems to provide this using URL + build path)
  • Ability to protect the app (somewhat) using licensing (License3j seems promising).

Their features can be found here and here but only JWrapper mentions the ability to perform web updates and mentions desktop shortcuts (which I assume can also write a EULA.txt somewhere).

So, after I have finished writing code, in which order should ProGuard, JWrapper and Launch4j be applied? I’m guessing ProGuard first (to shrink, optimize and obfuscate) and then JWrapper and then Launch4j? Or only 2 of 3?

Feel free to also suggest additional methods, tools, or concepts which I may be missing. Thank you!

1

There are 1 best solutions below

1
T. Neidhart On

This question seems out of scope for Stackoverflow, but to answer it:

  1. apply ProGuard first on your application, keeping the main method of your application
  2. apply either launch4j or jwrapper (up to you to choose) on the jar processed by ProGuard