Android:拥有targetSDK> BuildTarget的后果

500*_*865 18 android

我想知道拥有的后果targetSDK > buildTarget.

最近我发现,如果我保持buildTarget=16targetSDK=17标签上我的平板电脑(运行4.1.1,API等级16)移动到动作条的中心.我无法使行为合理化.有人可以解释为什么会这样吗?

Con*_*Map 13

好问题!前一段时间我有类似的行为,当buildTarget和targetSDK以所描述的方式不同时.我花了一些时间来弄清楚,但我会试着总结一下我的理解.

你必须区分三个重要的价值观:

  1. minSdkVersion:

    这是应用程序将(或应该!)运行的最低可用版本.在Android上安装.apk时,将检查该值,如果您运行的Android版本低于指定版本,则不会安装.

  2. buildTarget:

    这就是应用程序的.apk将被编译的SDK(而Eclipse也会定位该值,用于检查编译错误).如果buildTarget它高于minSdkVersion,即使您的Android版本不支持所有方法,您也可以安装该应用程序.默认情况下,它设置为SDK中可用的最新Android版本.您仍然可以构建应用程序以支持旧版本,但将构建目标设置为最新版本可让您启用新功能并优化应用程序,以便在最新设备上获得出色的用户体验.

    如果在较低的API级别上运行,则需要检查您使用的方法是否存在于运行时,否则应用程序可能会崩溃!

  3. targetSdkVersion:

    targetSdkVersion指定要在其SDK平台您的应用程序应该运行正常.因此,如果您针对API 17进行了测试,则可以将API 17添加为targetSdkVersion.如果使用Android版> targetSdkVersion,Android系统将进入某种向前兼容模式以确保对应用程序的支持.将输入此兼容性行为以确保您的应用程序继续以您期望的方式工作,因为从不API级别之间的行为可能会发生一些变化(这是一些最重要的更改).因此,为较低API级别开发的任何应用程序都可以在更高版本上运行,因为旧行为(如过时值)可能在兼容模式下"模拟".

    例如:

    如果设置targetSdkVersion为HONEYCOMB(API 11),则默认主题将更改为Theme_Holo(这是黑暗的全息UI).设置targetSdkVersion为较低的值将影响系统保持默认的灯光主题,无论您将使用哪个构建API!

    在你的情况下,API 16和17之间似乎没有太多明显的变化,这应该会影响设计变更,但我想,更高的targetSdkVersion变化会影响编译时的一些额外变化(比如包括其他类,主题) ,值,...),这将影响不同的行为,就像在上面的主题示例中一样.

我希望,帮助你一点,找出奇怪的行为.以下是Android Developer文档中要阅读的更多相关信息.

PS:有一种向前 - 向后的地狱:Android系统是向后兼容的,因此可以确保Android应用程序的向前兼容性.这意味着:如果您通过OTA更新Android版本,例如,所有旧应用程序应保持运行(因此它们将保持向前兼容).