Я хочу программно нажать APK в систему/приложение на корневом устройстве. Я пробовал следующий код, но push
не является командой на Android. Как я могу изменить его для работы?Программно нажать APK в систему/приложение
public static void copyApkToSys(){
Process process;
try {
process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system\n");
out.writeBytes("push /data/shareData/a1.apk /system/app\n");
out.writeBytes("mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system\n");
out.writeBytes("exit\n");
out.flush();
process.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Если я использую следующий код, приложение появляется только после перезагрузки устройства:
public static void copyApkToSys(){
Process process;
try {
process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system\n");
out.writeBytes("cat /data/shareData/a1.apk > /system/app/a1.apk\n");
out.writeBytes("mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system\n");
out.writeBytes("exit\n");
out.flush();
process.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
редактировать: если я использовать кошку, а затем использовать код последующих, но я не могу начать свою деятельность
public static boolean startApk(String packageName, String activityName) {
boolean isSuccess = false;
String cmd = "am start -n " + packageName + "/" + activityName + " \n";
try {
Process process = Runtime.getRuntime().exec(cmd);
isSuccess = waitForProcess(process);
} catch (IOException e) {
e.printStackTrace();
}
return isSuccess;
}
кажется, что есть разница между push
и cat
, как толкая приложение через ADB дает результат, я хотел бы. Как я могу сделать это программно?
Насколько мне известно, нет команды 'push'. На Android очень ограниченное количество команд posix, но 'cat' должен иметь возможность копировать файл таким образом. Каковы ваши аргументы в том, чтобы не использовать его? –
если я использую cat, но я не могу начать свою деятельность. Я хочу скопировать или нажать apk в систему, а затем запустить его. – pengwang
Скорее всего, Android не знает, что новое приложение установлено. Он должен будет проверить манифест приложения, чтобы понять, какие намерения он может получить, что происходит при установке приложения обычным способом. Я не уверен, как вызвать это поведение, но перезагрузка устройства, скорее всего, будет работать. –