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

六眼飞鱼酱① 提交于 2019-12-13 15:27:08

问题


I have an NATIVE LIBRARY which will try to create files in the /system, /dev folders in an android device (using open(), fopen() etc).

Now i have integrated the library with an android application using JNI & NDK. But the creation of the files in the root folders are failing. I have tried to create a file in the sdcard from the native library and this works fine.

Neither I want to move the file opening code to Android code (Java code) nor I want to create the files in the sdcard. I have clear requirements to create the files in root folder itself.


回答1:


In recent android versions, rootfs and system are mounted read-only after init has set up the directories and files.

In order to create a file in the system partition you must remount them with write access. So you will have to call on /system/bin/mount as root user.

The command for mounting system rw is different depending on if /system/bin/mount a toybox or toolbox symlink

If you're failing to get su in with Runtime.getRuntime().exec("su"), are you using the su binary produced by aosp in userdebug builds? If so I believe you would have to be shell user in order to use it. Maybe switch to a more commonly available su binary or update the aosp one.

EDIT: for mounting system rw, you first need to determine if /system/bin/mount is a symlink to toybox or to toolbox, because the command they use for mounting system rw will be different

ls -l, or readlink should be able to easily answer that.

for toolbox,

(running as uid(0))

mount -o remount,rw /system

for toybox,

(running as uid(0))

mount -o rw,remount -t auto /system

In Java the subprocess must request su first as only root user can execute the mount command



来源:https://stackoverflow.com/questions/39785497/accessing-root-files-system-dev-from-a-native-library-in-android-applicatio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!