Android应用程序的自动更新升级

栏目: IOS · Android · 发布时间: 6年前

内容简介:刚入手android一个多月,因公司需要提交技术文档,才写了这个demo测试,想保存下来,以备后用!有什么不对的地方欢迎大家指正,这个示例也是参考了网上别人的demo自己做的。很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了Linux系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们开发人员利用Android自带的API就可以实现。1、本示例用来实现单个应用程序的自身升级

刚入手android一个多月,因公司需要提交技术文档,才写了这个demo测试,想保存下来,以备后用!有什么不对的地方欢迎大家指正,这个示例也是参考了网上别人的demo自己做的。

Android应用程序的升级(自身升级)

一、       引言:

很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了 Linux 系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们开发人员利用Android自带的API就可以实现。

二、     功能说明:

1、本示例用来实现单个应用程序的自身升级

2、程序启动时,连接tomcat7 web服务器进行版本的检测,若有新版本则提示更新

3、将从web服务器下载的新版本的APK文件放到sdcard中

4、监听新版本的APK应用是否安装完成,如果是,则将下载的apk文件从sdcard中删除

三、     程序框架流程:

Android应用程序的自动更新升级

四、     环境说明:

1、 服务器端:Ubuntu下的tomcat7web服务器,安装后默认端口是8080,Android模拟器访问时要将apk文件放到 /var/lib/tomcat7/webapps/ROOT/目录下,Android模拟器的访问方式是http://10.0.2.2/NewAppSample.apk

2、 Android模拟器端的开发环境:

Ubuntu+eclipse+ADT

五、     流程详解及关键点说明:

(一)   新版本的应用程序(NewAppSample)准备:

a)  新建一个android工程,编辑其版本代码为2,高于我们的旧版本用于更新测试,版本名称为1.0.1

Android应用程序的自动更新升级

b)  编辑应用程序对应的版本信息文件version.json

Android应用程序的自动更新升级

说明:后缀为json的文件是一种轻量级的数据交换格式,比xml要快很多,适合于小型数据的网络交换,其实质类似键值对,键用字符串的形式表示与其值用冒号隔开,能存储多种数据类型。

(二) 旧版本的应用程序准备:

1、在其AndroidManifest.xml中定义版本代码为versionCode=”1”让其自动生成即可,我们主要利用程序的版本代码的高低来判断是否有新的版本,用于更新。

2、我们在应用程序启动时自动联网检测是否有新的版本,即在onCreate()函数中进行联网检测。

a)  从服务器获得读取版本信息文件version.json,我们单独写了一个类来实现,用其GetUpdateInfo静态方法来返回读取的version.json,返回形式是字符串。代码如下

Android应用程序的自动更新升级

b)  获得当前旧的应用程序版本信息,我们单独封装了一个类CurrentVersion,用其中的静态方法来获得当前应用的版本信息,包括程序的名称版本,代码版本,和应用程序名字。

代码如下:

Android应用程序的自动更新升级

c)  将从服务器version.json获得的字符串解析出我们需要的版本信息

Android应用程序的自动更新升级

d)  进行代码版本的比较,提示是否更新当前的应用。

Android应用程序的自动更新升级

(三)    显示更新提示框

Android应用程序的自动更新升级

Android应用程序的自动更新升级

(四)    下载新的APK文件

Android应用程序的自动更新升级

下载完成时要将进度条对话框取消并进行是否安装新应用的提示

Android应用程序的自动更新升级

(五)    安装新的应用:

Android应用程序的自动更新升级

Intent的setDataAndType的一个参数是应用程序的绝对路径(在sdcard中),第二个参数是文件对应的MIME类型,android系统中的APK文件默认为application/vnd.android.package-archive,该文件的MIME类型在tomcat服务器中的/var/lib/tomcat7/conf文件中有对应。

(六)    网络检测代码和sdcard中APK文件的删除

Android应用程序的自动更新升级

Android应用程序的自动更新升级

关键说明:若不用广播接收的方式,直接在安装后的代码中实现删除下载的APK文件的话,会出现还没安装完成就把APK文件删除了的情况。在进入安装新的APK文件时会进入系统的提示进行一步一步的安装操作,所以我们无法判断应用程序什么时候完全安装完成。我们用监听(应用程序安装或替换的)广播的方式来实现,当接受到应用程序有ADDED或则REPLACED的广播时我们再执行APK文件的删除操作。

