好吧,我认为这没有得到很好的解释,现在我有点困惑。从这个链接:
Compile With是编译应用程序的平台版本。默认情况下,这设置为您的 SDK 中可用的最新版本的 Android。(它应该是 Android 4.1 或更高版本;如果您没有这样的版本,您必须使用 SDK 管理器安装一个)。您仍然可以构建您的应用程序以支持旧版本,但将构建目标设置为最新版本允许您启用新功能并优化您的应用程序,以便在最新设备上获得出色的用户体验。
取而代之的是:
在开发应用程序时,您需要选择编译应用程序的平台版本。通常,您应该针对您的应用程序可以支持的平台的最低版本编译您的应用程序。
现在,由于他们自相矛盾,在这里我将解释我的理解:假设我们使用 api 5 编译。这意味着如果我从 1 运行到 5,我的应用程序可以工作,但它不适用于版本 > 5. 所以:
- 如果 compileWith 设置为 5,为什么我需要设置 minSdkVersion?
- 什么是 targetSdkVersion?
关键是:如果 compileWith 设置为最新版本,是否可以使用最新的 API 并且仍然具有向后兼容性?我确定我错了,我错过了一些东西。谢谢你。
编辑 1
现在我明白了,但无论如何我错过了一些东西:假设 minSdk 是 9,target 是 18(我当前的 sdk)。这意味着我不能使用任何特定于 api 18 的东西,除非有一些旧版本的支持包,对吧?我的想法不同:我会使用尽可能低的版本进行编译以获得前向兼容性。我的意思是,如果您在 Win2000 上编译 Windows 应用程序,它将运行到 Windows 8,但我仅限于 Win2000 api。如果我使用 Windows 8 编译,则应在运行时检查向后兼容性,并且我只能在 Win2000 上使用“支持包”(显然这是一个示例)上的 Windows 8 api。正确的?
编辑 2
这就是我要问的关于 Android 的问题(而不是关于 JVM)。Android 正在向前和向后混合,我使用 Windows 示例进行了更多混合。FIY,Windows 似乎是向后兼容的,如此处示例中所述。那么,安卓呢?似乎 minSdk 版本应该由开发人员测试,我的意思是:我应该用最新版本编译并测试我的应用程序行为,直到不会改变它的最低 api 级别。因此,我似乎需要通过在每个低于已编译 wich 的 api 级别上进行测试来测试向后兼容性,并确保向前兼容性。正确的?
我认为我正在混合向前和向后兼容性定义。每次我读它们时,它们似乎都不一样。