Установка / удаление из командной оболочки в 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, как только у меня будет время и код в правильной форме !!