我已经看了用Gradle构建的文档,但我仍然不确定compileSdkVersion和targetSdkVersion之间的区别是什么。

它只是说:

The `compileSdkVersion` property specifies the compilation target.

那么,什么是“编译目标”呢?

我认为有两种可能的解释:

compileSdkVersion是构建应用程序时使用的编译器版本,而targetSdkVersion是“应用程序目标的API级别”。(如果是这种情况,我假设compileSdkVersion必须大于或等于targetSdkVersion? 它们是同一个意思。"编译目标" == "应用程序目标的API级别" 别的吗?

我知道这个问题以前被问过,但唯一的答案只是引用了文档,这对我来说是不清楚的。


当前回答

compiledSdkVersion==>哪个版本的SDK应该把你的代码编译成字节码(它在开发环境中使用)点:最好使用上一个版本的SDK。

minSdkVersion==>这些项用于APK的安装(它在生产环境中使用)。例如:

if(client-sdk-version   <   min-sdk-versoin )
    client-can-not-install-apk;
else
    client-can-install-apk;

其他回答

compileSdkVersion应该是最新的稳定版本。 targetSdkVersion应该经过充分测试,小于或等于compileSdkVersion。

在Visual Studio 2017(15.8.5)中,Android项目属性的应用程序设置将它们组合在一起:

姗姗来迟。上面有几个很好的答案——基本上,compileSdkVersion是应用程序编译API的版本,而targetSdkVersion表示应用程序测试的版本。

我想补充以下几点:

targetSdkVersion影响权限请求的方式:

如果设备运行Android 6.0 (API级别23)或更高,并且应用程序的targetSdkVersion是23或更高,应用程序在运行时向用户请求权限。 如果设备运行的是Android 5.1 (API级别22)或更低,或者应用程序的targetSdkVersion是22或更低,系统会在用户安装应用程序时要求用户授予权限。

如果compileSdkVersion高于你的应用程序的targetSdkVersion声明的版本,系统可能启用兼容性行为,以确保你的应用程序继续以你期望的方式工作。(ref) 随着每一个新的Android版本……

targetSdkVersion应该增加以匹配最新的API级别,然后在相应的平台版本上彻底测试应用程序 另一方面,compileSdkVersion不需要更改,除非您要添加新平台版本特有的特性 因此,虽然targetSdkVersion通常(最初)小于compileSdkVersion,但使用targetSdkVersion > compileSdkVersion来维护/建立良好的应用程序并不罕见

我的意见:针对任何版本的SDK进行编译,但要注意不要调用任何“最低SDK版本”不支持的api。这意味着您“可以”根据最新版本的SDK进行编译。

至于“目标版本”,它只是指你最初计划的目标版本,以及可能针对的测试版本。如果你还没有做尽职调查,那么这是一种通知Android在将你的“棒棒糖”目标应用部署到“奥利奥”之前需要执行一些额外检查的方法。

所以“目标版本”显然不能低于你的“最低SDK版本”,但不能高于你的“编译版本”。

快速总结:

对于minSDKversion,请参阅twitter handle中的最新条目:https://twitter.com/minSdkVersion

TargetSDKversion:参见twitter handle: https://twitter.com/targtSdkVersion中的最新条目 或者使用最新的API级别,详见devel https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

编译的版本: 使它与TargetSDKversion相同

maxSdkVersion: 来自Android的建议是不要设置这个,因为你不想限制你的应用程序不能在未来的Android版本上运行