版本更新

思路是这样:

1、在android应用每次登录的时候,通过网络访问远程的配置文件(当然版本控制文件可以多种格式,xml、json、甚至txt……依据个人兴趣而定,知道怎么解析就行),确定要不要更新(若版本号改变,那么就更新;版本控制文件由开发者根据版本变化手动修改;我这里采用的json文件写配置)

2、通过解析版本配置文件,将所得版本号与现有应用的版本号进行比对,判断是否需要下载更新;

3、当然版本控制文件可以包含新的apk的URL,新版本特性……附加信息;

4、在提供版本控制文件的同时,还需要服务器安放新版本的apk文件,通过URI指定新版本的apk地址供远程访问下载到本地手机SD卡;

5、这里要非常注意的一个问题:版本更新需要appkey的统一,旧版本和新版本都需要是已签名的apk,否则安装更新无法通过。(前面几步按部就班就行,我在测试的过程中apk文件下载到本地,可就是安装不上,显示“安装为完成”,然后每次都提示安装更新,就是这个问题,甚是无语。由于是独自作战,这个问题竟然困扰了我好几天,加了那么多的android技术群,发了n遍的“拜求贴”,就是没人反馈我,悲痛欲绝,还是从一篇大拿的博客上找到了问题根源:app key)

那篇博文如下:http://blog.csdn.net/shimiso/article/details/6440282

android的客户端更新功能,相信只有做过的才知道其中的辛酸,一要做好断点续传,二要做好数据库的初始化工作,三要做好签名,四要做好版本校验的算法并且能显示动态进度条和百分比。断点续传好做,但是数据库初始化麻烦点,我们的做法是把sqlite库文件直接从raw下拷贝至sd卡中,并设置了sqlite的读取库路径指向它,感觉这样好一点。签名一开始不知道,每次覆盖都提示安装未完成,后来才明白为了保证应用的唯一性,它就像是身份证一样,其他没什么作用,和塞班的签名不是一回事,封装apk必须保证在同一签名文件下才可相互覆盖安装!

<manifest package="com.cnblogs.tianxia.subway"
	android:versionCode="1" <!--Integer类型,系统不显示给用户-->
	android:versionName="1.0"<!--String类型,系统显示用户-->
></manifest>


json解析方法:

  String jsonversion = NetworkTool.getContent(VersionUri);
  JSONArray array = new JSONArray(jsonversion);
   // 解析Version网页,获取版本号
  if (array.length() > 0) {
   JSONObject obj = array.getJSONObject(0);
   NowVersion  = obj.getString("verCode");
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }


json文件:update.json,放在远程服务器

[{"appname":"Update Client","apkname":"update.apk","apkUrl":"http://open.sina.com.cn/android/update.apk","verCode":"1","verName":"1.0"}]

有了新版本的应用apk,首先上传签名后的apk至指定的服务器地址(如本例:strURL="http://open.sina.com.cn/update.apk"),然后修改json文件的vercode、vername,注意apk和json的一致!




y一、服务器端和客户端设计服务器端设计:

设计方法应该有很多,下面介绍我的一种方法:

a.首先在服务器项目下建立一个文件夹来存放APK安装文件:

 b.其次在src下建立一个资源文件,apkVersion.properties,属性定义如下:


apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件  

apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件c.定义一个servlet来获取资源中的信息:

//获取资源文件信息 

//获取资源文件信息

 

获取资源,然后生成JSON字串返回客户端处理。 注:当客户端版本有更新,服务器端只要把APK文件拷贝到APK目录,然后更新apkVersion.properties文件中的信息就可以了,切记。

客户端设计: 

1、 客户端首先获取服务器的版本信息(http方式获取)。 

2、 如何获取本地客户端的版本信息 

如下参考代码:


/**   * 得到本地应用的版本信息    *

/** * 得到本地应用的版本信息 * 

 

3、 版本比较,如果版本相同,则不执行更新,不同才进行更新操作。 

这里插入客户端版本设置介绍: 

客户端版本设置在AndroidManifest.xml文件中,里面有两个属性可进行版本信息设置, android:versionCode="1" 版号 android:versionName="1.1" 版本名称 这个版本号需要和服务器端对应。 

4、 需要的权限设置

Sdcard访问权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  
访问网络权限: uses-permission android:name="android.permission.INTERNET"   

5、 更新安装 当用户点击应用时执行检查更新。相关代码参考:

 //弹出框提示

 //下载

 //更新升级


另一种版本安装方式

market://search?q=pub:yale

直接发送安装路径或者market://search?pid=xxxx"路径交给market或者下载管理器去下载,安装需要用户点击安装文件安装.

Uri uri = Uri.parse("http://192.168.1.121:8085/RadioCom_Release1.1_C.apk");
Intent intent = new Intent(
Intent.ACTION_VIEW, uri);
startActivity(intent);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值