在一年之中,也有可能只是几个月后,你会发布你的Android应用程序。但是这中间有可能会发布新的版本的Android系统,比如:6.0+。
你肯定希望你的应用可以向前兼容,当用户升级到新的Android系统时候,你的应用调用的系统API不会编译失败,也不会Crashing。
这时候就要考虑一下三个参数了:compileSdkVersion, minSdkVersion, 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)