静默安装和卸载第三方apk

1.实现静默安装和卸载需要两个权限

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

<uses-permission android:name="android.permission.DELETE_PACKAGES" />
2.你的app需要放置在System\app或者System\priv-app目录下,也就是说要有root权限或者是系统应用才行

3.我都是选择adb命令行的方式,我看见有的博客是用反射来做的,不过我是试过了,在API25的情况下我没跑通,可能是我自己的问题。废话不多说上代码:

 (1)静默安装:

  1.   private boolean install()  
  2.   {  
  3.     String[] args = {"pm""install""-r", packageUri.getPath()};  
  4. String result = null;  
  5. ProcessBuilder processBuilder = new ProcessBuilder(args);;  
  6. Process process = null;  
  7. InputStream errIs = null;  
  8. InputStream inIs = null;  
  9. try{  
  10.     ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  11.     int read = -1;  
  12.     process = processBuilder.start();  
  13.     errIs = process.getErrorStream();  
  14.     while((read = errIs.read()) != -1){  
  15.         baos.write(read);  
  16.     }  
  17.     baos.write('\n');  
  18.     inIs = process.getInputStream();  
  19.     while((read = inIs.read()) != -1){  
  20.         baos.write(read);  
  21.     }  
  22.     byte[] data = baos.toByteArray();  
  23.     result = new String(data);  
  24. }catch(Exception e){  
  25.     e.printStackTrace();  
  26. }finally{  
  27.     try{  
  28.         if(errIs != null){  
  29.             errIs.close();  
  30.         }  
  31.         if(inIs != null){  
  32.             inIs.close();  
  33.         }  
  34.     }catch(Exception e){  
  35.         e.printStackTrace();  
  36.     }  
  37.     if(process != null){  
  38.         process.destroy();  
  39.     }  
  40. }  
  41.   
  42. if(result != null && (result.endsWith("Success")||result.endsWith("Success\n")))  
  43. {  
  44.     return true;  
  45. }  
  46. return false;  
  47.   }  

(2)静默卸载:
  1. private void uninstall2() {  
  2.         String[] args = { "pm""uninstall""com.popcap.pvzthird" };  
  3.         String result = null;  
  4.         ProcessBuilder processBuilder = new ProcessBuilder(args);  
  5.         ;  
  6.         Process process = null;  
  7.         InputStream errIs = null;  
  8.         InputStream inIs = null;  
  9.         try {  
  10.             ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  11.             int read = -1;  
  12.             process = processBuilder.start();  
  13.             errIs = process.getErrorStream();  
  14.             while ((read = errIs.read()) != -1) {  
  15.                 baos.write(read);  
  16.             }  
  17.             baos.write('\n');  
  18.             inIs = process.getInputStream();  
  19.             while ((read = inIs.read()) != -1) {  
  20.                 baos.write(read);  
  21.             }  
  22.             byte[] data = baos.toByteArray();  
  23.             result = new String(data);  
  24.         } catch (Exception e) {  
  25.             e.printStackTrace();  
  26.         } finally {  
  27.             try {  
  28.                 if (errIs != null) {  
  29.                     errIs.close();  
  30.                 }  
  31.                 if (inIs != null) {  
  32.                     inIs.close();  
  33.                 }  
  34.             } catch (Exception e) {  
  35.                 e.printStackTrace();  
  36.             }  
  37.             if (process != null) {  
  38.                 process.destroy();  
  39.             }  
  40.         }  
  41.     }  

你可能感兴趣的:(Android)