pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME][-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm命令可以通過adb在shell中執行,同樣,我們可以通過代碼來執行。
/* * m命令可以通過adb在shell中執行,同樣,我們可以通過代碼來執行 */ public static String execCommand(String ...command) { Process process=null; InputStream errIs=null; InputStream inIs=null; String result=""; try { process=new ProcessBuilder().command(command).start(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int read = -1; errIs=process.getErrorStream(); while((read=errIs.read())!=-1) { baos.write(read); } inIs=process.getInputStream(); while((read=inIs.read())!=-1) { baos.write(read); } result=new String(baos.toByteArray()); if(inIs!=null) inIs.close(); if(errIs!=null) errIs.close(); process.destroy(); } catch (IOException e) { result=e.getMessage(); } return result; }
1 |
execCommand( "pm" , "install" , "-f" ,filePath); //安裝apk,filePath為apk文件路徑,如/mnt/sdcard/ApiDemos.apk |
2 |
execCommand( "pm" , "uninstall" , packageName); //卸載apk,packageName為包名,如com.example.android.apis |
編譯生成apk時,要在你的manifest文件下添加android:sharedUserId="android.uid.system",如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xieyuan.mhfilemanager" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly" android:sharedUserId="android.uid.system" >
編譯完成之后還無法正常安裝,會出現Installationerror: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這兩個文件刪除掉,然后在命令行中執行以下命令:
1 |
java -jar signapk.jarplatform.x509.pem platform.pk8 PMDemo.apk NewPMDemo.apk |
安裝前先把舊的apk卸載,這樣重新簽名之后的apk就可以正常安裝了。
沒有platform.pk8和platform.x509.pem,signapk.jar的可以到這里下載