Android 靜默安裝

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   ar   os   sp   

 有時候我們需要軟體實現靜默安裝,但是Android並未提供相應的API,然而我們知道命令列安裝android的時候是不會提示使用者的,所有要實現這個功能,我們就可以從執行命令列的方式實現。android提供的安裝命令是

  1. pm install package 
  2. ps : pm install /sdcard/android.apk 
?

 

但是執行這個命令需要前提條件,需要是系統級應用或者具有ROOT許可權。我們先介紹通過ROOT許可權的方式執行。

1,通過擷取ROOT許可權靜默安裝APK
看代碼:

 

    new Thread() {         public void run() {         Process process = null;         OutputStream out = null;         InputStream in = null;         try {         // 請求root         process = Runtime.getRuntime().exec("su");          out = process.getOutputStream();         // 調用安裝         out.write(("pm install -r " + currentTempFilePath + "\n").getBytes());         in = process.getInputStream();         int len = 0;         byte[] bs = new byte[256];         while (-1 != (len = in.read(bs))) {         String state = new String(bs, 0, len);         if (state.equals("Success\n")) {            //安裝成功後的操作              }            }         } catch (IOException e) {             e.printStackTrace();         } catch (Exception e) {             e.printStackTrace();         } finally {             try {                 if (out != null) {                     out.flush();                     out.close();                 }                 if (in != null) {                     in.close();                 }             } catch (IOException e) {                 e.printStackTrace();             }         }       }     }.start(); 

 

當然也可以通過NDK實現,代碼就不放了。

第二種方式,同樣是通過pm命令實現,不用請求ROOT,但是需要系統的簽名。這裡附上模擬器的的簽名,用這個簽名的APK安裝在模擬器上可以實現不請求ROOT而靜默安裝的效果。

?
    //首先在manifest標籤加入屬性     android:sharedUserId="android.uid.system"     new Thread() {         public void run() {         Process process = null;         InputStream in = null;         try {         // 請求root         process = Runtime.getRuntime().    exec("pm install -r " + currentTempFilePath + "\n");          in = process.getInputStream();         int len = 0;         byte[] bs = new byte[256];         while (-1 != (len = in.read(bs))) {         String state = new String(bs, 0, len);         if (state.equals("Success\n")) {            //安裝成功後的操作              }            }         } catch (IOException e) {             e.printStackTrace();         } catch (Exception e) {             e.printStackTrace();         } finally {             try {                 if (in != null) {                     in.close();                 }             } catch (IOException e) {                 e.printStackTrace();             }         }       }     }.start(); 

 

Android 靜默安裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.