在应用程序的 升级/维护 策略中, 版本是一个关键的组成部分.
  • 用户需要了解在他们的设备上所安装的应用程序的版本的特定信息, 以及已安装程序的升级版本可用的情况.
  • 其他应用程序 - 作为同一个套件中发布的其他应用程序 - 需要从系统中查询你的应用程序的版本号, 来确认兼容性和识别依赖情况.
  • 发布应用所依存的服务平台(如Android Market)也可能需要查询你的应用程序的版本号, 然后可以向用户显示版本号. 它们也可能需要通过检查应用的版本号来确认兼容性, 并建立升级/降级的关系.
Android系统本身并不检查应用程序版本信息, 比如在升级,兼容性等等上, 不作强制限制. 取而代之的是, 仅由用户或应用程序自身负责对版本做任何的强制限制.
Android系统根据其manifest文件中minSdkVersion属性进行版本兼容性检查. 这允许一个应用程序指定兼容的最小系统API版本.

设置应用程序版本号

在应用程序的manifest文件中定义应用程序版本信息.
2个必须同时定义的属性:
  • android:versionCode — 整型, 相对于其他种类的版本号而言, 表示应用程序代码的版本. 其值是个整型,因此其他应用程序可以在程序编码中判断它, 例如检查升级或降级关系. 可以对其设置任何值, 然而应当确保每一个后续发布的应用程序使用更大的值. 尽管系统并不强制执行这种规则, 但是每个后续版本使用增加的数字值是标准作法. 典型做法是, 你发布的第一个版本的versionCode为1, 然后以后的每个发布版本单调递增, 而不管这个发布版本是否是一个主要或者次要的发布版本. 这表示 android:versionCode 值没有必要与用户可见的应用程序发布版本号有特别的相似之处. 同时,应用程序和发布平台不应将此版本值呈现给用户.
  • android:versionName --- 字符串值,向用户显示的应用程序代码的发布版本号.  此值是一个字符串, 因此可以用<major>.<minor>.<point>的形式描述应用程序版本, 或者以任何其他类型的绝对或相对版本号标识的形式. 相对于 android:versionCode, 除了让应用程序向用户显示它以外, 系统不打算将这个值用于任何内部使用目的. 应用发布平台可能会将 android:versionName 值解析出来显示给用户. 在manifest文件的<manifest>元素中同时定义这些个版本相关属性.
例子如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.package.name" 
        android:versionCode
        android:versionName> 
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        ... 
    </application> 
</manifest>
在例子中, 注意 android:versionCode 值显示当前的.apk包含了应用程序代码的第二个发布, android:versionName字符串表现的是一个小的后继发布版本. 
 
Android 提供了一个API以让应用程序向系统查询版本信息. 使用 PackageManager 的 getPackageInfo(java.lang.String, int)方法.例如:
PackageManager manager = this.getPackageManager();
try {
        PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
        appVersion = info.versionName; // 版本名,versionCode同理
} catch (NameNotFoundException e) {
        e.printStackTrace();
}
 

指定应用程序的系统API需求

如果应用需要指定一个Android平台的最小版本号, 或者是设计为仅支持一个特定的Android平台版本范围, 可以在应用程序的manifest文件中以API Level标识符形式指定. 这么做确保应用可以仅被安装在运行着兼容版本的Android设备中.
要指定API Level, 在应用程序的manifest文件中添加一个<uses-sdk>元素, 然后指定一个或多个以下这些属性:
  • android:minSdkVersion — 应用程序运行的最小Android平台版本, 由平台的API Level标识指定.
  • android:targetSdkVersion — 指定应用设计运行的API Level. 在一些情况下, 这允许应用程序使用目标API Level中的manifest元素或者行为, 而不是被限制在仅使用最小API Level中的元素.
  • android:maxSdkVersion - 应用设计运行的Android平台的最大版本, 由平台的API Level标识指定. 重要: 在使用这个属性之前, 请阅读 <uses-sdk> 文档.
