安卓中,"min sdk"、"target sdk"和"compile with"有何不同?

11
在Android中,“min SDK”,“target SDK”和“compile with”有什么区别?
当我尝试创建一个新的Android应用程序项目时,“minimum SDK”,“target SDK”和“compile with”有什么区别,就像这样...
最小SDK:API 14 目标SDK:API 17 编译版本:API 14
我的选择是否好?还是应该选择哪个? 抱歉,我试图放一张照片,但我不能...

2
我真的读了,但是我没有很好地理解它 :(( !! - without name
5个回答

13

简而言之,

最低SDK:API 14

指的是您的应用程序只能在API级别为14(即ICS 4.0)或更高版本的移动电话上运行。您的应用程序将无法在早期版本的Android上运行,例如姜饼和Froyo。

目标SDK:API 17

指的是您要构建的Android版本,这在您的情况下是Jellybean。建议尽可能保持最新版本(目前是api 20 Kitkat)。

编译版本:API 14

指的是您正在测试的Andriod版本。使用api 14进行编译意味着您将在ICS上测试应用程序。

你也可以观看这个视频:

https://www.youtube.com/watch?v=Sxo5zMcOCXM


谢谢!这正是我想要的:))! - without name

7

android:minSdkVersion

一个整数,用于指定应用程序运行所需的最低API级别。如果系统的API级别低于此属性中指定的值,则Android系统将阻止用户安装该应用程序。你应该总是声明此属性。

android:targetSdkVersion

指定应用程序目标API级别的整数。如果未设置,则默认值等于minSdkVersion。该属性通知系统您已经针对目标版本进行了测试,系统不应启用任何兼容行为以保持您的应用程序与目标版本的向前兼容性。该应用程序仍然能够在旧版本上运行(最低可支持minSdkVersion)。

随着每个新版本的推出,Android会发生变化,一些行为甚至外观也可能会改变。但是,如果平台的API级别高于您的应用程序的targetSdkVersion声明的版本,则系统可能会启用兼容性行为,以确保您的应用程序继续按您期望的方式工作。您可以通过指定targetSdkVersion来禁用此类兼容性行为,以匹配其正在运行的平台的API级别。例如,将此值设置为"11"或更高版本,可以使系统在运行Android 3.0或更高版本时将新的默认主题(Holo)应用于您的应用程序,并在更大的屏幕上运行时禁用屏幕兼容性模式(因为对API级别11的支持隐含支持更大的屏幕)。

系统可能基于此属性的值启用许多兼容性行为。其中一些行为在Build.VERSION_CODES参考中由相应的平台版本描述。

为了跟随每个Android版本发布,您应该增加此属性的值以匹配最新的API级别,然后在相应的平台版本上彻底测试您的应用程序。

引入版本:API Level 4

android:maxSdkVersion

指定应用程序设计运行的最大API级别的整数。在Android 1.5、1.6、2.0和2.0.1中,在安装应用程序和系统更新后重新验证应用程序时,系统检查此属性的值。在任何一种情况下,如果应用程序的maxSdkVersion属性低于系统本身使用的API级别,则系统将不允许安装该应用程序。在系统更新后的重新验证中,这有效地从设备中删除了您的应用程序。

请通过以下链接获取更多详细信息:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html


你没有回答关于“编译”的问题。 - Adam Burley

3
尽可能简洁地解释以下三个术语:
最低要求SDK:显示您希望应用程序支持的最低Android版本的设备。例如,如果在下拉列表中选择API 11:Honey Comb,则将显示您的应用程序不支持/无法运行任何低于 Honey Comb 版本的 Android 设备。
目标SDK:这应该尽可能保持较高,因为它告诉您正在针对或测试应用程序的最大 Android 版本。因此,如果您将 minReqSDK >> 11(蜂巢)和 targetSDK >> 21(棒棒糖),这表明您的应用程序将在所有 Android 版本上运行,从蜂巢到棒棒糖都没有兼容性问题,因为您已将 target SDK >> 21 棒棒糖版本。
编译使用:这与 Android 是否支持任何设备无关。您可以选择您已使用 SDK 管理器安装的任何 Android 版本来编译和运行您的开发应用程序。
在您的情况下: 最低SDK版本:14 目标SDK:17 编译使用:14
您的设备将支持所有具有API级别14(Ice Cream Sandwich)至API级别17(Jelly Bean 4.2)的 Android 版本。您一直使用API级别14(ICS)来编译和运行应用程序进行开发。
希望这可以帮助您。

