我想了解 targetSDK > buildTarget
的后果。
我最近观察到,如果我保持 buildTarget=16
和 targetSDK=17
,我的平板电脑上的选项卡(运行4.1.1
,API 级别为 16)将移动到 actionBar 的中心。我无法理性化这种行为。有人能够解释一下为什么会发生这种情况吗?
我想了解 targetSDK > buildTarget
的后果。
我最近观察到,如果我保持 buildTarget=16
和 targetSDK=17
,我的平板电脑上的选项卡(运行4.1.1
,API 级别为 16)将移动到 actionBar 的中心。我无法理性化这种行为。有人能够解释一下为什么会发生这种情况吗?
很不错的问题!我以前也遇到过类似的情况,当buildTarget和targetSDK有所不同时。花了一些时间才搞清楚,但我会尝试总结我的理解。
你必须区分三个重要的值:
minSdkVersion
:
这是应用程序将(或应该!)运行的最低可用版本。在安装.apk文件到Android时,该值将被检查,如果你运行的Android版本低于指定的版本,则不会安装。
buildTarget
:
这是应用程序的.apk将编译的SDK(Eclipse也将针对该值进行检查以检查编译错误)。如果buildTarget
高于minSdkVersion
,即使您的Android版本不支持所有方法,您仍然可以安装该应用程序。默认情况下,它设置为您SDK中可用的最新Android版本。您仍然可以构建支持较旧版本的应用程序,但将构建目标设置为最新版本允许您启用新功能并优化您的应用程序以获得最佳用户体验。
您需要检查您是否使用的方法在低API级别下运行时是否存在,否则应用程序可能会崩溃!
targetSdkVersion
:
targetSdkVersion
指定应用应该在哪个SDK平台上运行良好。因此,如果您针对API 17进行了测试,则可以将API 17添加为targetSdkVersion
。如果使用的是Android版本>targetSdkVersion
,则Android系统将进入某种前向兼容模式,以确保支持应用程序。输入此兼容性行为将确保您的应用程序继续按照您的期望工作,因为在不同的API级别之间可能会有一些行为变化(这里是一些最重要的变化)。因此,为较低的API级别开发的任何应用程序都将能够在较高版本上运行,因为旧的行为(如过时值)可能在兼容性模式中被“模拟”。targetSdkVersion
设置为HONEYCOMB(API 11),默认主题将更改为Theme_Holo
(即黑色全息UI)。将targetSdkVersion
设置为较低的值将影响系统保持默认的浅色主题,无论使用哪个构建API!targetSdkVersion
将在编译时引起一些附加变化(例如包括额外的类,主题,值等),这将导致不同的行为,就像上面的主题示例一样。第一段文字显示需要一个包含 4.0 ActionBar API 的构建目标,因为库使用它并且没有它无法编译。第二段文字显示需要一个包含 3.0 ActionBar API 的目标 SDK,因为库在这些设备上使用本机 ActionBar,但如果您的目标 SDK 低于 3.0,则 Android 系统不会提供 ActionBar,因为这告诉它不要使用比目标更高的任何内容(例如 3.0 ActionBar)。
一些参考:
targetSDK
更高,Lint会帮助你提醒当你使用一个比你的minSDK
更高的API时,以便你可以确保它只在支持该API的设备上使用。如果你将它设置为你的minSDK
,那么你永远无法使用不存在的新API。谁建议你这样做?这就是Build.VERSION.SDK_INT
(版本门控)的全部原因。 - Dandre Allison
android version > targetSDK
时,将启用向前兼容性(在您的术语中,系统进入向前兼容性),而当android version <= targetSDK
时,将禁用向前兼容性并使用该平台上可用的本机API。这与您的观点(在3. targetSDK下)直接矛盾。 - 500865