2013-02-26 3 views
0

Я создаю приложение, которое должно принимать суперпользовательские права на запись в каталог/data, изменяя содержимое файла базы данных. я написать код для получения корневого доступа, но он дает мне в журнал не может «получить корневой доступ или запрещен пользователем», предоставляющий root доступ к андроидному приложению

мой код

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if(canRunRootCommands()) 
      Toast.makeText(this, "Can Run Root Commands", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public static boolean canRunRootCommands() 
     { 
      boolean retval = false; 
      Process suProcess; 

      try 
      { 
      suProcess = Runtime.getRuntime().exec("su"); 

      DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); 
      DataInputStream osRes = new DataInputStream(suProcess.getInputStream()); 

      if (null != os && null != osRes) 
      { 
       // Getting the id of the current user to check if this is root 
       os.writeBytes("id\n"); 
       os.flush(); 

       String currUid = osRes.readLine(); 
       boolean exitSu = false; 
       if (null == currUid) 
       { 
        retval = false; 
        exitSu = false; 
        Log.d("ROOT", "Can't get root access or denied by user"); 
       } 
       else if (true == currUid.contains("uid=0")) 
       { 
        retval = true; 
        exitSu = true; 
        Log.d("ROOT", "Root access granted"); 
       } 
       else 
       { 
        retval = false; 
        exitSu = true; 
        Log.d("ROOT", "Root access rejected: " + currUid); 
       } 

       if (exitSu) 
       { 
        os.writeBytes("exit\n"); 
        os.flush(); 
       } 
      } 
      } 
      catch (Exception e) 
      { 
      // Can't get root ! 
      // Probably broken pipe exception on trying to write to output stream (os) after su failed, meaning that the device is not rooted 

      retval = false; 
      Log.d("ROOT", "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage()); 
      } 

      return retval; 
     } 

как получить корневой доступ к таким образом, чтобы я могу обновить файл базы данных?

+2

Ограничение доступа к корню ограничено на большинстве Android-устройств. Вы должны получить это, часто аннулируя гарантию устройства ... – ppeterka

+0

означает, что я не могу предоставить root-доступ вообще большинству устройств Android? любым способом? –

+0

нет. Корневой доступ предназначен только для пользователей, которые решили укоренить свои телефоны (меньшинство) и явно разрешить доступ к вашему приложению. – Budius

ответ

0

Используйте библиотеку RootTools, это упростит загрузку, вам не нужно использовать Process и используйте много кода.

-1

Корень - это не то, что вы можете достичь в нормальных условиях, если устройство не укоренено. Вы не можете FORCE ваше приложение должно иметь корень вне условий без корней. Пожалуйста, исследуйте, что означает корень.

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