Android使用Bugly实现静默安装/自动安装app

前言

针对门禁、闸机、广告机等无人值守的Android终端app,如何自动升级一直是一个比较麻烦的事情;现在给出一个相对比较成熟的方案供大家参考;

以前你的升级方案可能是这样的:

  • 集成bugly,发布新版本时由工作人员到现场手动检测更新
  • 自建应用升级后台管理,发布新版本时由工作人员到现场手动检测更新
  • 对于有root权限的,通过shell命令实现静默安装app
  • 第三种和第二种的结合
  • U盘安装

第四种方式基本可以实现后端发布升级,终端机自动检测更新(或通过推送实现)并自动更新app,实测中你可能发现该方式并没有那么稳定,总是有那么些设备未能升级成功;或者针对没有root的设备没法实现此功能。

尊重原创,转载请注明出处: http://blog.csdn.net/qq137722697

推荐的方案

AutoInstaller

推荐之前先来看看一个非常实用的开源项目 AutoInstaller ,AutoInstaller 一个可以让您应用的自动更新功能更加优雅的静默安装库 !

特性:

  • 只需要一行代码搞定您应用的后台静默下载和静默(自动)安装 【AutoInstaller.getDefault(this).install(APK_FILE_PATH);】
  • 两种自动安装方式: ROOT静默安装 和 辅助功能自动模拟点击安装 ,并且能够自动选择可用方式

在这里插入图片描述

Bugly+AutoInstaller

使用Bugly的好处不言而喻,方便发布版本,还有热修复功能,集成简单;不用自己写升级管理后台,还有完善的错误日志收集;但是Bugly是不支持自动升级的,需要用户点击升级后方可下载安装,并且安装完成后需要用户点击打开才可以实现打开新版应用;

那是否可以实现在Bugly的后台发布更新包,通过AutoInstaller自动安装app呢?答案是肯定的,只需要将Bugly的更新默认设置成自定义模式,终端自动检测bugly的升级策略,发现有新策略时将apk的下载地址传给AutoInstaller实现自动下载安装apk。

是不是很完美;不管你是root过的设备还是没有root过的设备,基本都能实现自动升级(静默安装);

到这里还没有完,AutoInstaller只能实现静默安装,安装完成后是无法自动打开app的,还需要处理一下,下面提供两种解决方案:

  • 监听应用被覆盖安装的广播,然后打开app;
  • 开发一个看门狗软件,主程序定时向看门狗软件发送心跳(通过aidl通讯),看门狗软件定时检测心跳超时时间,超时了就重启系统;

稳妥一点的话可以两种方式结合使用;本demo暂时只实现第一种方式,如你需要看门狗的方式欢迎留言,后期我会贴出看门狗的源码。

实现步骤:

添加相关依赖 app/build.gradle

//静默安装
    implementation 'com.github.a-voyager:AutoInstaller:v1.0'
    //bugly
    implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'
    implementation 'com.tencent.bugly:nativecrashreport:latest.release'

配置权限 AndroidManifest.xml

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

配置bugly的activity

    <activity
            android:name="com.tencent.bugly.beta.ui.BetaActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|locale"
            android:theme="@android:style/Theme.Translucent" />

程序启动类

    <application
            android:name=".base.MyApp"
    ...>
    </application>

MyApp具体代码

public class MyApp extends Application {
   

    private AutoInstaller installer;

    @Override
    public void onCreate() {
   
        super.onCreate();
        initInstaller();
        initBugly();
    }

    private void initInstaller() {
   
        /* 方案一: 默认安装器 */
        installer = AutoInstaller.getDefault(this);
        installer.setOnStateChangedListener(new AutoInstaller.OnStateChangedListener() {
   
            @Override
            public void onStart() {
   
                ELog.e("开始");
            }

            @Override
            public void onComplete() {
   
                ELog.e("完成");
            }

            @Override
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值