android 自动 检测 版本更新 自动下载 静默安装 (超详细 有demo)

前言:代码中账号只作展示之用,请勿上传信息,多谢!无法成功导入demo的同学,请下载as4.0。先前无法导入的同学,是因为之前demo的签名文件没有存放到本工程中。最新demo已经更改,感谢同学反馈。
本文版本更新的.apk文件存放于Bmob服务器,使用其它方式存放亦可,思路通用。本文提供:权限申请、异步下载、静默安装以及版本更新核心思路。
Bmob数据上传请查阅官方文档:http://doc.bmob.cn/data/android/develop_doc/,文中不再赘述。最新demo下载地址:
链接:https://pan.baidu.com/s/1DAAiqQzm8O_Y4pjy_5ny5w
提取码:5ivc

demo基于 androidx,最新版AS4.0导入它完全没问题 。固执使用V4,V7包的同学,自行导包,代码基本一致。建议官网下载AS 4.0,无需翻墙,速度很快: https://developer.android.google.cn/studio 。安装请参考这篇: https://blog.csdn.net/qq_41976613/article/details/91432304
demo从版本号1, 成功更新到版本号 2的样子:

在这里插入图片描述

gif演示运行过程。看不到动图的,页面重新刷新下

在这里插入图片描述
demo的流程是这样的:

  1. VersionCode 为1时,先生成.jks签名文件

  2. 生成版本更高的.apk文件
    将VersionCode 改为 2,双击右侧工具栏的Gradle->项目名->app->Tasks->build->assemble, 生 成.apk文件
    3 将此.apk文件拷贝到手机,准备上传服务器用(如果你的Bmob账号允许上传文件)
    4 开始测试。将VersionCode 改回1,并运行。
    5 点击主页面按钮上传apk
    6 退出app重新运行,这时能检测到版本更新
    7 根据提示下载apk,然后自动安装运行新版本

    若首次运行demo弹出版本更新对话框,那是因为Bmob服务器上存有测试的更新版本。我会及时清理,方便大家测试。使用BMOB的同学最好还是注册自己的账号,完整走一遍demo流程

一、预备知识:VersionCode ,VersionName

Google为APK定义了两个关于版本属性:VersionCode和VersionName,用途各异:

VersionCode :版本号。对用户不可见,仅用于应用市场、程序内部识别版本,判断新旧等用途。
Integer类型,系统默认该值为1。每次发布更新版本时,递增该值
VersionName:版本名。展示给用户,用户通过它认知自己安装的版本
String类型,一般和VersionCode成对出现。

二、思路

每次进行版本更新时,VersionCode加1,需要开发者修改服务器后台版本数据。app从服务器上获取版本号,并与本地版本号进行比对,若大于本地,则提示用户升级。VersionCode的大小是版本更新的依据。
另一属性值versionName,用于向用户展示版本变化幅度。例如从1.0.1变到1.0.2,只是修改了一个很小的bug;若变到1.1.0,可能是修改了某些功能; 再如变到2.0.0,便是进行了大幅修改,比如UI界面改变,功能的增删等。此属性值不作为判断版本升级的依据,只是告知用户版本做了一定程度调整。

三、申请静态、动态权限,至少应该包括网络、读写权限

app检测出需进行版本更新,则访问服务器自动下载新版本.apk文件到本地,然后进行静默安装。

四、遇到的问题

调试时运行的是debug版,检测到版本有更新,然后自动下载存放在服务器的release版apk到本地。这样往往会由于两个版本签名不一致,导致静默安装失败。解决方案:在app下build.gradle文件中,统一debug、release签名,杜绝不一致。签名文件.jks最好放在本项目目录下,避免他人导入你的项目出现q签名文件不存在的错误

//签名配置
    signingConfigs {
        config {
            keyAlias 'myapkupdate'
            keyPassword '123456'
            storeFile file('/src/main/myupdate.jks')
            storePassword '123456'
        }
    }
    buildTypes {
        //打包配置
        buildTypes {
            release {
                //清理无用资源
                //shrinkResources true
                //是否启动ZipAlign压缩
                zipAlignEnabled true
                //是否混淆
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                //签名
                signingConfig signingConfigs.config
            }
            debug {
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                //签名
                signingConfig signingConfigs.config
            }
        }
    }

注意: 签名配置signingConfigs 一定要放在打包配置buildTypes 之前,因为脚本是按顺序执行的

不重复造轮子,以下部分方法参考网络,感谢分享!

五、关键代码实现

整体思路:手动申请权限成功后,获取后台最新版本号,并与本地版本号比对,大于则弹出对话框提示更新下载然后进行静默安装。
特别重要
确定用Bmob来版本更新的同学,请使用自己的Bmob账号,demo账号仅供测试用:

public class BmobManager {
    private static final String BMOB_SDK_ID = "改成自己的bmob账号";

一) android 6.0后手动权限申请

1)清单文件 AdroidManifest.xml

清单文件有关于网络和文件方面的,请予重视。权限过多,自行取舍(至少应保留网络、文件读取权限等):

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.asus.bmobtest">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <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.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.CHANG
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值