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

时间:2016-09-30 06:58:23

标签: android android-ndk java-native-interface root native-code

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

现在我已经使用JNI& amp; NDK。但是根文件夹中的文件创建失败。 我试图从本地库中创建sdcard中的文件,这很好。

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

1 个答案:

答案 0 :(得分:2)

在最近的Android版本中,在init设置了目录和文件之后,rootfs和system以只读方式挂载。

要在系统分区中创建文件,必须使用写访问权限重新安装它们。因此,您必须以root用户身份调用/ system / bin / mount。

安装系统rw的命令会有所不同,具体取决于/ system / bin / mount toybox或toolbox符号链接

如果你没有使用Runtime.getRuntime()。exec(“su”),你是否在userdebug版本中使用aosp生成的su二进制文件?如果是这样,我相信你必须是shell用户才能使用它。也许切换到更常用的su二进制文件或更新aosp one。

编辑:对于安装系统rw,首先需要确定/ system / bin / mount是否是toybox或工具箱的符号链接,因为它们用于安装系统rw的命令会有所不同

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

for toolbox,

(以uid(0)身份运行)

mount -o remount,rw / system

for toybox,

(以uid(0)身份运行)

mount -o rw,remount -t auto / system

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