0%

编译自己的Riru模块

概述

Riru + EdXposed是目前Android P及以上的一种Xposed解决方案。
Riru通过替换libmemtrack.so(会被Zygote加载的一个共享库)从而实现Zygote注入。
本文记录了笔者编译Riru模块的过程。

配置

电脑:安卓NDK
手机:Magisk 19.3,Riru-Core

步骤

克隆文件到本地

1
git clone https://github.com/RikkaApps/Riru

重命名模块

修改riru-module-template/jni/main/Android.mk中的LOCAL_MODULE,把template替换成自己的模块名
打开riru-module-template/build.gradle,定位到def moduleID = ,修改为自己的模块名
def moduleName = 后的内容也可以修改

编写测试代码

打开riru-module-template/jni/main/main.cpp
首先导入头文件,并定义宏

1
2
3
4
5
6
7
#include <android/log.h>
#define LOGTAG "XHook_Native"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOGTAG , __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOGTAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , LOGTAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , LOGTAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , LOGTAG, __VA_ARGS__)

nativeForkAndSpecializePre中加一句log

1
LOGD("nativeForkAndSpecializePre Success");

修改bulid.gradle文件

在Windows下,文件路径使用的是\,而gradle只认/,所以需要替换ndk-build的参数
定位到buildNativeRelease,在"NDK_LIBS_OUT=$libPathRelease"后加上.replace("\\", "/")
最终变成:

1
2
3
4
commandLine 'cmd', '/c', 'ndk-build.cmd',
'-j8',
"NDK_LIBS_OUT=$libPathRelease".replace("\\", "/"),
"NDK_OUT=$buildDir/ndkBuild/release/obj".replace("\\", "/")

PS:需要事先添加NDK到环境变量中,也可在此处手动指定NDK路径

替换magisk module模板

修改template_override下文件,使用EDXposed的模板替换(.prop文件不替换)

编译

在模块文件夹下进行编译

直接编译报错,需要在bulid.gradle文件apply plugin: 'com.android.library'后添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
}
}

allprojects {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/rikkaw/Libraries' }
}
}

android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 22
targetSdkVersion 29

externalNativeBuild {
ndkBuild {
abiFilters 'arm64-v8a', 'armeabi-v7a'
arguments "NDK_PROJECT_PATH=jni/"
}
}
}
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
}

其中gradle版本,android SDK版本可参考已有项目进行修改
然后执行以下命令编译并打包成Magisk模块(位于release文件夹下)

1
gradlew.bat assembleMagiskRelease

在项目文件夹下进行编译(未测试)

1
gradlew.bat :riru-your-module:assembleMagiskRelease

riru-your-module替换成自己模块名

刷入测试

如果出现问题,可使用adb shellsu命令或进入recovery模式,进入/data/adb/modules文件夹删除模块并重启

参考

使用Riru修改手游
Android Studio导入工程报错 Plugin with id ‘com.android.application’ not found