admin管理员组文章数量:1558103
前言:代码中账号只作展示之用,请勿上传信息,多谢!无法成功导入demo的同学,请下载as4.0。先前无法导入的同学,是因为之前demo的签名文件没有存放到本工程中。最新demo已经更改,感谢同学反馈。
本文版本更新的.apk文件存放于Bmob服务器,使用其它方式存放亦可,思路通用。本文提供:权限申请、异步下载、静默安装以及版本更新核心思路。
Bmob数据上传请查阅官方文档:http://doc.bmob/data/android/develop_doc/,文中不再赘述。最新demo下载地址:
链接:https://pan.baidu/s/1DAAiqQzm8O_Y4pjy_5ny5w
提取码:5ivc
demo基于 androidx,最新版AS4.0导入它完全没问题 。固执使用V4,V7包的同学,自行导包,代码基本一致。建议官网下载AS 4.0,无需翻墙,速度很快: https://developer.android.google/studio 。安装请参考这篇: https://blog.csdn/qq_41976613/article/details/91432304
demo从版本号1, 成功更新到版本号 2的样子:
gif演示运行过程。看不到动图的,页面重新刷新下
demo的流程是这样的:
-
VersionCode 为1时,先生成.jks签名文件
-
生成版本更高的.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:andro
xmlns:tools="http://schemas.android/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
版权声明:本文标题:android 自动 检测 版本更新 自动下载 静默安装(超详细 有demo) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727356957a1110208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论