在一年之中,也有可能只是几个月后,你会发布你的Android应用程序。但是这中间有可能会发布新的版本的Android系统,比如:6.0+。

你肯定希望你的应用可以向前兼容,当用户升级到新的Android系统时候,你的应用调用的系统API不会编译失败,也不会Crashing。

这时候就要考虑一下三个参数了:compileSdkVersionminSdkVersion, and targetSdkVersion (它们标识什么版本的API可以使用,应用兼容的版本,编译需要的API版本)

compileSdkVersion

告诉Gradle,用哪个版本的sdk编译你的应用,如果用到高版本的API,那就需要把compileSdkVersion设置为API对应的高版本。需要指出的是,改变编译的版本,不会改变应用运行时候的展现,但是新的警告或者报错可能会出现。compileSdkVersion不会包含到你的应用中,它只是纯粹的编译应用。所以,当编译时期遇见的错误和警告,最好的解决方案就是修复它们。

强烈推荐把你的compileSdkVersion设置为最新的,用最新的sdk编译应用,会检查最新的sdk对现有的代码的影响,避免已经过时的API,并且准备用最新的API,那样会使的你的应用在兼容性方面更加健壮。

需要提示的是,如果你使用了Support Library,必须使用最新的sdk进行编译,比如,为了使用 23.1.1 Support Library,你的编译版本最少为23(第一位数字一定要匹配),一般情况下,新的Support Library 发布都会伴随一个platform version提供更好的兼容。

minSdkVersion

如果编译版本设置使用最新的APIs,那么你的minSdkVersion就要设置能够使用最新APIs的版本。minSdkVersion是Google Play Store用来判定你的应用能够安装到那些设备上。也就是你应用兼容的最低版本,同时,对于开发者,当你使用lint 检查你的应用时候,会提示你哪些APIs不兼容最低版本(minSdkVersion),这时候你就要根据系统的版本来使用不同APIs,以避免运行时遇见的各种意想不到的Crashing。

一定要时刻记住你所使用的第三方库,比如 Support Libraries orGoogle Play services, 它们所支持的minSdkVersion是否跟你的应用冲突,是根据它们调整你的minSdkVersion,还是为了兼容你的minSdkVersion,而判定不同的系统版本再使用第三方的库,二者取其一,当然,如果你非要在你兼容低版本的情况下使用高版本的库,那么需要你使用 tools:overrideLibrary marker,来设置更详细的AndroidMainfest.xml.

targetSdkVersion

targetSdkVersion是Android提供了向前兼容性的主要方式。最好的方式就是把它设置最新的。

三者之间关系:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

理想的关系应该是这样:

minSdkVersion (lowest possible) <= 
targetSdkVersion == compileSdkVersion (latest SDK)

Android之 compileSdkVersion, minSdkVersion, and targetSdkVersion的更多相关文章

  1. 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion

    对这几个概念模模糊糊,看到一篇文章就记录下来. 当你发布一个应用之后,(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本.这对你的应用意味着什么,所有东西都不能用了?别担心 ...

  2. compileSdkVersion, minSdkVersion 和 targetSdkVersion的选择(copy)

    英文原文:Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion 作者:Ian Lake,Google Android ...

  3. compileSdkVersion,minSdkVersion 和 targetSdkVersion

    compileSdkVersion(Eclipse中叫做build target) 1.在eclipse中位于项目根目录中的project.properties文件中 2.在studio中位于项目中的 ...

  4. compileSdkVersion, minSdkVersion 和 targetSdkVersion详解

    API level API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和An ...

  5. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 (转载)

    本文参考了谷歌开发者文档:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#provisional 如果 ...

  6. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 标签: build targetminSdkVersiont ...

  7. Android的minSdkVersion,targetSdkVersion,maxSdkVersion

    参考http://developer.android.com/guide/topics/manifest/uses-sdk-element.html API Level 是一个整型值,表示Androi ...

  8. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    问题引入:   有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%.   问题排查发现,是sdk的target设置为23导致,修改为21则 ...

  9. 彻底明确怎样设置minSdkVersion和targetSdkVersion

    minSdkVersion和targetSdkVersion相信非常多人都不太理解.我在网上也看了很多关于这两者差别的文章,感觉说的都非常模糊.直到我在stackOverFlow看到Android M ...

随机推荐

  1. zookeeper_01:zookeeper概述

    应对场景: 相对于开发在一台计算机上运行的单个程序,如何让一个应用中的多个独立的程序协同工作是一件非常困难的事情.开发这样的应用,很容易让很多开发人员陷入如何使多个程序协同工作的逻辑中,最后导致没有时 ...

  2. Redis操作命令大全(NodeJS版)

    /*—————————————————————————————— * 本文案例基于以下运行环境: * 系统: CentOS 5.x * NodeJS版本: 0.9 以上 * Redis版本: 2.8 ...

  3. 《javascript权威指南》阅读笔记 1

    3.1-3.5 3.1 数字 3.1首先声明了在JS中的数字是不区分整数值和浮点数值的.其次给出了js浮点类型表示的范围:最大值是±1.7976931348623157×10^308,最小值±5×10 ...

  4. Java IO流分析整理 .

    Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...

  5. 小记:对Android网络下载工具的初步封装!(包括json,字符串下载(volley),和图片下载(glide))

    import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ...

  6. 浅谈38K红外发射接受编码

    之前做接触过一次红外遥控器,现在有空想用简单的话来聊一聊,下面有错误的地方欢迎改正指出:1:红外的概念不聊,那是一种物理存在.以下聊38K红外发射接收,主要讲可编程的红外编码.2:红外遥控 红外遥控首 ...

  7. CentOS bridge br0 kvm libvirt-xml

    1,kvm bridge br0配置文件内容实例: ifcfg-em1配置文件内容Example: DEVICE=em1 Bridge=br0 TYPE=Ethernet onboot=yes NM_ ...

  8. tsm ANS0326E问题处理

    备份tsm备份oracle 报错 ANS0326E This node has exceeded its maximum number of mount points. 查看所有节点详细信息 q no ...

  9. hdu 5607 graph (矩阵乘法快速幂)

    考虑一个经典的问题: 询问从某个点出发,走 k 步到达其它各点的方案数? 这个问题可以转化为矩阵相乘,所以矩阵快速幂即可解决. 本题思路: 矩阵经典问题:求从i点走k步后到达j点的方案数(mod p) ...

  10. C#基础:异步调用 【转】

    首先来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务 小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,将开水灌入热水瓶,然后继续整理家务 这也是日 ...