Получение разрешения «root» для приложения Android

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

Я попробовал следующую строку кода, чтобы вывести список файлов, но ничего не произошло

Process process = Runtime.getRuntime().exec(new String[] { "su", "-", "root"});

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

Как я могу сделать свое приложение системным приложением?

Мне нужна помощь, чтобы начать работу с этими вещами (создайте приложение, если это возможно, чтобы получить разрешение root), любая помощь в этом очень ценится. Заранее спасибо :)


person ik024    schedule 06.02.2014    source источник
comment
Существует большая разница между приложением с root-правами и системным приложением. Какой из них вам нужен?   -  person Simon    schedule 06.02.2014
comment
Хм. перечитывая ваш вопрос, кажется, что вы пытаетесь запрограммировать свою собственную суперсу-альтернативу? Если это так: вы не можете сделать это в Java. Вам понадобится C для программирования и компиляции исполняемого файла, который может работать на ядре Android. Конечно, его можно подключить к любому Java APK, который обрабатывает взаимодействие с пользователем, но вам все равно нужен исполняемый файл su для вызова вашего Java-приложения.   -  person Johannes H.    schedule 06.02.2014
comment
@Simaon Я в основном хочу изменить ядро ​​​​Android из своего приложения. И я понятия не имею, как это сделать. Пожалуйста, помогите мне здесь. Как правильно начать работу с этой целью?   -  person ik024    schedule 06.02.2014
comment
@Johannes Я в основном хочу изменить ядро ​​​​Android из своего приложения. И я понятия не имею, как это сделать. Пожалуйста, помогите мне здесь. Как правильно начать работу с этой целью?   -  person ik024    schedule 06.02.2014
comment
Вызов команд оболочки с использованием su — правильный способ добраться туда. Вам просто нужно выяснить, какие команды вызывать и какие команды доступны. Первое, что нужно сделать: научиться пользоваться оболочкой Linux. Android имеет оболочку Bourne, поэтому вы можете использовать синтаксис, специфичный для оболочки Bourne.   -  person Johannes H.    schedule 06.02.2014
comment
@ЙоханнесХ. так можем ли мы выполнять команды оболочки, используя su из приложения для Android?   -  person ik024    schedule 06.02.2014
comment
да. см. мой ответ о том, как это сделать. Вы также можете взглянуть на отличный код, на который ссылается @NirHartmann.   -  person Johannes H.    schedule 06.02.2014
comment
@ЙоханнесХ. хорошо, а что не так с кодом, который я разместил в своем вопросе выше? Не работало почему?   -  person ik024    schedule 06.02.2014
comment
Это должно работать, просто обратите внимание - su без какой-либо другой команды для выполнения мало что даст. Также обратите внимание, что телефон, конечно же, должен быть рутирован, иначе двоичный файл su будет недоступен.   -  person Johannes H.    schedule 06.02.2014
comment
@ЙоханнесХ. так что, если я хочу протестировать приложение на другом устройстве, которое также должно быть рутировано, верно?   -  person ik024    schedule 06.02.2014
comment
а также возможно ли проверить это в эмуляторе?   -  person ik024    schedule 06.02.2014
comment
КАЖДОЕ устройство, которое должно работать, suдолжно ИМЕТЬ suofr, конечно, так что да. Я не знаю об эмуляторе, я думаю, в нем нет бинарного файла su, если вы его не введете. Однако я не делал ничего, что требовало su, поэтому я действительно не знаю.   -  person Johannes H.    schedule 06.02.2014
comment
@ЙоханнесХ. я вижу большое спасибо за вашу помощь :) я действительно ценю это :)   -  person ik024    schedule 06.02.2014


Ответы (2)


Во-первых: обратите внимание, что вы можете выполнять команды оболочки только с помощью su (= вы можете использовать команды оболочки только как root, а не код Java).

Во-вторых: не уверен, что это относится ко всем приложениям su, но это справочное сообщение su на моем телефоне:

Usage: su [options] [--] [-] [LOGIN] [--] [args...]

Options:  
  --daemon                      start the su daemon agent  
  -c, --command COMMAND         pass COMMAND to the invoked shell  
  -h, --help                    display this help message and exit  
  -, -l, --login                pretend the shell to be a login shell  
  -m, -p,  
  --preserve-environment        do not change environment variables  
  -s, --shell SHELL             use SHELL instead of the default /system/bin/sh  
  -u                            display the multiuser mode and exit  
  -v, --version                 display version number and exit  
  -V                            display version code and exit,  
                                this is used almost exclusively by Superuser.apk  

Это означает: вы должны запустить su -c something (или su -c something - root, но root все равно по умолчанию). по сути, это эквивалентно su в большинстве систем Linux, за исключением демона, поскольку в обычных системах Linux нет демона, обрабатывающего вызовы su.

Если другие команды su ведут себя по-другому (что возможно), более безопасно открыть поток в оболочке, выполнить su, оценить его код возврата, затем перейти к выполнению других команд и, наконец, выполнить exit.

person Johannes H.    schedule 06.02.2014

Здесь есть хороший ответ - ANDROID: как получить root доступ в приложении Android?

«Насколько я знаю, вы можете запускать команды командной строки только с привилегиями root. Вы можете использовать этот общий класс, который я сделал, который обертывает доступ root в ваш код: http://muzikant-android.blogspot.com/2011/02/how-to-get-root-access-and-execute.html"

person Nir Hartmann    schedule 06.02.2014