六、  Demo效果图例:

1.提示更新

Android应用程序的自动更新升级

2.下载新版本的应用

Android应用程序的自动更新升级

3.提示是否安装

Android应用程序的自动更新升级

4.进入系统安装提示

Android应用程序的自动更新升级

5.正在安装

Android应用程序的自动更新升级

6.安装完成

Android应用程序的自动更新升级

       7.打开新版本的应用

Android应用程序的自动更新升级

七、      完成过程中出现的问题以及关键点说明:

1.      Android模拟器连接tomcat7服务器下载时访问地址IP不能用localhost,因为android模拟器把localhost当成自己了,应该用10.0.2.2测试

2.      下载的APK文件和版本信息的json文件应该放在/var/lib/tomcat7/webapps/ROOT/目录下不然无法访问到。

3.      JSON文件的解析方式参考JSON附文理解。

4.      示例中涉及到的权限:

a)        与sdcard相关的权限:示例中我们需要在sdcard中创建和删除文件的权限和sdcard的读写权限。

Android应用程序的自动更新升级

b)        与网络相关的权限:示例中我们需要访问网络的权限和获得网络状态的权限(测试网络是否可用),示例中我们只测试了网络是否可用,我们还可以添加网络是否已经连接的进一步判断。

Android应用程序的自动更新升级

5.      监听应用程序是否安装完成

在工程的Manifest.xml文件中添加要接受的广播action,这里我们监听应用程序本身的替换和系统中应用程序的添加两个action,应用程序的替换监听好像只能监听自身被替换,这一点待考察。

Android应用程序的自动更新升级

八、 JSON附文:

JSON的定义:

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于 C语言 体系的行为。

为什么用JSON?

很简单,因为它比xml快十倍。

有哪些应用案例?

Twitter、豆瓣、facebook等公司的开放api,一般这些服务都会提供多种格式供开发人员选择(xml、json、atom等),而在手机终端上,我们自然希望给用户最佳体验,所以我选用最有效率的json格式。

JSON的结构:

Name/ValuePairs             类似所熟知的Keyedlist、Hash table、Disctionary和Associative array。在Android平台中同时存在另外一个类“Bundle”,某种程度上具有相似的行为。

org.json.JSONObject     Array,一组有序的数据列表。

Android中 JSON相关的类(4个)和Exceptions(1个):

lJSONArray

lJSONObject

lJSONStringer

lJSONTokener

lJSONException

JSONObject:

这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{“JSON”: “Hello, World”},最外被大括号包裹,其中的Key和Value被冒号”:”分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put(“JSON”, “Hello, World!”),在Key和Value之间是以逗号”,”分隔。

Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

有两个不同的取值方法:

get(): 在确定数值存在的条件下使用,否则当无法检索到相关Key时,将会抛出一个Exception信息。

opt(): 这个方法相对比较灵活,当无法获取所指定数值时,将会返回一个默认数值,并不会抛出异常。

JSONArray:

它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。

同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

JSONStringer:

根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

根据下边的实例来了解其它相关信息:

string myString= new JSONStringer().object()

.key(“AR”).value(“www.Androidres.com!”)

.endObject()

.toString();

结果是一组标准格式的JSON text:{”AR”:”www.Androidres.com!”}

其中的.object()和.endObject()必须同时使用,是为了按照Object标准给数值添加边界。同样,针对数组也有一组标准的方法来生成边界.array()和.endArray()。

JSONTokener:

这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。  

JSONException:

是JSON.org类抛出的异常信息。

来源: http://www.cnblogs.com/ljf181275034/articles/3268200.html


以上所述就是小编给大家介绍的《Android应用程序的自动更新升级》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Creative Curve

The Creative Curve

Allen Gannett / Knopf Doubleday Publishing Group / 2018-6-12

Big data entrepreneur Allen Gannett overturns the mythology around creative genius, and reveals the science and secrets behind achieving breakout commercial success in any field. We have been s......一起来看看 《The Creative Curve》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具