if (DownloadManager.STATUS_SUCCESSFUL == c
.getInt(columnIndex)) {
mProgress.setProgress(70);
mStatus.setText(R.string.status_backup);
File dl_path = new File(DownloadManager.COLUMN_LOCAL_URI);
File og_path = new File("/system/app/app.apk");
String bu_path = "/sdcard/asdfgsd/backup/app.apk";
Process p;
try {
// Preform su to get root privledges
p = Runtime.getRuntime().exec("su");
// Attempt to write a file to a root-only
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"Do I have root?\" >/system/sd/temporary.txt\n");
// Close the terminal
os.writeBytes("exit\n");
os.flush();
try {
p.waitFor();
if (p.exitValue() != 255) {
// Trying to remount system partition in read-write mode
p.getOutputStream().write("mount -o r,remount -t yaffs2 /dev/block/mtdblock3 /system".getBytes());
if (og_path.renameTo(new File(bu_path))) {
mProgress.setProgress(90);
mStatus.setText(R.string.status_install);
dl_path.renameTo(og_path); } else {
mStatus.setText(R.string.status_error_1);
}
}
} catch (InterruptedException e) {
mStatus.setText(R.string.status_error_2);
}
} catch (IOException e) {
mStatus.setText(R.string.status_error_3);
}
}
Так что это кусок кода, который должен заменить приложение из / system / app в папку резервной копии, а затем заменить копию, загруженную через DM API в / system / app.Все работает идеально, пока приложение не начнет запрашивать разрешения SU.Как видите, я поместил несколько строк ошибок в случае исключений, чтобы облегчить отладку, и похоже, что он получил исключение ввода-вывода (status_error_3).Что не так с моим кодом?
UPD: SU успешно запрашивает разрешение для моего приложения, поэтому оно должно работать, но это не так.
Заранее спасибо!