- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教程:利用Android Studio(CMake)构建原生模组
Nmod是一种用来更改Minecraft的工具。具体实现是使用 Cydia Substrate 来Hook掉libminecraftpe.so
里的函数。
前置知识[edit]
你只需要知道一些 C++ 和 JNI 的知识。
准备工作[edit]
- 你需要安装正确匹配版本的 ModdedPE 与 Minecraft PE
- 一个载有 Android Studio 的电脑
- 从这里下载 SubstrateSDK
第一步:创建项目[edit]
创建一个新的 Android NDK 项目,我这里取名叫NMod_Tutorial
。
※ 不需要在AndroidManifest.xml
里改任何东西,那是 BlockLauncher 插件的需要
第二部:配置 CMake[edit]
移到CMakeLists.txt
。
去掉注释会发现里面东西其实很少。
CmakeVersion
cmake_minimum_required(VERSION 3.4.1)
这句是指定CMake最小版本的需求。
CmakeNewLib lang: cmake
add_library(
native-lib
SHARED
native-lib.cpp)
这句是将native-lib.cpp
编译成一个名叫native-lib
的SHARED库(动态链接库)(你当然可以自己命名成别的库),然后可以在 Java 里LoadLibrary
(顺便,做NMod时并不需要什么Java代码的使用)
然后等你打包好 apk 后,ModdedPE会根据nmod_manifest
文件用你指定的.so
(后文会讲)例如,如果您在构建脚本中指定“native-lib
”作为共享库的名称,CMake 将创建一个名称为libnative-lib.so
的文件。不过,在 Java 代码中加载此库时,请使用您在 CMake 构建脚本中指定的名称:
static {
System.loadLibrary(“native-lib”);
}
@AndroidDevelopers - https://developer.android.com/studio/projects/add-native-code?hl=zh-cn
find_library(
log-lib
log)
CmakeFindLib lang: cmake这句是将liblog-lib.so
添加到log中,以便你使用这个Log库。
CmakeLinkLib lang: cmake
target_link_libraries(
native-lib
${log-lib})
这句话是将log库与你的库链接起来。
我们的目标是利用 Substrate 来Hook掉libminecraftpe.so
。那么我们得加载libsubstrate.so
(位于你下载的SDK中)以及libminecraftpe.s
o(将你的Minecraft.apk
的后缀改成.zip
然后解压即可获得)。在/app
目录下新增一个libs
文件夹。
里面建一个armeabi-v7a
的文件夹(我们只需要做这个架构的NMnod,因为MinecraftPE本身就是32x的),然后把上面说到的两个so拖进去。
进入CmakeLists.txt
,在findLibrary
后加入:
AddLibraries lang: cmake
add_library(substrate SHARED IMPORTED)
set_target_properties(substrate PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libsubstrate.so)
add_library(minecraftpe SHARED IMPORTED)
set_target_properties(minecraftpe PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libminecraftpe.so)
这涉及到Cmake的使用方法,具体可以去:
@没有博士学位的菜狗 - https://blog.csdn.net/bigdog_1027/article/details/79113342
CmakeLinkLib
target_link_libraries(
native-lib
minecraftpe
substrate
${log-lib})
光有库没用,我们知道还需要头文件的添加。其实我们只需要有Substrate.h
就够了,但是为了让编译通过,我们不得不加入mcpe的头文件。在/src文件夹下创建include
文件夹,并在CmakeLists.txt
findLibrary
前加入:
CmakeAddInclue lang: camke
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR})
Last Step[edit]
配置一下build.gradle
。设置ABI filter(只要32x)。再设置一下Cmake文件位置。
然后在写完了NMod后,在/src/main
里建一个assets
文件夹(如果没有的话)。在里面新建一个nmod_manifest.json
来写你的NMod配置文件。
基本要素有:
{
"name" : NMod名称,
"package_name" : 包名,
"author" : 作者,
"native_libs_info":
[
{
"name": 你的.so起的名字,
"use_api": 是否使用api,我们不使用,所以填 "false"
}
],
"version_code": 版本号,
"version_name": 版本名,
"minecraft_version_name" : 支援的MinecraftPE版本,
"description": 描述
}
然后就可以编辑你的cpp档案开始你的MinecraftPE-modify了。
注释和帮助[edit]
如果你找不到以上所需的任何一个资源或有疑惑,可以在讨论页留言,不过也可以前往企鹅群 839574598 ,里面有很多大佬,而且他们都很热心帮你解答问题(里面还有NMod模版,可快速开始工程)。
来源:利用Android Studio(CMake)构筑Native Mod(Nmod) | Blog of VanDakeHolme(存档)