我需要始终使用最新的targetSdkVersion吗?

12
简单问题:在Eclipse中,“新的Android项目”命令总是尝试使用最后一个可用的SDK。这总是个好主意吗?
更新:
我试着解释一下。现在在Eclipse中,“新建项目”会生成一个具有以下内容的清单:
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

因此,目标是最后一个Android版本(Jelly Bean,4.2.x),但也可以运行在Froyo(2.2)上。这对我来说没问题。我在这个选择上可能犯了什么大错吗?

更新

如果我将android:minSdkVersion="8" + android:targetSdkVersion="17"设置好,并将构建目标设为2.2,那么我的应用程序在旧设备上是否能够运行(不会出现NoSuchMethodError异常)?


这取决于你想要针对哪些设备。 - v0d1ch
1
阅读有关“目标SDK版本”的说明:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html 因此,您需要在此SDK版本上测试您的应用程序并验证其正常工作。因此,设备无需为您模拟旧的SDK。 - tuxSlayer
@tuxSlayer 是的,谢谢,自从我写下这个问题以来已经过了很长时间了。现在我总是针对最新的SDK版本。 - Seraphim's
1
我的意思是,你可能不总是想要最新版本。例如,如果你创建一个新项目(从头开始编写应用程序)- 这可能是一个好的开始方式。否则,假设你的应用程序访问某些设备功能,并且你已经在 API 级别 18 的设备上测试过它。然后你发现 API 级别 20 可用,只需更改此目标版本即可。这样做后,一些功能可能无法在较新的设备上工作,但是,如果你将目标 SDK 保留在 18 上,新设备将为你模拟它,并且一切都将正常工作。 - tuxSlayer
3个回答

11

我可能在这个选择上犯了什么错误?

这个选择没有问题,这就是为什么构建工具默认选择它的原因。

设置targetSdkVersion会使您加入一些早期版本中无法获得的特定行为。您可以通过阅读《Build.VERSION_CODES》文档来了解这些行为中的一些内容。


之前,targetSdk是8,现在(使用17)我遇到了NetworkOnMainThreadException异常。更改目标帮助我发现了那些“坏”代码行。 - Seraphim's
我设置android:minSdkVersion="8" android:targetSdkVersion="17"和构建目标为2.2,以确保我的应用程序可以在旧设备上运行,这样可以吗? - Seraphim's
1
@Seraphim:我不建议那种方法。Lint会告诉你,当你使用的类和方法超出了minSdkVersion时。由于约40%的Android设备运行的是Android 3.0+,因此您应该开始使用比Android 2.2更新的功能,只是有条件地(例如通过Build.VERSION.SDK_INT)。在这些情况下,您应将构建目标设置为具有您要使用的所有类和方法的Android版本。 - CommonsWare
真的吗?我尝试使用getfragmentmanager()和一个2.2版本的模拟器,没有出现任何lint错误/警告,但在运行时却出现了“NoSuchMethodError”异常。你认为这是一个lint问题吗? - Seraphim's
1
@Seraphim:可能需要。确保您使用的SDK工具(如果您使用Eclipse,则还包括ADT插件)是当前版本。虽然通常在保存文件时它会自动运行,但您可能需要手动运行Lint。 - CommonsWare
显示剩余3条评论

4

如果您想为旧版本开发应用程序,这不是一个好主意。您可以随时检查最常用的版本,并针对该版本制作应用程序。在某些情况下,需要使用最新版本,因为一些功能在旧版本中尚未实现。


2

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