2010-10-12 5 views
0

У меня есть приложение на рынке, предназначенное только для корневых устройств. Я протестировал приложение на корневых и некорневых G1, MT3G и Cliq без ошибок. Я получаю несколько низких оценок от людей с предположительно укорененными устройствами, заявляя, что приложение говорит им, что они не внедрены (конечно, они обычно не оставляют важной информации, такой как телефон и какой rom)Android: приложение не работает на некоторых корневых устройствах ... Почему?

Здесь это код, который генерирует ошибку ... может ли кто-нибудь понять, что может быть проблема?

final Button button = (Button) findViewById(R.id.******); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String command1 = "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system"; 
       String command2 = "cp -f /sdcard/******* /etc/"; 
       String command3 = "dos2unix -u /etc/*****"; 
       String command4 = "mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system"; 

       execCommandLine1(command1); 
       execCommandLine1(command2); 
       execCommandLine1(command3); 
       execCommandLine1(command4); 
} 



void execCommandLine1(String command) 
    { 
     Runtime runtime = Runtime.getRuntime(); 
     Process proc = null; 
     OutputStreamWriter osw = null; 

     try 
     { 
      proc = runtime.exec("su"); 
      osw = new OutputStreamWriter(proc.getOutputStream()); 
      osw.write(command); 
      osw.flush(); 
      osw.close(); 
     } 
     catch (IOException ex) 
     { 

      Log.e("execCommandLine()", "Command resulted in an IO Exception: " + command); 
      return; 
     } 
     finally 
     { 
      if (osw != null) 
      { 
       try 
       { 
        osw.close(); 
       } 
       catch (IOException e){} 
      } 
     } 

     try 
     { 
      proc.waitFor(); 
     } 
     catch (InterruptedException e){} 

     if (proc.exitValue() != 0) 
     { 
      **// Error Dialog that is being erroneously displayed** 

     } 
     else { 

       // Success Dialog 
     } 

    } 
+0

И ошибка ... что? – CommonsWare

+0

Я полагаю, что некоторые устройства могут не иметь файловую систему '/ system' в'/dev/block/mtdblock3', или они не поставляются с 'dos2unix', установленным или в пути. –

+0

@CommonsWare На некоторых корневых устройствах отображается мое диалоговое окно с ошибкой ... указывающее, что (proc.exitValue()! = 0), которое не должно происходить на корневом телефоне, если что-то не так с моими командами или с тем, как я Я выполняю их –

ответ

0

Я согласен с комментарием Кристофера: Вы, кажется, сделать некоторые предположения:

  • /system является на /dev/block/mtdblock3
  • /dev/block/mtdblock3 является yaffs2
  • /etc/ является жесткой связью или символической ссылки на что-то на /system
  • mount есть
  • dos2unix существует
  • cp существует
  • su существует

Большинство из них должно быть проверяемым во время выполнения, хотя /etc/ проверки может быть немного сложнее. Проверьте, что вещи на первом запуске вашего приложения, а затем делать все, что имеет смысл:

  • «извините, это приложение не будет работать», если вы обнаружили неисправность
  • отключить кнопки/меню/все что приводит к выполнению вашего кода
+0

Happy 50k rep! ;) –

+0

Я нашел эту команду плавающей вокруг Интернета ... она должна монтировать соответствующую точку монтирования и fs: grep "/ system"/proc/mounts | awk '{system ("mount -o rw, remount -t" $ 3 "" $ 1 "" $ 2)}' Однако, похоже, он не работает ... никаких предложений? –

+0

@Frank Bozzo: FWIW, я не вижу ни 'awk', ни' grep' на моем эмуляторе. Однако имейте в виду, что в вашем распоряжении весь этот язык программирования под названием «Java». :-) Прочитайте в этом файле и проанализируйте его на Java, чтобы определить, что вам нужно. – CommonsWare

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