`

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
分享到:
评论

相关推荐

    android应用下载安装apk升级版本实现demo适配Android10

    在Android应用开发中,版本升级是一项重要的功能,它能让用户无缝地从旧版本过渡到新版本,提升用户体验。本示例“android应用下载安装apk升级版本实现demo适配Android10”聚焦于如何在Android 10(API级别29)及更...

    Android一个apk启动另外一个apk

    综上所述,启动另一个APK在Android中主要是通过Intent完成的,涉及Intent的创建、目标指定、数据传递、权限管理和安全考量等多个方面。理解并熟练运用这些知识,能帮助开发者实现更丰富的应用交互。

    apk.rar_.apk_android_android apk_apk

    标题中的"apk.rar_.apk_android_android apk_apk"暗示了我们正在讨论的是一个与Android操作系统相关的APK文件,它被压缩在名为"apk.rar"的RAR格式文件中。APK是Android应用程序的主要文件格式,它包含了应用的所有...

    android 系统升级apk

    在Android系统中,APK(Android Package)是应用程序的基本打包格式,它包含了应用程序的所有组件,如代码、资源、图标和元数据。当我们提到"android 系统升级apk"时,通常指的是更新现有设备上的应用程序或操作系统...

    android两个APK相互调用并传参数

    通过以上方法,我们可以灵活地实现Android两个APK之间的相互调用和参数传递。在实际开发中,应根据项目需求和安全性考虑选择合适的方式。记住,始终确保代码的可读性和可维护性,添加必要的注释以方便他人(和未来的...

    Android Studio 打包apk超详细(超详细)

    ### Android Studio 打包 APK 超详细指南 #### 一、引言 在移动应用开发过程中,将应用打包成可发布的格式是非常重要的一步。对于Android应用开发者来说,使用Android Studio进行APK(Android Package Kit)打包是...

    yyg_Android20220307.apk

    yyg_Android20220307.apk

    android开发 APK签名软件

    在Android应用开发中,APK签名是一个至关重要的步骤,它确保了应用的完整性和开发者身份。当遇到"android.keystore 拒绝访问"的问题时,通常是因为权限问题或者keystore文件损坏。针对这种情况,我们可以借助第三方...

    android测试键值apk(一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,可打出相应键值).zip

    在Android平台上,开发和调试应用时,理解和测试各种输入设备的键值响应是至关重要的。这个"android测试键值apk"就是为此目的设计的一个工具,它可以帮助开发者验证应用程序对不同按键事件的处理能力,包括物理键盘...

    android 安装本地apk

    安装本地APK的方法有两种:一种是通过Android设备的设置菜单手动安装,通常需要开启“未知来源”的安装权限;另一种是通过代码实现自动化安装,这通常涉及到`PackageManager`服务的使用。在代码中,我们可以调用`...

    Android系统签名APK

    在Android系统中,APK(Android Package)是应用程序的基本打包格式,它包含了应用的所有代码、资源和元数据。为了确保安全性和防止恶意篡改,Android系统对APK进行了签名机制。"Android系统签名APK"是指使用特定的...

    android2.apk

    android2.apk

    android hdmi 输入 apk 源码 文档

    android hdmi 输入 apk 源码 文档 参考,rk3288 平台 硬件支持hdmiin,软件apk 源码参考

    Android工程打包apk方法

    下面,我们将详细介绍两种常见的Android工程打包APK的方法。 **方法1:使用Android Studio** 1. **打开Android Studio**:首先,启动Android Studio并打开你的项目。 2. **构建APK**:在菜单栏中选择`Build`,...

    android测试键值apk(一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,会把相应键值打印出来).zip

    键值测试APK,如标题和描述中提到的"android测试键值apk",是专为这一目的设计的工具。它允许开发者查看并分析用户在物理键盘、触摸屏、甚至是遥控器上输入的按键信息。这个名为`keyTest.apk`的应用程序能够帮助...

    Android 7.0下载安装APK

    本文将详细讲解如何在Android 7.0设备上下载并安装APK应用,以及在这个版本中与APK安装相关的知识点。 1. **APK 文件**:APK 是 Android 应用程序的安装包,类似于 Windows 上的 .exe 文件。它包含了应用的代码、...

    Android v4l2 camera apk

    1. **兼容性**:它支持两种缓冲区获取方式——mmap(内存映射)和userptr(用户空间指针)。mmap方式通过将内核空间的缓冲区映射到用户空间,减少了数据拷贝,提高了效率;而userptr方式则允许直接操作用户空间的...

    Android 自动安装apk

    6. **调试与部署**:在开发过程中,通常会使用ADB(Android Debug Bridge)来推送和安装APK,但这种方式需要连接电脑。而自动安装apk的DEMO则提供了一种在无PC环境下自动部署的解决方案,这对于自动化测试和远程设备...

    Visual Studio中用Xamarin开发Android应用,生成apk文件

    Visual Studio中用Xamarin开发Android应用,生成apk文件

    Gen_Signature_Android.apk

    在移动应用开发领域,尤其是Android系统中,应用的签名是确保软件安全性和完整性的关键环节。本篇文章将详细探讨Android应用签名的重要性、原理以及如何使用工具进行查看。我们将以"Gen_Signature_Android.apk"为例...

Global site tag (gtag.js) - Google Analytics