且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我如何混淆外部GWT开发的Java源代码?

更新时间:2023-12-03 22:36:10

今天没有任何东西可用:


  1. 源代码混淆开始。

  2. 其中一些不是免费的或不是基于Java的。

  3. 源代码(格式化)工具没有足够的可定制性来移除所有的注释,但将GWTJSNI代码放入(GWT将JavaScript代码嵌入到Java中的特殊/ * - {...} - * / /native方法的样式注释中。 li>

最后,我自己写了一段简单的代码,只取出所有的空白,但保留了JSNI代码并保持原样。不会混淆方法变量或其他任何东西,但它现在必须做。


Most obfuscation focuses on bytecode. I have to supply the source code too as that is what a GWT compiler an external developer would use needs to run. Before releasing the source code I need to clean it up a bit:

  • Obfuscate method variable names
  • Obfuscate private method argument names
  • Remove all non-Javadoc comments except for the licence at the top of each file.
  • Remove all Javadoc comments on private methods or protected methods of final classes.
  • Remove certain Javadoc tags such as @author
  • Remove certain other comment tags such as TODO, FIXME, etc.
  • Remove all @see references to private classes
  • Remove all whitespace

Alternatively to the above all comments and all Javadoc could be removed (licence still needed at the top of each file) and I'd generate Javadoc separately.

I have not found a way that I could be sure would work nicely from within a gradle build script executed on multiple platforms. Some very old and no longer maintained solutions may have trouble with Java enhancements such as diamond operators and lambdas.

Are there any recommendations as to how I could do this?

Note that there are many questions like this unanswered here. One of them: GWT Java Obfuscation

Nothing appears to be available for this TODAY:

  1. There are very few tools that work on Java source code obfuscation to begin with.
  2. Some of these are either not free or are not Java based.
  3. Source code (formatting) tools that remain are not customizable enough to remove all the comments but leave the GWT "JSNI" code in (GWT's way of embedding JavaScript code into Java within special /*-{ ... }-*/ style comments of "native" methods.

In the end, I wrote a simple bit of code myself that only takes out all the whitespace but leaves the JSNI code in and untouched. It does not obfuscate method variables or anything else but it will have to do for now.