2013-12-19 85 views
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; 
} 

看起來pushcat之間有區別,因爲通過adb推送應用程序給出我想要的結果。我怎樣才能以編程方式做到這一點?

+0

據我所知,沒有命令'push'。 Android上的posix命令數量非常有限,但'cat'應該能夠以這種方式複製文件。你沒有使用它的理由是什麼? –

+0

如果我使用貓,但我不能開始我的活動。我想複製或推apk到系統,然後啓動它。 – pengwang

+0

這可能是因爲Android不知道已安裝新的應用程序。它需要檢查應用程序清單以瞭解它可以接收哪些意圖,這是在以傳統方式安裝應用程序時發生的。我不知道如何觸發該行爲,但重新啓動設備可能會起作用。 –

回答

-1

嘗試命令「mv -R」,就像Linux命令

相關問題