【问题标题】:Is there a way to use gradle to obfuscate code for minecraft 1.8.9?有没有办法使用 gradle 来混淆 minecraft 1.8.9 的代码?
【发布时间】:2021-02-03 21:02:20
【问题描述】:

我正在编写一个 minecraft mod,当我在 forge 1.8.9 中运行它时,我得到了noSuchMethodError: net.minecraft.client.getMinecraft().fontRendererObj。但是,当我运行另一个模块时,那个模块可以工作。

我的模组反编译后的类文件看起来像

this.renderer = Minecraft.getMinecraft().fontRendererObj;

而另一个看起来像

this.renderer = Minecraft.func_71410_x().field_71466_p;

无论我如何构建我的模组,我的类文件永远不会变成这样。如何让 gradle 混淆代码?

【问题讨论】:

  • 你正在运行什么 Gradle 命令?
  • 我先运行 setupDecompWorkspace 命令,然后运行 ​​build 命令来获取 jar。
  • 您确定您使用的是正确的罐子吗? ./gradlew build 应该已经生成了一个可以使用混淆名称的 jar。

标签: java gradle minecraft minecraft-forge


【解决方案1】:

一种选择是使用 Gradle 来加载 ProGuard 并使用它来混淆您的 JAR。

然后你需要这样的依赖:

buildscript {
     repositories {
        mavenLocal()
        mavenCentral()
     }
     
     dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.1.1'
     }
}

你还需要定义一个任务,类似这样:

task useProGuard (type: proguard.gradle.ProGuardTask) {
    configuration 'proguardcfg.pro'
    injars  jar.archivePath
    outjars "${myDir}/MyJar.jar"
}

如任务所示,创建一个 proguard 配置文件,您可以在其中定义有关 ProGuard 应该做什么以及应该处理哪些类的规则。

此文件中的条目可能如下所示:

#-dontobfuscate
-dontshrink
-dontoptimize
-keep class com.jni.** { *; }
...

注释掉的参数是防止混淆的命令,接下来的两个命令是告诉 ProGuard 不要缩小 JAR 或使用自己的优化,最后一个条目是名为 com.jni 的包中的类的规则,如更改 native 函数的函数签名很危险。


阅读有关 ProGuard 的更多信息:

https://www.guardsquare.com/en/products/proguard/manual/examples

此外,我相信标准的 Android 构建管道也默认使用 ProGuard。

【讨论】:

  • OP 不想混淆他自己的方法。他希望它被重写以与 Minecraft 的混淆方法名称兼容,因此它可以在开发环境之外工作。
  • 他希望它被重写 - “它”到底是什么?
  • 他的 mod jar 引用了 Minecraft 自己的代码中存在的一堆字段和方法。一个是fontRendererObj。但只有下载 mod 开发环境的人才能获得具有该字段名称的 Minecraft 版本。相反,普通玩家拥有一个混淆版本的 Minecraft,其中该字段称为 field_71466_p。他在问如何让他的 mod 的 jar 文件使用混淆的字段名称,所以它适用于普通玩家。通常,./gradlew build 只是为您使用 Minecraft 模组,所以这里的问题是为什么它不适合他。
  • 我明白了。我的解决方案仅适用于混淆他们的 JAR 并定义一个方案,例如使用的方案。但它当然不会做任何映射,如果需要,那么我的世界功能需要与mod一起混淆,否则无法映射。
  • "映射是不可能的" 它不是。这就是每个 Forge 模组的工作原理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2016-01-04
  • 2016-11-16
  • 2021-11-08
相关资源
最近更新 更多