Android静默安装

个人了解到的静默安装的方式有以下4种:

  1. root手机,通过su命令获取root权限,并执行pm -r path命令。
    缺点:需要root手机;需要询问用户获取超级权限;
    参考:Android静默安装实现方案,仿360手机助手秒装和智能安装功能
    注意:上述参考的文章中的isRoot方法有误,应改为如下:
//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();
  1. 使用无障碍服务
    缺点:需要引导用户打开对应的无障碍服务;安装界面仍旧会弹出,只是智能地帮用户完成了点击操作;
    参考:Android静默安装实现方案,仿360手机助手秒装和智能安装功能

  2. 打上系统签名,声明INSTALL_PACKAGES权限,执行pm -r path命令。
    缺点:需要系统签名;
    参考:使用pm命令安装或卸载apk,静默安装、卸载方法
    注意:上述参考的文章中在给apk系统签名前,在manifest中添加了android:sharedUserId,但我使用源码编译的方式来打上系统签名时没有添加android:sharedUserId也没问题;文章中没有提到要添加INSTALL_PACKAGES权限,但我测试后发现是需要的。关于系统签名请看
    Android应用程序获取系统签名的方法,个人对是否需要添加android:sharedUserId还是有疑惑,有知道的小伙伴麻烦告知下哈。

  3. 打上系统签名,声明INSTALL_PACKAGES权限,引入IPackageManager相关代码,调用iPm.installPackage(Uri.fromFile(apkFile), null, 2,apkFile.getName());进行静默安装。
    缺点:需要系统签名;需要引入源码中的相关代码;
    参考:Android真正的静默安装

我看了一些第三方的应用市场,一般在设置下都会有前两种静默安装的方式可供选择,而后两种静默安装的方式主要是厂商自己的应用市场使用。

Android7.0静默安装

如果在7.0的系统上使用第三种静默安装的方式会出现以下错误:

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的静默安装失败问题研究
Android N 静默安装和卸载

主要步骤如下:

  1. 修改命令为pm install -i 作为安装者的应用包名 --user 0 需要安装的应用在移动设备上的路径。
  2. 添加android.permission.INTERACT_ACROSS_USERS_FULL权限。

我试了以上两篇文章的介绍的方法,还是失败,提示Failure [null],不知道怎么破了,可能是厂商的定制问题吧。。。还在思考中。。。

你可能感兴趣的:(Android静默安装)