当准备安装应用时, 系统检查这些个属性的值, 并与系统版本比较. 如果 android:minSdkVersion 的值比系统版本号要高, 系统将中断应用程序的安装. 类似地, 系统仅在应用程序的 android:maxSdkVersion 和平台版本兼容的的情况下安装应用程序.
如果在manifest中没有指定这些属性, 系统会假设应用程序和所有平台版本兼容, 没有最大API Level的限制.
若要为应用程序指定最小平台版本, 需要在<manifest>下添加一个<uses-sdk>子元素, 然后定义android:minSdkVersion属性.
更多的信息, 请参见 <uses-sdk> manifest元素和API Level的文档.

Android应用程序版本号管理(官方文档中文版)的更多相关文章

  1. 人工智能系统Google开源的TensorFlow官方文档中文版

    人工智能系统Google开源的TensorFlow官方文档中文版 2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,机器学习作为人工智能的一种类型,可以让软件根据大量的 ...

  2. TestNG官方文档中文版(2)-annotation(转)

    1. 介绍    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...

  3. Istio官方文档中文版

    Istio官方文档中文版 http://istio.doczh.cn/ https://istio.io/docs/concepts/what-is-istio/goals.html 为什么要使用Is ...

  4. TensorFlow 官方文档中文版【转】

    转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远 ...

  5. TensorFlow 官方文档中文版

    http://wiki.jikexueyuan.com/list/deep-learning/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远地影响着世界 ...

  6. 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  7. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  8. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  9. TensorFlow 官方文档中文版 --技术文档

    1.文档预览 2.文档下载 TensorFlow官方文档中文版-v1.2.pdf 提取码:pt7p

随机推荐

  1. **【ci框架】PHP的CI框架集成Smarty的最佳方式

    因为CI自带的模板功能不是很方便,所以大家普遍采用集成Smarty的方式来弥补CI这方面的不足. 本人在网上看了不少CI集成Smarty的教程,包括咱们CI论坛里面的一个精华帖子 http://cod ...

  2. C# 构造函数的使用方法

    C#构造函数是一个特殊的类方法.在很多方面,包括访问修饰符.重载以及参数列表的语法等方面,构造函数与普通的方法是类似的.然而,在使用方面以及行为方面,构造函数也具有许多特殊的语法和语义规则. 下面列出 ...

  3. URAL 1073 Square Country(DP)

    题目链接 题意 :这个人要投资地,每块地都是正方形并且边长都是整数,他希望他要买的地尽量的少碎块.每买一块地要付的钱是边长的平方,而且会得到一个一份证书,给你一个钱数,让你求出能得到的证书个数. 思路 ...

  4. hdu1233

    http://acm.hdu.edu.cn/showproblem.php?pid=1233 最小生成树,kruskal算法 #include<stdio.h> #include<m ...

  5. 原版win7镜像IE主页被篡改?

    装了几次系统,镜像是从“MSDN我告诉你”上下载的,但是每次装完,发现IE主页不是microsoft的官方网页,而是www.3456.com. 这就奇了怪了,难道“MSDN我告诉你”提供的不是原版镜像 ...

  6. Linux Shell 数字计算与比较

    直接上脚本, 使用$(())以及$[]进行数字计算 数值比较:n1 -eq n2检查n1是否等于n2         n1 -le n2检查n1是否小于等于n2n1 -ge n2检查n1是否大于等于n ...

  7. SaaS系列介绍之十五: SaaS知识重用

    1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...

  8. mysql建表时拆分出常用字段和不常用字段

    一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住 ...

  9. Android给listview的item设定高度

    在item的layout文件中,用android:layout_height设置item的高度.运行,高度设置无效. 解决办法: 给item设定minHeight,即可. -------------- ...

  10. GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别

    GetKeyState.GetAsyncKeyState.GetKeyboardState函数的区别: 1.BOOL GetKeyboardState( PBYTE lpKeyState );获得所有 ...