从 Android 应用程序中的本机库访问根文件(/system、/dev)

Accessing root files (/system, /dev) from a native library in Android application

我有一个 NATIVE LIBRARY,它将尝试在 android 设备的 /system、/dev 文件夹中创建文件(使用 open()、fopen() 等)。

现在我已经使用 JNI 和 NDK 将库与 android 应用程序集成。但是在根文件夹中创建文件失败。 我尝试从本机库在 sdcard 中创建一个文件,这工作正常。

我既不想将文件打开代码移动到 Android 代码(Java 代码),也不想在 sdcard 中创建文件。我有明确要求在根文件夹中创建文件。

在最近的 android 版本中,rootfs 和系统在 init 设置目录和文件后以只读方式挂载。

为了在系统分区中创建文件,您必须以写访问权限重新挂载它们。所以你必须以 root 用户身份调用 /system/bin/mount。

挂载系统 rw 的命令会有所不同,具体取决于 /system/bin/mount 玩具箱或工具箱符号链接

如果您无法通过 Runtime.getRuntime().exec("su") 获取 su,您是否在 userdebug 构建中使用了 aosp 生成的 su 二进制文件?如果是这样,我相信您必须是 shell 用户才能使用它。也许切换到更常用的 su 二进制文件或更新 aosp 二进制文件。

编辑:对于安装系统 rw,您首先需要确定 /system/bin/mount 是 toybox 还是 to toolbox 的符号链接,因为它们用于安装系统 rw 的命令会不同

ls -l 或 readlink 应该可以很容易地回答这个问题。

工具箱,

(运行 作为 uid(0))

mount -o remount,rw /system

玩具盒,

(运行 作为 uid(0))

mount -o rw,remount -t auto /system

在 Java 中,子进程必须首先请求 su,因为只有 root 用户才能执行挂载命令