Установка / удаление из командной оболочки в Android

Я хочу реализовать тихий установщик из-apk-файла и unistaller-пакета в Android. Тема в основном обсуждалась на SO и в других местах, но я могуне применять по какой-то причине, что ям отсутствует. Очевидно, что достичь этой цели сложно, потому что в случае успеха это будет серьезным нарушением безопасности в Android. НО, мне нужно реализовать его для специального проекта, а не для потребительского рынка. Есть два подхода:

создать пользовательское ПЗУ из исходного кода (например, мод AOSP или Cyanogen), настроив установщик PackageManager (фактически, просто для удаления диалоговых окон подтверждения пользователя).сделать это программно, создав процесс как суперпользователь и выполнив 'adb shell pm install ', Я ранее установилсу» в / system / xbin и я проверяю во время выполнения, что RootTools.rootIsAvailable ().

В первом случае я покопался в исходном коде Froyo, но попал в тупик с помеченным @hide методом. Для второго ясначала попробовал команды из терминала

adb shell pm install /mnt/sdcard/HelloAndroid.apk

а также

adb shell pm uninstall com.example.helloandroid

Оба работают хорошо. Затем я использовал следующий код, разработка которого тестировалась на рутированном эмуляторе (2.2 - Froyo):

@Override
    public void onClick(View v) {
        switch (v.getId())
           {
              case R.id.btnInstall:
                  try {  
                      install = Runtime.getRuntime().exec("su\n");   
                      DataOutputStream os = new DataOutputStream(install.getOutputStream());
                      os.writeBytes("pm install /mnt/sdcard/HelloAndroid.apk\n"); 
                      os.writeBytes("exit\n"); 
                      os.flush();
                      install.waitFor();

                              if (install.exitValue() == 0) {  
                                  Toast.makeText(MainActivity.this, "Success!", Toast.LENGTH_LONG).show();
                              }  
                              else {  
                                  Toast.makeText(MainActivity.this, "Failure. Exit code: "+String.valueOf(install.exitValue()), Toast.LENGTH_LONG).show();
                              }
                  }
                  catch (InterruptedException e) {  
                      logError(e);
                  }
                  catch (IOException e) {  
                  logError(e);
                  } 
                  break;

              case R.id.btnUninstall:
                  try {
                      install = Runtime.getRuntime().exec("su\n"); 
                      install=Runtime.getRuntime().exec("pm uninstall "+txtPackageName.getText().toString()+"\n");

                } catch (Exception e) {
                    logError(e);
                }
                  break;
           }

    }

Чтобы избежать опечаток и других ошибок, я жестко запрограммировал параметр apk file команды для установки; наcase R.id.btnInstall ' команда не выполнена и выход включенПровал» со значением выхода 1, означающим, что "класс не может быть найден; Понятия не имею, что это значит ... Я ценю вашу помощь!

РЕДАКТИРОВАНИЕ: У меня есть чистое решение, я отправлю ответ от A-Z, как только у меня будет время и код в правильной форме !!

Ответы на вопрос(6)

Ваш ответ на вопрос