在一年之中,也有可能只是几个月后,你会发布你的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. .NET进阶系列之一:C#正则表达式整理备忘

    有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到 好几个正则表达式的帖子,那段时间借助论坛以及Wrox Press出版的<C#字符串和正则表达式参考手册>学习了一些基础的 ...

  2. (重要) html概念之 input:name与id详解

    实例: 带有两个文本字段和一个提交按钮的 HTML 表单: <form action="form_action.asp" method="get"> ...

  3. (转)C/C++中static关键字

    下面的转自http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777441.html 静态变量作用范围在一个文件内,程序开始时分配空间,结束 ...

  4. jquery 判断多组radio checkbox是否选中

    最近要做一个问卷调查的小页面,需要判断用户是否每项都有选择,如果每个都挨个判断很苦逼,所以网上搜了搜,自己也总结了一下,写了一段小代码~哈哈,水平有限大家见谅.html代码就不上了,N多单选和多选框就 ...

  5. ASP.NET MVC Json() 处理大数据异常解决方法 json MaxJsonLength

    网上很多解决方案,在webconfig中添加,但是实践证明无效 <system.web.extensions> <scripting> <webServices> ...

  6. DOM事件一览表

    type Bubbling phase Cancelable Target node types DOM interface DOMActivate Yes Yes Element UIEvent D ...

  7. hibernate联合主键注解配置

    在网上看到好多方法,结果拿来用还是出现了一些问题.现在整理一下 1.主键类 import javax.persistence.Column; public class UserRoleUionPK i ...

  8. Error:Execution failed for task ':app:mergeDebugResources'. > Some file crunching failed, see logs for details

    Android Studio 编译中断.... Error:Execution failed for task ':app:mergeDebugResources'. > Some file c ...

  9. jQuery 方法

    方法 描述 animate() 对被选元素应用"自定义"的动画 clearQueue() 对被选元素移除所有排队函数(仍未运行的) delay() 对被选元素的所有排队函数(仍未运 ...

  10. 分析BGARefreshLayout-master

    一.知识点,创建BaseActivity 建立方法的逻辑顺序 并将一些常用的方法填充到其中 ①.将initView().setListener().onClick().processLogic()方法 ...