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

2024-03-29

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

现在我已经使用 JNI 和 NDK 将库与 A​​ndroid 应用程序集成。但在根文件夹中创建文件失败。 我尝试从本机库在 SD 卡中创建一个文件,效果很好。

我既不想将文件打开代码移至 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 是否是玩具箱或工具箱的符号链接,因为它们用于安装系统 rw 的命令会有所不同

ls -l 或 readlink 应该能够轻松回答这个问题。

对于工具箱,

(以 uid(0) 身份运行)

mount -o 重新挂载,rw /系统

对于玩具盒来说,

(以 uid(0) 身份运行)

挂载-o rw,重新挂载-t auto /system

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