Android和Eclipse:minSdk和compileWith

时间:2013-10-31 21:00:03

标签: android

嗯,我认为这个问题没有得到很好的解释,现在我有点困惑。来自this链接:

  

编译是您要编译的平台版本   你的应用。默认情况下,设置为最新版本的Android   可在SDK中找到。 (它应该是Android 4.1或更高版本;如果你   没有这样的版本,你必须使用安装一个   SDK Manager)。 您仍然可以构建应用以支持旧版本,   但是将构建目标设置为最新版本允许您   启用新功能并优化您的应用以获得出色的用户体验   在最新的设备上。

this改为:

  

在开发应用程序时,您需要选择   您将编译应用程序的平台版本。在   一般来说,你应该针对最低级别编译你的应用程序   您的应用程序可以支持的平台的可能版本

现在,因为他们自相矛盾,在这里我将解释我所理解的内容:假设我们使用api 5进行编译。这意味着如果我从1运行到5,我的应用程序可以运行,但它不会对于版本>那么:

  1. 如果compileWith设置为5,我为什么需要设置minSdkVersion?
  2. 什么是targetSdkVersion?
  3. 关键是:如果compileWith设置为最新版本,是否可以使用最新的API并且仍具有向后兼容性?我确定我错了,我错过了什么。谢谢。

    修改1

    现在我了解更多,但无论如何我都错过了一些东西:让我们说minSdk是9而目标是18(我现在的sdk)。这意味着除非有旧版本的支持包,否则我不能使用api 18的任何特定内容,对吧?我的想法不同:我会用最低版本进行编译以获得兼容性。我的意思是,如果你在Win2000上编译一个Windows应用程序,它将运行到Windows 8但我只限于Win2000 apis。如果我使用Windows 8进行编译,则应在运行时检查向后兼容性,并且我只能在Win2000上使用Windows 8 apis和“support packages”(显然这是一个例子)。正确?

    修改2

    This就是我对Android的看法(不是关于JVM)。 Android正在向后混合,我使用Windows示例将它混合在一起。 FIY,似乎Windows向后兼容,如示例here中所述。那么,Android呢?似乎应该从开发人员那里测试minSdk版本,我的意思是:我应该使用最新版本编译并测试我的应用程序行为,直到最小的api级别不会改变它。因此,似乎我需要通过测试每个api级别来测试向后兼容性,这些api级别低于编译的那个级别,并且它们确保了向前兼容性。正确?

    我认为我正在混合前向和后向兼容性定义。每次我读它们都会有所不同。

1 个答案:

答案 0 :(得分:2)

来自Documentation您可以阅读以下内容:

<强>机器人:的minSdkVersion

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

<强>机器人:targetSdkVersion

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

要回答您的上一个问题,定位最新的API将不允许您执行任何更新的方法或在旧手机上使用任何更新的类,因为您需要使用支持包,您可以获得在新的API中你可以做些什么。

希望这能让你更清楚地了解为什么你有这两个值以及它们之间的区别。

<强>更新

关于为Windows 2000构建并在Windows 8上工作的示例,并不能保证它能够正常工作,这就是为什么在Windows上你有“兼容运行”模式,然后根据操作选择你想运行它的系统。

这是因为可能两个OS(或本例中的API)具有相同的方法或选项,它们以不同的方式执行或需要其他权限。这里也是如此,因此目标SDK将成为针对您测试的参考框架,因此如果您在比taget SDK更新的版本上运行它,它将使用该行为。

对于min和target之间的API,它们将像往常一样运行,因此你总是可以有一个奇怪的行为,并且可能需要一些补丁,通常在2.x到3.x上最明显。跳。

更新2:

好吧,让我尝试以不同的方式解释它。

minSDK将确定您可以在整个应用程序中使用哪些方法和选项,这意味着如果某个方法仅在该API之后可用,您将无法使用它,而是会收到错误消息。

在targetSDK表示您测试,因此,如果手机有比你指定的一个较新的API,它会尝试行为,因为它是在你指定的API版本的API的最新版本,举个例子{ {3}},在重要行为更改

部分中
  

这种不精确的批处理行为仅适用于更新的应用程序。如果您将targetSdkVersion设置为“18”或更低,则在Android 4.4上运行时,您的警报将继续像以前的版本一样。

所以,你可以看到有,如果你设置了targetSDK到以前的API(19)之前,它的行为就用它,但如果你的目标最新的API(在这一刻API 19),那么它表现不同。

希望我很清楚,如果没有,请不要犹豫,然后问。