关于android客户端在线版本更新的总结(json源码)
2012-03-24 11:39
555 查看
作为新手,对于这个问题,我直接采用的方法就是网上找源码;互联网是个神奇的东西,特别是像android这样开源的语言(不过话说开源开的有点儿过,平台多元化,苦煞了像我这样靠着它吃饭的程序猿),只要你想研究,总能找到有利用价值的解决方案。
废话不多说,版本更新一篇文章说清楚,思路是这样:
1、在android应用每次登录的时候,通过网络访问远程的配置文件(当然版本控制文件可以多种格式,xml、json、甚至txt……依据个人兴趣而定,知道怎么解析就行),确定要不要更新(若版本号改变,那么就更新;版本控制文件由开发者根据版本变化手动修改;我这里采用的json文件写配置)
2、通过解析版本配置文件,将所得版本号与现有应用的版本号进行比对,判断是否需要下载更新;
3、当然版本控制文件可以包含新的apk的URL,新版本特性……附加信息;
4、在提供版本控制文件的同时,还需要服务器安放新版本的apk文件,通过URI指定新版本的apk地址供远程访问下载到本地手机SD卡;
5、这里要非常注意的一个问题:版本更新需要appkey的统一,旧版本和新版本都需要是已签名的apk,否则安装更新无法通过。(前面几步按部就班就行,我在测试的过程中apk文件下载到本地,可就是安装不上,显示“安装为完成”,然后每次都提示安装更新,就是这个问题,甚是无语。由于是独自作战,这个问题竟然困扰了我好几天,加了那么多的android技术群,发了n遍的“拜求贴”,就是没人反馈我,悲痛欲绝,还是从一篇大拿的博客上找到了问题根源:app key)
那篇博文如下:/article/1354113.html
android的客户端更新功能,相信只有做过的才知道其中的辛酸,一要做好断点续传,二要做好数据库的初始化工作,三要做好签名,四要做好版本校验的算法并且能显示动态进度条和百分比。断点续传好做,但是数据库初始化麻烦点,我们的做法是把sqlite库文件直接从raw下拷贝至sd卡中,并设置了sqlite的读取库路径指向它,感觉这样好一点。签名一开始不知道,每次覆盖都提示安装未完成,后来才明白为了保证应用的唯一性,它就像是身份证一样,其他没什么作用,和塞班的签名不是一回事,封装apk必须保证在同一签名文件下才可相互覆盖安装!
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();
}
上代码:关键类——UpdateActivity.java
NetworkTool.java
json文件:update.json,放在远程服务器
有了新版本的应用apk,首先上传签名后的apk至指定的服务器地址(如本例:strURL="http://open.sina.com.cn/update.apk"),然后修改json文件的vercode、vername,注意apk和json的一致!
附源码:android在线版本更新源代码http://download.csdn.net/detail/dignity568/4168683
废话不多说,版本更新一篇文章说清楚,思路是这样:
1、在android应用每次登录的时候,通过网络访问远程的配置文件(当然版本控制文件可以多种格式,xml、json、甚至txt……依据个人兴趣而定,知道怎么解析就行),确定要不要更新(若版本号改变,那么就更新;版本控制文件由开发者根据版本变化手动修改;我这里采用的json文件写配置)
2、通过解析版本配置文件,将所得版本号与现有应用的版本号进行比对,判断是否需要下载更新;
3、当然版本控制文件可以包含新的apk的URL,新版本特性……附加信息;
4、在提供版本控制文件的同时,还需要服务器安放新版本的apk文件,通过URI指定新版本的apk地址供远程访问下载到本地手机SD卡;
5、这里要非常注意的一个问题:版本更新需要appkey的统一,旧版本和新版本都需要是已签名的apk,否则安装更新无法通过。(前面几步按部就班就行,我在测试的过程中apk文件下载到本地,可就是安装不上,显示“安装为完成”,然后每次都提示安装更新,就是这个问题,甚是无语。由于是独自作战,这个问题竟然困扰了我好几天,加了那么多的android技术群,发了n遍的“拜求贴”,就是没人反馈我,悲痛欲绝,还是从一篇大拿的博客上找到了问题根源:app key)
那篇博文如下:/article/1354113.html
android的客户端更新功能,相信只有做过的才知道其中的辛酸,一要做好断点续传,二要做好数据库的初始化工作,三要做好签名,四要做好版本校验的算法并且能显示动态进度条和百分比。断点续传好做,但是数据库初始化麻烦点,我们的做法是把sqlite库文件直接从raw下拷贝至sd卡中,并设置了sqlite的读取库路径指向它,感觉这样好一点。签名一开始不知道,每次覆盖都提示安装未完成,后来才明白为了保证应用的唯一性,它就像是身份证一样,其他没什么作用,和塞班的签名不是一回事,封装apk必须保证在同一签名文件下才可相互覆盖安装!
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();
}
上代码:关键类——UpdateActivity.java
NetworkTool.java
package com.android.Update; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EncodingUtils; public class NetworkTool { /** * 获取网址内容 * @param url * @return * @throws Exception */ public static String getContent(String url) throws Exception{ StringBuilder sb = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpParams httpParams = client.getParams(); //设置网络超时参数 HttpConnectionParams.setConnectionTimeout(httpParams, 3000); HttpConnectionParams.setSoTimeout(httpParams, 5000); HttpResponse response = client.execute(new HttpGet(url)); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "GB2312"), 8192); String line = null; while ((line = reader.readLine())!= null){ //line = EncodingUtils.getString(line.getBytes("GB2312"), "UTF-8"); sb.append(line + "\n"); } reader.close(); } return sb.toString(); } }
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的一致!
附源码:android在线版本更新源代码http://download.csdn.net/detail/dignity568/4168683
相关文章推荐
- android 在线版本更新源码,全注释,4.0能跑!第一次写,请多指教。
- 【Android】两步搞定AndroidSDKManager在线更新SDK版本失败问题
- Android版本更新教程和源码
- 关于Android 版本更新
- web客户端,服务端,android客户端关于JSON的使用分析
- android开发关于打包一个总结(后续一直更新)
- 关于android提示版本更新
- Android——关于android应用如何更新版本?
- Android应用检查版本与更新源码
- android 源码开发 关于编译等小知识点总结
- 关于学习的几点总结——Android源码学习有感
- json解析android客户端源码
- Android版本更新知识(检测、升级)总结
- android 客户端版本检测更新,服务下载,通知栏显示
- 转 android客户端版本检测更新,服务下载,通知栏显示
- [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)
- Android关于apk版本更新方法
- 关于博客更新及Android记事本源码问题
- [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)
- (android实战)应用在线版本更新