`

Android开发中APK升级的两种思路

阅读更多

 

       项目的第一版已经成型,要结束了,还差为了后期准备升级的功能没有实现,也就是apk升级,这种需求非常常见,今天上网查了一些资料,听项目经理给我介绍了两种常见的apk升级的思路,总结一下:

 

一、在服务器端放置一个升级的配置文件,xml或者是json的文件,这个配置文件一般要包括目前服务器上apk的版本信息、下载新版apk的URL地址以及对这个apk升级的描述,一个例子:

 

<?xml version="1.0" encoding="utf-8"?>
<info>
	<version>1.0</version>
	<description>1.0版本,速速下载</description>
	<apkurl>http://127.0.0.1:8080/new.apk</apkurl>
</info>

       

       既然服务器上有了描述版本升级的配置文件之后,那么我们就可以在app中解析这个配置文件,判断目前使用的APP版本信息和服务器上的版本信息是否一致。服务器上的apk版本信息通过解析上面的配置文件获得,目前手机上的APP的版本信息通过以下代码获得:

 

try {
	int ersionCode = getApplication().getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (NameNotFoundException e) {
	e.printStackTrace();
}

 

 之后,如果发现两个版本信息不同,就需要提醒用户升级了。

 

二、第二种思路比较简单,其实跟第一种是一样的,就是让服务器端提供一个版本升级的接口,我们Android客户端将apk的版本发送到服务器接口,然后这个接口返回是否要进行升级的信息,如果要升级,那么就提醒用户升级,否则就是不升级。因为这个方法简单,我就用这个方式了。。。

 

三、在做版本升级这个需求时用到的核心代码:

1、如果是配置文件的方式的话,需要解析服务器的xml或json文件,代码之前的文章写过,不重复了。

2、还有就是获取当前APP版本信息代码,上面给出了。

3、从服务器下载apk文件的工具类:

package util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.ProgressDialog;

/**
 * 文件下载工具类
 * 
 * @author HJW
 *
 * @date 2015年12月23日
 */
public class DownLoadUtil {
	
	/**
	 * 下载文件的操作
	 * @param serverPath 服务器文件路径
	 * @param savedPath 本地保存路径
	 * @param pd 进度条对话框
	 * @return 下载成功,返回文件对象; 下载失败,返回null
	 */
	public static File download( String serverPath, String savedPath, ProgressDialog pd ){
		
		try {
			URL url = new URL(serverPath);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			int code = conn.getResponseCode();
			if ( code == 200 ) {
				int fileSize = conn.getContentLength()/1024;
				pd.setMax(fileSize);
				int total = 0;
				InputStream is = conn.getInputStream();
				File file = new File(savedPath);
				FileOutputStream fos = new FileOutputStream(file);
				byte[] buffer = new byte[1024];
				int len = 0;
				while ( (len = is.read(buffer)) != -1 ) {
					fos.write(buffer, 0, len);
					total += (len/1024);
					pd.setProgress(total);
				}
				fos.flush();
				fos.close();
				is.close();
				return file;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	} 
	
	/**
	 * 获取服务器文件的名称
	 * @param serverPath 服务器文件路径
	 * @return 服务器文件的名称
	 */
	public static String getFileName( String serverPath ){
		return serverPath.substring(serverPath.lastIndexOf("/")+1);
	}
	
}

 4、安装apk的代码:

	/**
	 * 安装apk文件
	 * 
	 * @param file
	 *            要安装的apk文件
	 */
	private void installApk(File file) {

		Intent intent = new Intent();
		intent.setAction("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
		startActivity(intent);
	}

 

2
3
分享到:
评论

相关推荐

    将一个服务apk当做中间件封装aidl接口jar包提供给其他应用使用的框架

    AIDL(Android Interface Definition Language)是Android系统中用于进程间通信(IPC)的一种接口定义语言,它使得不同应用程序间可以定义一套统一的接口规范,进行方法调用和数据交换。 本框架的核心思路在于,...

    网狐荣耀版开发使用常见问题解答

    在网狐荣耀版开发调试过程中,复制文本时,提示“复制非法内容”,开始吓一跳,没有什么非法内容啊?也没有禁词,也没有国家不允许的内容。最后通过程序查看,原来是平台的问题。换安卓、苹果系统就好了。 四、最新...

    APP测试点--经验总结-看思路.docx

    **版本兼容性**:确保新版本的应用能与旧版本兼容,并且在升级过程中不出现问题。 #### 三、适配性测试 - **目标**:确保应用能够适应各种不同的设备特性。 - **关注点**: 1. **不同分辨率支持**:测试应用在...

    2021春招四五月份面经.pdf

    根据提供的文档内容,我们可以整理出一系列与Android开发相关的知识点,主要涵盖面试中涉及的技术细节、原理及实际应用等。下面将详细阐述这些知识点。 ### 一、腾讯PCG看点一面 1. **项目介绍** - 面试者需要...

    安卓微信相关相关-微信6.0主界面.rar

    开发者使用Android Studio作为集成开发环境(IDE),利用Android SDK来构建和调试应用。此外,XML用于定义布局和用户界面元素。 2. **UI设计**:微信6.0主界面的更新可能涉及了色彩方案、图标、按钮、字体以及整体...

Global site tag (gtag.js) - Google Analytics