我有一个NATIVE LIBRARY,它将尝试在android设备的/ system,/ dev文件夹中创建文件(使用open(),fopen()等)。
现在我已经使用JNI& amp; NDK。但是根文件夹中的文件创建失败。 我试图从本地库中创建sdcard中的文件,这很好。
我既不想将文件打开代码移动到Android代码(Java代码),也不想在SD卡中创建文件。我有明确的要求在根文件夹本身创建文件。
答案 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命令