2014-10-05 5 views
0

Я пишу приложение для корневых устройств, которые должны попасть в режим суперпользователя. Я знаю, как сделать это таким образом, который работает на реальных корневых устройствах, но когда я тестирую его в 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

ответ

1

Не использовать фондовый Android эмулятор, используйте GenyMotion и этим руководством XDA link

надежду, что это поможет вам :)

+0

Спасибо очень. Я не слышал про Genymotion. Я установил его, и он отлично работает! Текущая версия, похоже, имеет встроенный суперпользователь, и мне так даже не требуется специальное «su» из ссылки. – HippoMan

+0

PS: из-за этого этот Genymotion AVD работает точно так же, как обычное корневое устройство ... по крайней мере, w/r/t получает доступ суперпользователя. – HippoMan

+0

PPS: Просто из любопытства я попробовал su из той ссылки, которую вы поставили в стандартном AVD, который поставляется с Android. Он скомпилирован под другой архитектурой, и он не работает. Когда вы пытаетесь запустить его там, он генерирует эту ошибку: «/ system/bin/su: not executable: magic 7F45». Но мне это не нужно, теперь, когда я использую Genymotion. – HippoMan

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

  • Нет связанных вопросов^_^