我从 apt 工具页面上读到可以创建 AnnotationProcessors 到 generate new derived files (source files, class files, deployment descriptors, etc.) .我正在寻找这样做的例子。
我的需要是在编译时对所有带注释的字符串进行编码,以便读取类文件不允许读取静态字符串:
基本代码:
String message = (@Obfuscated "a string that should not be readable in class file");
应该改写为:
String message = new ObfuscatedString(new long[] {0x86DD4DBB5166C13DL, 0x4C79B1CDC313AE09L, 0x1A353051DAF6463BL}).toString();
基于静态ObfuscatedString.obfuscate(String)
method of the TrueLicense framework ,处理器可以生成代码来替换带注释的字符串。实际上,此方法会生成字符串“new ObfuscatedString([numeric_code]).toString()”。
在运行时,ObfuscatedString 的 toString() 方法能够返回以数字代码编码的字符串。
知道如何编写 AnnotationProcessor 的 process() 方法来编辑注释代码吗?
提前致谢
最佳答案
你可以
String message = Obfuscated.decode("a string that should not be readable in class file");
它可以正常编译,但是在编译之后你有一个检查字节码的工具,例如使用 ObjectWeb 的 ASM,更改字符串文字,使其看起来像
String message = Obfuscated.decode("\u86DD\u4DBB\u5166\uC13D\u4C79\uB1CD\uC313\uAE09\u1A35\u3051\uDAF6\u463B");
为了更容易识别需要更改的字符串,您可以为它们添加一个前缀,并且您可以确保在代码被混淆后这个前缀确实出现。
String s = "Obfuscate: a string that should not be readable in class file";
// later
String message = Obfuscated.decode(s);
关于java - 如何在最终编译前使用java注解修改源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547753/