2016-09-30 8 views
2

У меня есть НАРОДНАЯ БИБЛИОТЕКА, которая попытается создать файлы в папке/system,/dev в устройстве Android (используя open(), fopen() и т.д).Доступ к корневым файлам (/ system,/dev) из собственной библиотеки в приложении для Android

Теперь я интегрировал библиотеку с приложением для Android, используя JNI & NDK. Но создание файлов в корневых папках не выполняется. Я попытался создать файл в SD-карте из родной библиотеки, и это отлично работает.

Я также не хочу переместить код открытия файла в код Android (код Java), и я не хочу создавать файлы в SD-карте. У меня есть четкие требования к созданию файлов в корневой папке.

+0

Итак, вы выполнили 'su root' или что-то подобное из вашего кода, прежде чем пытаться создать файл? – Michael

+0

@Michael I try Process su = Runtime.getRuntime(). Exec ("su"); Эта команда, но она не сообщила об отказе в разрешении root. Я могу получить супер пользователя через оболочку adb. – Arjun

+0

Права доступа не меняются, если вы перемещаете операции открытия файла на Java. –

ответ

2

В последних версиях андроидов rootfs и система монтируются только для чтения после того, как init настроил каталоги и файлы.

Чтобы создать файл в системном разделе, вы должны перемонтировать их с возможностью записи. Таким образом, вам нужно будет вызвать/system/bin/mount как пользователь root.

Команда для установки системы RW отличается в зависимости от того, если/системы/бен/смонтировать Toybox или панели инструментов симлинк

Если вы не в состоянии получить су в с Runtime.getRuntime(). Exec ("су »), используете ли вы su-файл, созданный aosp в сборках userdebug? Если это так, я верю, что вам придется быть пользователем оболочки, чтобы использовать его. Возможно, переключитесь на более распространенный su-файл или обновите aosp.

EDIT: для монтажа системы RW, в первую очередь необходимо определить, если/система/бен/монтирования является символической ссылкой на Toybox или панели инструментов, так как команда они используют для монтажа системы RW будет отличаться

Ls - l, или readlink, должны иметь возможность легко ответить на это.

для инструментов,

(работает как UID (0))

крепление -О перемонтируйте, RW/Система

для Toybox,

(работает как UID (0))

монтирования -o RW, перемонтировать -t авто/система

В Java subpr ocess должен сначала запросить su, так как только пользователь root может выполнить команду mount

+0

Я не использовал явное устройство. Но, как вы уже упоминали, я построил ОС из источника AOSP. Можете ли вы рассказать, как я могу переключить или обновить su? – Arjun

+0

Я пробовал тот же код в телефоне, который коренится. Сбой команды open() с кодом ошибки 30 (файловая система только для чтения). Раньше было 13 (отклонено EACCESS). У меня есть права на root, и я выполняю следующие команды для монтирования системной папки как RW. «mount -o remount, rw/system»; «chmod 777/system»; – Arjun

+1

Если вы работаете с пользовательской системой, вы можете предоставить необходимые разрешения доступа специально для создаваемого приложения и избежать рисков su. –