1
我想以編程方式將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("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 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 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'應該能夠以這種方式複製文件。你沒有使用它的理由是什麼? –
如果我使用貓,但我不能開始我的活動。我想複製或推apk到系統,然後啓動它。 – pengwang
這可能是因爲Android不知道已安裝新的應用程序。它需要檢查應用程序清單以瞭解它可以接收哪些意圖,這是在以傳統方式安裝應用程序時發生的。我不知道如何觸發該行爲,但重新啓動設備可能會起作用。 –