pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
 pm uninstall [-k] PACKAGE

pm命令可以通過adb在shell中執行,同樣,我們可以通過代碼來執行。


public static void execCommand(String... command) {
 Process process = null;
 try {
  process = new ProcessBuilder().command(command).start();
  //对于命令的执行结果我们可以通过流来读取
  // InputStream in = process.getInputStream();
  // OutputStream out = process.getOutputStream();
  // InputStream err = process.getErrorStream();
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  if (process != null)
   process.destroy();
 }
}
 
 
 
 
 execCommand("pm", "install", "-f", filePath);//安裝apk,filePath為apk檔路徑,如/mnt/sdcard/ApiDemos.apk
 execCommand("pm", "uninstall", packageName);//卸載apk,packageName為包名,如com.example.android.apis

編譯生成apk時,要在你的manifest檔下添加android:sharedUserId="android.uid.system",編譯完成之後還無法正常安裝,會出現Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE錯誤,此時,要為apk重新簽名。

在android源碼\build\target\product\security中找platform.pk8和platform.x509.pem兩個檔,在android 編繹目錄out下找到 signapk.jar 這個包(源碼目錄\build\tools\signapk),並把編譯好的apk(如PMDemo.apk)放在同一目錄下,在重新簽名之前,用rar檔打開apk檔,進入META-INF目錄下,將CERT.SF和CERT.RSA這兩個檔刪除掉,然後在命令列中執行以下命令:


view sourceprint?
1 java -jar signapk.jar platform.x509.pem platform.pk8 PMDemo.apk NewPMDemo.apk

安裝前先把舊的apk卸載,這樣重新簽名之後的apk就可以正常安裝了。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()