问题 我是否需要始终使用最后一个targetSdkVersion?


简单问题:在Eclipse中“新建Android项目”命令总是尝试使用最后一个可用的sdk。这总是一个好主意吗?

更新:

我试着解释一下。现在在Eclipse中,“New project”生成一个清单:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

因此,定位到最后的Android(Jelly Bean,4.2.x),但它也可以在Froyo(2.2)上运行。对我来说还好。这个选择我怎么办?

UPDATE

如果我设置android:minSdkVersion =“8”+ android:targetSdkVersion =“17”并且构建目标为2.2以确保我的应用程序将在旧设备上运行(没有NoSuchMethodError异常),这样可以吗?


13093
2018-02-18 14:44


起源

这取决于您想要定位的设备 - v0d1ch
我编辑了我的问题 - Seraphim's
阅读此描述“目标sdk版本”的含义: developer.android.com/guide/topics/manifest/... 为此,您可以在此sdk版本上测试您的应用并验证它是否正常工作。因此,设备不需要为您模拟较旧的sdk。 - tuxSlayer
@tuxSlayer是的,谢谢,自从我写这个问题以来已经过了很多时间。现在我总是瞄准最后一个sdk版本 - Seraphim's
我的意思是,你可能并不总是想要那个地方的最新版本。即如果您创建新项目(从头开始编写应用程序) - 这可能是开始的好方法。否则,让我们假设您的应用程序访问某些设备功能,并在API级别为18的设备上对其进行了测试。然后您会看到API级别20可用,只需更改此目标版本即可。在此之后,某些功能可能无法在较新的设备上运行,但是,如果您将目标sdk保留在18,新设备将为您模拟它,一切都会正常工作。 - tuxSlayer


答案:


这个选择我怎么办?

这个选择没有错,这就是构建工具默认的原因。

设置 targetSdkVersion 选择你进入特定的行为,你可能不会与旧的 targetSdkVersion。你可以通过阅读看到一些你得到的东西 的文件 Build.VERSION_CODES


10
2018-02-18 14:52



以前,targetSdk是8,现在(有17)我得到NetworkOnMainThreadException异常。改变目标帮助我发现那些“坏”线。 - Seraphim's
如果我设置android:minSdkVersion =“8”android:targetSdkVersion =“17”并且构建目标为2.2以确保我的应用程序将在旧设备上运行,这样可以吗? - Seraphim's
@Seraphim:我不推荐这种做法。当你使用的课程和方法超过你的时候,Lint会告诉你 minSdkVersion。有大约40%的Android设备运行Android 3.0+,您应该开始使用比Android 2.2更新的功能,只是有条件的(例如,通过 Build.VERSION.SDK_INT)。在这些情况下,您应该将构建目标设置为具有您尝试使用的所有类和方法的Android版本。 - CommonsWare
真?我试过但是使用getfragmentmanager()和一个2.2没有lint错误/警告的模拟器,但在运行时我得到一个“NoSuchMethodError”异常。你认为这是一个皮棉问题吗? - Seraphim's
@Seraphim:可能。确保您使用的是当前版本的SDK工具(如果使用Eclipse,则使用Eclipse的ADT插件)。您可能需要手动运行Lint,但通常在保存文件时会自动运行。 - CommonsWare


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


4
2018-02-18 14:48



我编辑了我的问题。 - Seraphim's


你可以在这里读更多关于它的内容: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

但是你应该几乎总是将目标作为最新目标,然后将最小值更改为你想要的最旧目标。


2
2018-02-18 14:48



请阅读我的更新:如果我设置.... - Seraphim's