Blog of VanDakeHolme


  • 首頁

  • 關於

  • 歸檔

  • 站點地圖

  • 檢索

BioHW

發表於 2020-02-16

VerbFormInJa

發表於 2019-10-01

Type

Type1

End by い

Type2

End by え + 起きます と 見ます etc.

Type3

End by します

Change to て

Type1 To て

き
ー ます + いて
ぎ
ー ます + いで
びとみとに
ー ます + んで
ちとりとい
ー ます + って
し
ー ます + して

Type 2 & 3 To て

ー ます + て

2019-8-9-Update

發表於 2019-08-09

Realtime talk by Tidio

利用Tidio建置了實時通訊

.post-block

設置透明度

MusicLove

發表於 2019-08-09

2019-8-9

spotify:track:5z9fU5QP5z8jJXcP6OmU0w

https://open.spotify.com/track/5z9fU5QP5z8jJXcP6OmU0w?si=r0kw-7R7R5yiSdYKMbjMgg

http://smarturl.it/GlassMansionStreamDL

http://music.163.com/song?id=572165488&userid=401473384

2019-10-01

http://music.163.com/song?id=529659114&userid=401473384

http://music.163.com/song?id=26124988&userid=401473384

利用Android Studio(CMake)构筑Native Mod(Nmod)

發表於 2019-08-07

NMod

Nmod是一种用来Modify Minecraft的工具,从而实现游戏里没有的功能

具体实现是使用Cydia Substrate来Hook掉libminecraftpe.so里的函数

前置知识

你只需要知道一些C++&JNI的知识

准备工作

  1. 你需要安装正确匹配版本的ModdPE与Minecraft PE
  2. 一个载有Android Studio的电脑(我这里使用的是Mac,不过差不多)
  3. 从http://www.cydiasubstrate.com/id/73e45fe5-4525-4de7-ac14-6016652cc1b8/
    下载SubstrateSDK

Step1:Create Project

创建一个新的Android NDK项目,我这里取名叫NMod_Tutorial

※不需要在AndroidManifest.xml里改任何东西,那是BlockLauncher Addon的需要

Step2:Set up CMake

移到CMakeLists.txt

去掉注释会发现里面东西其实很少

CmakeVersion
1
cmake_minimum_required(VERSION 3.4.1)

这句是指定CMake最小版本的需求

CmakeNewLib lang: cmake
1
2
3
4
add_library(
native-lib
SHARED
native-lib.cpp)

这句是将native-lib.cpp编译成一个名叫native-lib的SHARED库(动态链接库)(你当然可以自己命名成别的库),然后可以在Java里LoadLibrary(这里是顺口一提,做NMod时并不需要什么Java代码的使用)

然后等你打包好apk后,ModdPE会根据nmod_manifest文件用你指定的.so(后文会讲)

例如,如果您在构建脚本中指定“native-lib”作为共享库的名称,CMake 将创建一个名称为 libnative-lib.so 的文件。不过,在 Java 代码中加载此库时,请使用您在 CMake 构建脚本中指定的名称:

static {
System.loadLibrary(“native-lib”);
}

@AndroidDevelopershttps://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
1
2
3
target_link_libraries(
native-lib
${log-lib})

这句话是将log库与你的库链接起来

我们的目标是利用Substrate来Hook掉libminecraftpe.so

那么我们得加载libsubstrate.so(位于你下载的SDK中)以及libminecraftpe.so(将你的Minecraft.apk的后缀改成.zip然后解压即可获得)

在/app目录下新增一个libs文件夹

里面建一个armeabi-v7a的文件夹(我们只需要做这个架构的NMnod,因为MinecraftPE本身就是32x的)
然后把上面说到的两个so拖进去

进入CmakeLists.txt,在findLibrary后加入

AddLibraries lang: cmake
1
2
3
4
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的使用方法,具体可以去

@没有博士学位的菜狗blog.csdn.net/bigdog_1027/article/details/79113342
CmakeLinkLib
1
2
3
4
5
target_link_libraries(
native-lib
minecraftpe
substrate
${log-lib})

光有库没用,我们知道还需要头文件的添加

其实我们只需要有Substrate.h就够了,但是为了让编译通过,我们不得不加入mcpe的头文件
在/src文件夹下创建include文件夹,并在CmakeLists.txt findLibrary前加入

CmakeAddInclue lang: camke
1
2
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了

ps. 如果你找不到以上所需的任何一个资源或有疑惑,可以在评论留言,不过也可以加839574598(QQ群),里面有很多大佬,而且他们都很热心帮你解答问题(里面还有NMod模版,可快速开始工程)

2019-8-7-Update

發表於 2019-08-07

AM

看板娘

新增看板娘,Mobile Disable

11:23

新增第二只看板娘,原看板娘保留,并设为300x150,Mobile Enable,新看板娘Mobile Disable

进制相关

發表於 2019-08-06

二进制

定义

逢二进一

特性

x(10) = 000y0000…000(2)<n个零> = 2 ^ n - 1

转换方法

将十进制数拆分成2的n次方的数

e.g. 65 = 64 + 1 = 1000001

位运算

發表於 2019-08-06

&操作符

VariableA & VariableB

当VariableA的某位值与VariableB的值相同时保留,否则舍弃

e.g. 0000011 & 0000010 = 0000010 = 2(10)

|操作符

VariableA | VariableB

当VariableA的某位值等于一或VariableB的值等于一是保留一

e.g. 0001010 | 0000101 = 0001111 = 15(10)

<<操作符

VariableA << VariableB

每一位向左移VariableB位<10进制先隐式转换成2进制>

e.g. 00100000 << 1= 01000000

对一个数使用<<1时等价于*=2

>>操作符

VariableA >> VariableB

每一位向右移VariableB位

e.g. 00100000 >>1= 00010000

对一个数使用>>1时等价于/=2

^操作符

VariableA ^ VariableB

两个相同的数会变成0,反之是1

e.g. 00011000 ^ 00010000 = 00001000

C++ 豆知识

發表於 2019-08-06

Stated

更新

Language

非零值强制转换为True

波兰表示法(前缀法)

發表於 2019-08-06

定义

将运算式的操作符写在运算对象前

e.g. 3 + 1「中缀」+ 3 1「前缀」

运算时仍会依照平常的运算次序,因而没有歧义产生

同时也不需要括号

e.g. - *a b *c d等价于a * b - c * d

12
Van DakeHolme

Van DakeHolme

A bolg

12 文章
10 標籤
GitHub E-Mail Google Twitter YouTube
© 2020 Van DakeHolme
由 Hexo 強力驅動
|
主題 — NexT.Gemini v5.1.4

本站访客数人次