個(gè)人了解到的靜默安裝的方式有以下4種:
- root手機(jī)只壳,通過(guò)su命令獲取root權(quán)限涧卵,并執(zhí)行pm -r path命令捧搞。
缺點(diǎn):需要root手機(jī)粉怕;需要詢問(wèn)用戶獲取超級(jí)權(quán)限健民;
參考:Android靜默安裝實(shí)現(xiàn)方案,仿360手機(jī)助手秒裝和智能安裝功能
注意:上述參考的文章中的isRoot方法有誤斋荞,應(yīng)改為如下:
//bool = (!new File("/system/bin/su").exists()) || (!new File("/system/xbin/su").exists());
bool = new File("/system/bin/su").exists() || new File("/system/xbin/su").exists();
使用無(wú)障礙服務(wù)
缺點(diǎn):需要引導(dǎo)用戶打開(kāi)對(duì)應(yīng)的無(wú)障礙服務(wù)荞雏;安裝界面仍舊會(huì)彈出,只是智能地幫用戶完成了點(diǎn)擊操作平酿;
參考:Android靜默安裝實(shí)現(xiàn)方案,仿360手機(jī)助手秒裝和智能安裝功能打上系統(tǒng)簽名悦陋,聲明INSTALL_PACKAGES權(quán)限蜈彼,執(zhí)行pm -r path命令。
缺點(diǎn):需要系統(tǒng)簽名俺驶;
參考:使用pm命令安裝或卸載apk,靜默安裝幸逆、卸載方法
注意:上述參考的文章中在給apk系統(tǒng)簽名前,在manifest中添加了android:sharedUserId暮现,但我使用源碼編譯的方式來(lái)打上系統(tǒng)簽名時(shí)沒(méi)有添加android:sharedUserId也沒(méi)問(wèn)題还绘;文章中沒(méi)有提到要添加INSTALL_PACKAGES權(quán)限,但我測(cè)試后發(fā)現(xiàn)是需要的栖袋。關(guān)于系統(tǒng)簽名請(qǐng)看
Android應(yīng)用程序獲取系統(tǒng)簽名的方法拍顷,個(gè)人對(duì)是否需要添加android:sharedUserId還是有疑惑,有知道的小伙伴麻煩告知下哈塘幅。打上系統(tǒng)簽名昔案,聲明INSTALL_PACKAGES權(quán)限,引入IPackageManager相關(guān)代碼电媳,調(diào)用iPm.installPackage(Uri.fromFile(apkFile), null, 2,apkFile.getName());進(jìn)行靜默安裝踏揣。
缺點(diǎn):需要系統(tǒng)簽名;需要引入源碼中的相關(guān)代碼匾乓;
參考:Android真正的靜默安裝
我看了一些第三方的應(yīng)用市場(chǎng)捞稿,一般在設(shè)置下都會(huì)有前兩種靜默安裝的方式可供選擇,而后兩種靜默安裝的方式主要是廠商自己的應(yīng)用市場(chǎng)使用拼缝。
Android7.0靜默安裝
如果在7.0的系統(tǒng)上使用第三種靜默安裝的方式會(huì)出現(xiàn)以下錯(cuò)誤:
java.lang.SecurityException:
Permission Denial: runInstallCreate from pm command asks to run as user -1 but is calling from user 0;
this requires android.permission.INTERACT_ACROSS_USERS_FULL
參考:
Android7.0的靜默安裝失敗問(wèn)題研究
Android N 靜默安裝和卸載
主要步驟如下:
- 修改命令為pm install -i 作為安裝者的應(yīng)用包名 --user 0 需要安裝的應(yīng)用在移動(dòng)設(shè)備上的路徑娱局。
- 添加android.permission.INTERACT_ACROSS_USERS_FULL權(quán)限。
我試了以上兩篇文章的介紹的方法珍促,還是失敗铃辖,提示Failure [null],不知道怎么破了猪叙,可能是廠商的定制問(wèn)題吧娇斩。仁卷。。還在思考中犬第。锦积。。