2015-06-03 8 views
1

Я пытаюсь создать приложение для Android, которое может получить доступ/dir данных (например) без разбора вывода команды, запущенной на оболочке после выполнения su.root или системные привилегии для Android android

Я имею в виду, что после многозначительного изучения и поиска в коде некоторых корневых поисковиков, что они делают, когда им нужен root perms, выполняется синтаксический анализ вывода команды после выполнения su.

То, что я хочу это делать что-то вроде:

File file = new File("/data"); 
File[] files = file.listFiles();// get the list array of file 
for (int i = 0; i < files.length; i++) { 
    File fileItem = files[i]; 
    System.out.println("FILE NAME: "+fileItem.getName().toString()) { 
} 

Для достижения этой цели я считаю, что процесс подачи заявок должен быть запущен как корень из начала исполнения.

Я попытался запустить приложение из командной строки после выполнения sú таким образом:

$su 
#am start -n com.example.test/.ui.Activity 

Но его же после того, глядя на выводе команды пса я вижу, что приложение работает как пользователь «u0_a110 «а не корень.

Также я попытался с параметром --user 0 и --user 1000 с такими же результатами ... Я думаю, что виртуальная машина dalvik отбрасывает привилегии из родительского процесса.

Я также попытался преобразовать приложение в приложение системы переместив его в/системы/собств-приложение с теми же результатами, (идущее пользователь приложения его не корень, а также не система)

Может быть с:

android:sharedUserId="android.uid.system" 

в манифесте приложение запускается в системе пользователя, по крайней мере, я пытался бежать, что путь приложения, а также размещены в/системы/собств-приложение, и телефон не завершения загрузки.

Я думаю, что это ошибка, потому что приложение должно быть подписано с системным ключом от производителя.

Возможно ли запустить какое-либо приложение для Android в качестве пользователя root или, по крайней мере, системы?

Я знаю, что если я перекрестно скомпилирую приложение linux для ARM (или архитектуру телефона) и запустим это приложение в оболочке от имени root, это приложение получит доступ root, но это единственный способ? Я хочу достичь этого с помощью приложения Android для Android.

ответ

2

Насколько я знаю, для приложения Java нет возможности достичь этого. Даже присваивайте системе uid для приложения и подписывайте его с сертификацией платформы, он по-прежнему не может получить привилегии root. Идея systemuid заключается в доступе к некоторым уровням уровня системы, таким как управление режимом самолета, получение фреймбуфера, пакет принудительной остановки и т. Д., Но не контроль файловой системы с правами root.

+0

Если вы посмотрите на выход: ps | grep, вы видите множество приложений для Android, которые работают как системные пользователи, некоторые из которых я почти уверен, что это Java-приложения. например com.android.settings –

+0

@Mario Rial: Это может быть на старых устройствах. Но на нынешних устройствах Android 5 только демоны работают с системными или корневыми разрешениями. – Robert

+0

Мое тестовое устройство - андроид 4.4.2, что вы имеете в виду с демоном? системный сервис android или обычный демон linux? поэтому в текущих версиях Android единственный способ запустить приложение в качестве корневой или, по крайней мере, системы - это сделать обычное приложение linux для Android и запустить его как root? –

0

Android Rooting очень распространен в наши дни. Все чувствуют себя священными, прося Root их Android-устройство, но теперь в Интернете есть множество приложений, которые помогут вам укрепить ваш Android за считанные секунды. Не нужно знать кодирование и все. Также нет необходимости в ПК

Насколько нам известно, в этом нет возможности добавить Java. Все, что вам нужно сделать, просто установите некоторые из best root apps из магазина игр в магазине приложений и начните создавать свое приложение.

Это может помочь вам много, чтобы сделать ваше приложение более привлекательным с большим UI и AI для корневого разрешения попробовать эти коды

try { 

String[] reboot = new String[] { "su", "-c", "reboot" }; 
//-c will cause the next argument to be treated as a command 

Process process = Runtime.getRuntime().exec(reboot); 

process.waitFor(); //wait for the native process to finish executing. 

    } catch (Exception e) { 

Toast.makeText(getApplicationContext()," Device not rooted.\n Could not reboot...",Toast.LENGTH_SHORT).show(); 

} 

Большое спасибо!

Смежные вопросы