从 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 用户才能执行挂载命令
我有一个 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 用户才能执行挂载命令