- 致编者:请牢记我们的域名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
裡的函式。
前置知識[編輯]
你只需要知道一些 C++ 和 JNI 的知識。
準備工作[編輯]
- 你需要安裝正確匹配版本的 ModdedPE 與 Minecraft PE
- 一個載有 Android Studio 的電腦
- 從這裏下載 SubstrateSDK
第一步:建立專案[編輯]
建立一個新的 Android NDK 專案,我這裏取名叫NMod_Tutorial
。
※ 不需要在AndroidManifest.xml
裡改任何東西,那是 BlockLauncher 外掛的需要
第二部:組態 CMake[編輯]
移到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[編輯]
組態一下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了。
註釋和幫助[編輯]
如果你找不到以上所需的任何一個資源或有疑惑,可以在討論頁留言,不過也可以前往企鵝群 839574598 ,裏面有很多大佬,而且他們都很熱心幫你解答問題(裏面還有NMod模版,可快速開始工程)。
來源:利用Android Studio(CMake)構築Native Mod(Nmod) | Blog of VanDakeHolme(存檔)