使用ProGuard对mc模组进行混淆时,有许多需要注意的问题。
首先需要准备两个文件,dic.txt
用来储存混淆的字典表,用来做为混淆后的像这样的字符串oo00O0O0
,proguard.pro
用来储存ProGuard的规则来。
为了混淆jar文件,需要新建一个proguard
任务
1 | tasks.register('proguard', ProGuardTask) { |
这里我们使用原来nf的jar任务构建出一个新的模组文件作为输入,经过ProGuard混淆产生新的被混淆的jar文件
注意这里需要使用compileClasspath编译时环境作为jar库,不能使用runtimeClasspath,因为像Lombok,IDEA注解等只有在编译环境存在。
下面来到了最核心的部分,ProGuard规则文件proguard.pro
1 | # 保留规则 |
这里需要注意的是由于Java9以后的模块化,需要按模块导入Java模块。
这里针对使用Lombok生成的代码进行特判,并且保持了用于GSON序列化字段的SerializedName
注解。
这里需要注意的是,由于ProGuard会对字段进行混淆,混淆后与原来字段不符合,会导致gson类初始化失败,这时候必须显示使用@SerializedName
注解标注每个字段,用来确保混淆后仍然可以正确序列化json文件。
在keepattributes
中,保留了注解,内部类等信息,因为mc的主类,事件监听器都是通过注解处理器实现的,所以必须保留这些内容。