教程:利用VSCode在PC上构建原生模组

来自Minecraft基岩版开发Wiki
  • Nmod是一种用来更改Minecraft的工具。具体实现是使用 Cydia Substrate 来Hook掉libminecraftpe.so里的函数。
  • 本教程的目的是获取到编译完成的so文件,如何进行使用参见InnerCore原生模组教程。
  • 你只需要知道一些 C++ 和 JNI 的知识。

准备工作[编辑]

  1. 完备的NDK与MINGW64环境。
  2. 正确配置的VSCode。
  3. 一套hook框架——一般为 Cydia Substrate。

环境配置[编辑]

配置NDK[编辑]

下载NDK[编辑]

首先需要下载一套完整的NDK软件包。这里笔者使用的是r23c版,其余版本请自测,尽量不使用小于r19c版的软件包。然后将软件包解压到本地任意目录,你应该会得到一个类似图中所示的文件夹。

解压NDK

配置NDK环境变量[编辑]

由于笔者使用的是Win11系统,故此处以Win11为例。如果你是Win10系统,这个或许能帮你定位到环境变量页面。

此电脑右键选择属性

在弹出页面选择高级系统设置

继续选择环境变量

在新页面的系统变量中选中Path后双击,或者点击编辑,进入编辑页面。

在弹出的设置界面点击新建,然后填入NDK根目录的路径。笔者的为E:\android-ndk-r23c,具体情况视你解压目录为定。

接下来设置clang编译器的变量路径。笔者的为E:\android-ndk-r23c\toolchains\llvm\prebuilt\windows-x86_64\bin。请以此为例例,在在你的NDK目录下找到编译器路径,并将其按照上一步过程将路径填入,然后依次点击确定按钮即可。至此,你已经完成了NDK的配置。

配置MINGW64[编辑]

下载MINGW64[编辑]

首先需要下载一个完整的MINGW64包。这里笔者推荐的是x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0版,可以兼容32位的电脑。然后将包解压到本地任意目录,你应该会得到一个类似图中所示的文件夹。

配置MINGW64环境变量[编辑]

配置NDK环境变量类似,你需要找出gcc编译器的路径,笔者这里是E:\mingw64\bin,请以此为例例,在在你的MINGW64目录下找到编译器路径, 并将其按照之前的步骤设置好环境变量。

测试[编辑]

如果此前的环境变量你都设置完成并保存退出了,现在请在按住键盘win键的情况下按R键,在弹出窗口输入cmd并点击确认

启动cmd后输入gcc -v并回车,如果有类似图中的输出特别是版本号,就说明MINGW64配置正确。笔者使用的gcc为8.1.0,如果你使用笔者提供的包,应当也如此。如果版本号不同,要么你下错包了,要么你电脑中存在其它包含gcc编译器的环境,如果在后续过程中没有影响,也可无视。

输入clang -v并回车,如果有类似图中的输出,就说明clang编译器配置正确。

输入ndk-build -v并回车,如果有类似图中的输出,就说明NDK配置正确。

配置VSCode[编辑]

当以上环境全部测试完成后,就可以准备VSCode了。首先需要下载安装本体,打开后默认为英文界面,请按照图中所示下载中文插件。 重启后再安装C/C++ Extension Pack,之后再重启一次就完成插件安装了。

创建并配置项目[编辑]

这里以armeabi-v7a架构为例子。同时我也提供了一个模板作为轮子,可以直接套用。

将模板解压到本地,笔者的路径为E:\example,然后通过VSCode打开example这个根目录。 一定要信任作者

jni目录是重点,是NDK用来识别项目的目录,其下有armeabi-v7aheadersincludes三个文件夹。其中armeabi-v7a用于存放MineCraft的动态链接库文件,headers用来存放项目需要用到的头文件,includes用来存放hook框架,即Cydia Substrate的源码。(这些文件夹名称请不要轻易改动) .vscodeVSCode的配置文件夹,不能缺失和乱改(除非你知道自己在干什么)。不过由于模板换了环境,其中配置还是需要修改一下的。点开main.cpp后,在右下角有个Android标志,点击它(有时可能点不了,那是正常大病,点几下编写区,再回去点就是了),进行编辑配置 如果之前的所有步骤正常,此处的编译器路径应当会自动识别,点击小三角后在下弹框中选g++即可。下一个包含路径是重点,默认路径都是笔者电脑上的头文件路径。请以此为例,根据你电脑上MinGWNDK的安装情况,找到例子中给的各个目录,并进行替换。其中${workspaceFolder}\jni是项目根目录,请勿修改。 jni目录下的的两个mk文件是给NDK读取的,笔者才疏学浅不在此处赘述了(希望有能之人在此补充)。笔者在文件内略加注释,如非项目环境和结构巨变,文件内容基本不用修改。

生成so[编辑]

经过刚才对项目的配置,此时已经可以准备生成动态链接库了。在主页点击上方终端,再点击运行任务

其中的ndk编译是笔者预先配置好的任务,使用它不出意外就可以编译了。

正常编译结束后左侧会多出两个文件夹(libsobj),其中我们只要libs下的libexample.so,其余不要。(由于在Android.mk中,LOCAL_MODULE的名称为example,所以此处为libexample.so)