通过广播实现静默安装与静默卸载的应用管理服务

简介

静默安装用于解决android自动嵌入式智能设备远程自动升级问题,安装过程无需人为操作。本项目通过获取系统platform签名,并利用隐藏Api--PackageManage实现Apk管理服务,设备内其他程序可通过广播接口完成应用程序静默安装与卸载功能。

折腾过程

最近为公司设备添加远程更新功能,在如何实现静默安装上折腾了很久,过程如下:

  • 首先android4.4以后应用拿到root权限非常比容易,被pass掉

  • 然后发现实现AccessibilityService可以帮助点击屏幕特定的按钮,本以为用ACTION_VIEW,ACTION_DELETE常规方法辅助监听对应的点击事件可以搞定,最后郁闷的发现虽然可以辅助点击,但前提是你有触动过屏幕才能帮你点击,意思是还是需要人,蛋疼了···

  • 最后还是用了网上比较流行的获取系统签名,使用PackageManage的方法,虽然过程还是挺麻烦,但还真的很好用,最后我把静默安装与卸载功能独立成一个开机启动的服务,发送指定广播可以调用,这样以后谁的应用想更新对接我接口就好,无需重新实现。

大家也可以直接拿来用,不过得用系统签名重新生成我的apk,缺点就是这样,不过已经免去了很多折腾,关于系统签名教程,Click me

项目地址:https://github.com/amayazhao/SilentInstall

简介

静默安装用于解决android自动嵌入式智能设备远程自动升级问题,安装过程无需人为操作。本项目通过获取系统platform签名,并利用隐藏Api--PackageManage实现Apk管理服务,设备内其他程序可通过广播接口完成应用程序静默安装与卸载功能。

效果

使用(Eclipse与android studio通用)

静默安装条件比较苛刻(只讨论无法root的情况),需使用与android系统相同的签名获取SignatureOrSystem权限,但由于android系统签名每个厂家Rom各有不同,故缺点也很明显改程序需专门制作匹配的签名。下面介绍如何使用该项目

  1. 生成使用系统签名的本项目Apk(比较麻烦的一点)

    • 前提条件拿到系统的签名文件:platform.pk8 platform.x509.pem(可从码源获取,一般做嵌入式的公司应该不是问题)
    • 签名,如何制作签名, 请点击
  2. 安装后开启自动启动服务,(PS:本想做一个纯Service程序,还得继续研究一下)

  3. 在需要的地方,实现广播接口,OK

  • 需按照接口发送广播请求

   /**
     * 发送静默安装请求
     * @Action:android.intent.action.zhao.MANAGE_INSTALL_SILENT
     * @param apkPath 安装包本地地址
     * @param packageName 包名
     * @param isOpen 安装成功后是否打开
     */
    private void SendInstallBroadcast(String apkPath, String packageName, boolean isOpen){
        Intent mIntent = new Intent("android.intent.action.zhao.MANAGE_INSTALL_SILENT");
        mIntent.putExtra("apkpath",apkPath);
        mIntent.putExtra("package",packageName);
        mIntent.putExtra("isopen", isOpen);
        sendBroadcast(mIntent);
    }

  • 还可以实现接收结果广播,获得执行结果

        /**
     * 接收执行结果
     * 注册广播:com.zhao.install.EXCUTOR_RESULT
     */
    class myReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            //1表示执行成功
            int result = intent.getIntExtra("result",0);
            if(result == 1){
                showResult("操作成功");
            }else {
                showResult("操作失败");
            }
        }
    }
  • 示例代码见DemoActivity.java
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,786评论 25 709
  • 今早,想去海边近距离看看大海,朝着岸边的盘石走过去,走到一半发现石头上很多苔藓,很滑。 头脑想法蹦出来: 继续走吗...
    聆子空间阅读 405评论 0 0
  • 首先我不是无神论者,所以我相信世界上存在神鬼。在无神论者看来这就是愚昧,是无知,是迷信。每个人所到达的思想领域...
    春风凉意阅读 394评论 1 2
  • 本没打算在杭州住的我 因为姐姐的到来 毫无准备在杭州住了一晚 第二天 蓬头垢面 不想再提了 然后穿着高跟鞋去逛西湖...
    无敌大美人st阅读 176评论 0 0
  • LiuCarol阅读 229评论 0 0