Я пишу приложение для корневых устройств, которые должны попасть в режим суперпользователя. Я знаю, как сделать это таким образом, который работает на реальных корневых устройствах, но когда я тестирую его в AVD, который также внедрен, команда «su» не ведет себя так же, как на реальном устройстве. Он не позволит root-пользователю, не являющемуся пользователем root, «root» ... AVD разрешает root только root для пользователя без полномочий root.Android: Как «su» работать в корневом AVD так же, как работает на реальном корневом устройстве?
Кто-нибудь знает, как получить следующий фрагмент кода для работы в эмуляторе Android?
// ... etc. ...
Process process = null;
try {
// This works on a rooted device and fails within
// the rooted AVD ...
process = new ProcessBuilder("/system/xbin/su").start();
}
catch (Throwable t) {
t.printStackTrace();
return;
}
DataOutputStream writer = new DataOutputStream(process.getOutputStream());
InputStreamReader stream = new InputStreamReader(process.getInputStream());
BufferedReader reader = new BufferedReader(stream);
try {
writer.writeBytes("exec /system/bin/mount -o remount,rw /system\n");
// Just in case the "exec" fails, above ...
writer.writeBytes("exit 1\n");
writer.close();
}
catch (Throwable t) {
t.printStackTrace();
return;
}
finally {
try {
reader.close();
}
catch (Throwable t) {
// do nothing
}
try {
stream.close();
}
catch (Throwable t) {
// do nothing
}
}
// ... etc. ...
Это терпит неудачу, потому что приложение не работает как корень, но в AVD,/система команд/xbin/су работает только тогда, когда он в настоящее время вызывается суперпользователя. Следующий ADB диалог оболочки показывает, что точка (я подключая к запущенному AVD) ...
% adb shell
[email protected]:/ # ### we are now running as root
[email protected]:/ # /system/xbin/su u0_a70
[email protected]:/ $ ### this worked because "su" is invoked as root
[email protected]:/ $ ### we are now running as user u0_a70
[email protected]:/ $ /system/xbin/su root
su: uid 10070 not allowed to su
1|[email protected]:/ $ ### this didn't work as a non-root user
Кто-нибудь знает, как получить команду «Су», чтобы работать в коренится AVD таким же образом, что «su» работает в корневом устройстве?
Заранее спасибо.
PS: Это для Android 4.4.x
Спасибо очень. Я не слышал про Genymotion. Я установил его, и он отлично работает! Текущая версия, похоже, имеет встроенный суперпользователь, и мне так даже не требуется специальное «su» из ссылки. – HippoMan
PS: из-за этого этот Genymotion AVD работает точно так же, как обычное корневое устройство ... по крайней мере, w/r/t получает доступ суперпользователя. – HippoMan
PPS: Просто из любопытства я попробовал su из той ссылки, которую вы поставили в стандартном AVD, который поставляется с Android. Он скомпилирован под другой архитектурой, и он не работает. Когда вы пытаетесь запустить его там, он генерирует эту ошибку: «/ system/bin/su: not executable: magic 7F45». Но мне это не нужно, теперь, когда я использую Genymotion. – HippoMan