天天看点

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

场景

安卓app应用更新全流程如下

管理员登录后台系统,从浏览器上通过前端将apk以及版本号和更新说明等信息上传到后台。

后台提供app版本的管理的上传接口和增删改查的接口以及检测最新版本的接口。

app在启动后会首先调用检测最新版本的接口,获得最新版本的相关信息,如果最新版本的版本号大于当前应用的版本号则提示是否更新,点击更新后则会后后台提供的下载接口去下载最新的安装包并安装。

实现

新建一个Android项目,这里叫AppUpdateDemo

然后打开build.gradle,添加gson和okhttp的依赖

添加位置如下

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后打开AndroidManifest.xml添加相关权限

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

因为在下载完apk之后需要打开下载的apk安装包进而调出安装,而在安卓7.0以上禁止在应用外部公开file://URL

所以需要在AndroidManifest.xml中做如下配置

配置位置如下

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

一定要注意这里代码中的包名要修改为跟自己的包名一致

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后上面的配置会指向一个res下xml下的file_path.xml的路径,此时在Android Studio中会报红色提示,将鼠标放在红色提示上,

根据提示新建此文件

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

回车之后,点击OK即可

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

建立成功之后的路径为

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

建立成功之后将其代码修改为

这样在下载安装包之后就能调起安装

然后在包下新建config文件夹,然后新建一个UpdateConfig类

再新建一个update目录,此目录下新建三个类

第一个类是UpdateCheck

此类主要是一些工具类方法。

使用时需要将此类中下载apk的地址修改为自己后台服务器的下载地址

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

这里需要下载地址进行拼接并重新赋值的原因是,后台在上传apk时调用的是通用的apk上传接口

返回的是在服务器上的完整路径,而在下载时调用的是通用的文件下载接口,传递的是文件在服务器上的

全路径。

第二个类是UpdateDialog

此类主要是声明一些弹窗。

第三个类是UpdateFile

此类主要是用于校验文件、获取文件大小和下载与安装文件的一些方法

新建完这三个工具类之后,再在包下新建一个service目录,在此目录下新建一个Service

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后修改名字为UpdateService

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

点击Finish之后,会在AndroidManifest.xml中自动添加一个service

然后修改UpdateService的代码

将此service的checkUrl修改为自己的服务器的ip和端口

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

此service中用到的将服务端的远程apk下载到本地的路径为临时文件路径,在data/data/包名下cache目录下

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后还需要在包下新建bean包,在此包下新建版本更新接口返回的json数据对应的实体类

后台检测更新的接口返回的json数据为

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后根据此json数据生成bean的方式参考如下

AndroidStudio中安装GsonFormat插件并根据json文件生成JavaBean:

javascript:void(0)

然后根据json数据生成的UpdateBean为

最后项目的总目录为

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后打开MainActivity

在OnCreate方法中进行检测是否已经开启了悬浮窗的权限,如果已经开启了悬浮窗的权限

则直接通过

的方式启动service进行是否更新的检测。

否则的话会通过

跳转到开启悬浮窗权限的页面,并指定一个请求码为212,然后在MainActivity中重写onActivityResult方法

就能通过请求码获取到跳转到开启悬浮窗页面的返回结果

如果已经开启了则直接检测更新,否则的话会弹窗提示

MainActivity完整示例代码

安卓端完整示例代码下载

然后就是搭建后台服务端。

这里使用了若依的前后端分离的版的框架搭建的后台服务。

若依前后端分离版手把手教你本地搭建环境并运行项目:

若依微服务版手把手教你本地搭建环境并运行前后端项目:

上面是基于SpringBoot搭建的前后端分离的项目

下面是基于SpringCloud搭建的微服务版的项目

最终都是搭建一个前端项目和后台服务接口项目。

这里以后台微服务版的版的基础上去搭建后台接口

首先是新建通用的文件上传和下载的接口,注意此接口一定要做好权限验证与安全管理

在这两个接口中用到的工具类方法有UploadUtil.save_file

和工具类FileUtils.check_folder

以及DateUtils.datePath(),是用来生成日期文件目录的方法

通用的文件上传与下载的接口做好之后就是版本检测更新的接口

首先我们需要设计一个数据库来用来存储app的版本信息

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后使用若依自带的代码生成工具去生成前后端的代码,前端代码一会也要修改,这里先找到生成的Controller

下面调用的service和mapper都是生成的对单表的进行增删改的代码

这里主要是添加一个检测版本更新的接口,即上面的获取最新版本信息。

其最终执行mapper方法为

此接口从数据库中查询出来版本号最高的那条记录并将此记录的相关信息返回给app端

app获取到版本好之后跟自己的当前的版本的版本号进行对比,如果高于当前版本则提示更新。

app端版本号的设置位置在

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

 此接口的地址就是对应安卓端UpdateService中的checkUrl的地址。

然后就是修改前端页面,将vue页面修改如下

除了自动生成的主要修改新增的页面,添加一个apk安装包上传的控件el-upload

调用的是前面的通用上传接口,会将apk安装包上传到服务器上并将在服务器上的地址返回,然后在点击新增页面的确认按钮后将

安装包地址一并提交到后台的新增接口,后台将其存储到数据库。

vue页面调用的js方法为

然后新增完一个版本之后就会在数据库中新增一个高版本的记录

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

就能实现后台将新版本的apk传递到后台,然后app在启动后会查询最新版本的信息,如果高于当前版本则会将apk下载与安装

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新

然后点击更新,就会下载安装包并安装

Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新