0
简而言之,声明一个不同的targetSDK与minSDK的目的在于:这意味着您正在使用比最低级别更高级别的SDK功能,但您已经确保向后兼容性。换句话说,想象一下,您想要使用最近引入的某个功能,但这对您的应用程序并不关键。然后,您将targetSDK设置为引入此新功能的版本,并将最小值设置为较低的值,以便每个人仍然可以使用您的应用程序。
举个例子,假设你正在编写一个应用程序,它广泛使用手势检测。然而,每个手势可以识别的命令也可以通过按钮或菜单完成。在这种情况下,手势是一个“很酷的额外功能”,但并不是必需的。因此,您将目标SDK设置为7(当引入GestureDetection库时,“Eclair”),最小SDK设置为级别3(“Cupcake”),以便即使是使用非常旧的手机的人也可以使用您的应用程序。您只需要确保您的应用程序在尝试使用手势库之前检查其运行的Android版本,以避免在不存在手势库时尝试使用它。(诚然,这是一个过时的例子,因为几乎没有人还有v1.5手机,但是在维护与v1.5的兼容性非常重要的时候,曾经存在这样的时期。)
再举一个例子,如果您想使用Gingerbread或Honeycomb中的某个功能,您可以使用此方法。一些人很快就会得到更新,但许多其他人,特别是那些使用较旧硬件的人,可能会一直停留在Eclair上,直到他们购买新设备。这将使您能够使用一些很酷的新功能,但不会排除您可能的市场的一部分。

有一篇非常好的文章来自Android开发者博客,讲述了如何使用这个功能,特别是如何设计上面提到的“在使用之前检查功能是否存在”的代码。

对于楼主:我主要是为了将来偶然遇到这个问题的人而写的,因为我意识到你的问题是很久以前提出的。 这里是帖子


0

android:minSdkVersion 一个整数,指定应用程序运行所需的最低API级别。如果系统的API级别低于此属性中指定的值,则Android系统将阻止用户安装该应用程序。您应该始终声明此属性。 注意:如果您不声明此属性,则系统会假定默认值为“1”,这表示您的应用程序与所有版本的Android兼容。如果您的应用程序不兼容所有版本(例如,它使用在API Level 3中引入的API),并且您没有声明适当的minSdkVersion,则在安装到API级别低于3的系统上时,应用程序将在运行时崩溃,因为尝试访问不可用的API。因此,请务必在minSdkVersion属性中声明适当的API级别。

android:targetSdkVersion 一个整数,指定应用程序针对的API级别。如果未设置,则默认值等于minSdkVersion。 此属性通知系统,您已经测试了目标版本,并且系统不应启用任何兼容性行为以保持应用程序与目标版本的向前兼容性。该应用程序仍能在旧版本上运行(最低至minSdkVersion)。

随着每个新版本的推出,Android会不断演进,一些行为甚至外观可能会发生变化。但是,如果平台的API级别高于您的应用程序的targetSdkVersion声明的版本,则系统可能会启用兼容性行为,以确保您的应用程序继续按照您的期望工作。您可以通过将targetSdkVersion指定为正在运行的平台的API级别来禁用此类兼容性行为。例如,将此值设置为“11”或更高版本时,系统在Android 3.0或更高版本上运行时会将新的默认主题(Holo)应用于您的应用程序,并且在较大屏幕上运行时会禁用屏幕兼容性模式(因为对API级别11的支持隐含支持较大屏幕)。
根据您为此属性设置的值,系统可能会启用许多兼容性行为。这些行为中的几个由Build.VERSION_CODES参考中的相应平台版本进行描述。
为了使您的应用程序与每个Android版本一起保持更新,您应该增加此属性的值以匹配最新的API级别,然后在相应的平台版本上彻底测试您的应用程序。
引入时间:API Level 4

android:maxSdkVersion 一个整数,指定应用程序设计运行的最大API级别。 在Android 1.5、1.6、2.0和2.0.1中,系统在安装应用程序和系统更新后重新验证应用程序时检查此属性的值。在任何一种情况下,如果应用程序的maxSdkVersion属性低于系统本身使用的API级别,则系统将不允许安装该应用程序。在系统更新后重新验证的情况下,这实际上会从设备中删除您的应用程序。

为了说明此属性如何影响系统更新后的应用程序,请考虑以下示例:

在Google Play上发布了一个在其清单中声明maxSdkVersion="5"的应用程序。运行Android 1.6(API级别4)的设备的用户下载并安装该应用程序。几周后,用户收到了针对Android 2.0(API级别5)的OTA系统更新。安装更新后,系统检查应用程序的maxSdkVersion并成功重新验证它。应用程序正常运行。然而,一段时间后,设备接收到另一个系统更新,这次是针对Android 2.0.1(API级别6)。更新后,系统无法再次验证应用程序,因为系统自己的API级别(6)现在比应用程序支持的最高级别(5)更高。系统防止应用程序对用户可见,实际上将其从设备中删除。

警告:不建议声明此属性。首先,没有必要设置该属性来阻止您的应用程序部署到新版本的Android平台上,因为按设计,新版本的平台完全向后兼容。只要使用标准API并遵循开发最佳实践,您的应用程序应该在新版本上正常工作。其次,请注意,在某些情况下,声明该属性可能会导致您的应用程序在系统更新到更高的API级别后从用户设备中删除。大多数安装了您的应用程序的设备将通过空中接收定期系统更新,因此在设置此属性之前,您应该考虑它们对您的应用程序的影响。

引入版本:API Level 4

Android的未来版本(超过Android 2.0.1)将不再在安装或重新验证期间检查或强制执行maxSdkVersion属性。然而,Google Play在向用户提供可下载的应用程序时仍将使用该属性作为筛选器。

了解更多信息,请单击此处:使用sdk


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接