Android静默安装

作者: aqianglala | 来源:发表于2018-01-02 17:03 被阅读525次

    个人了解到的静默安装的方式有以下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静默安装

        本文链接:https://www.haomeiwen.com/subject/apefnxtx.html