2

我有一个针对 Android 15 的 Android 项目,但最低版本为 Android 8。这在清单文件中定义:

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

这意味着我只能使用最高到 Android 8 的功能。

当我使用 String 类的 isEmpty() 方法(在 API 9 中添加)之类的方法时,IntelliJ 和 Eclipse 都会愉快地编译它,但是当我在旧设备上运行它时,我会崩溃,因为 API 8 没有 isEmpty( ) 实施的。

有谁知道为什么两个IDE都不能捕捉到这样的东西?

我的 Java 编译器是 1.6.0_33 版 - 会强制 IDE 在此处使用旧版本帮助吗?

谢谢!如果我错过了任何信息,请随时发表评论,我会挖掘信息!

4

2 回答 2

5

它应该编译。这允许您通过包装类在更新的 SDK 中使用更新的方法。如果您的目标SDK 是 8,那么 IDE 会抓住您并抱怨。

更多信息在这里:

http://developer.android.com/guide/practices/compatibility.html

包装类技术非常有用。这篇博客文章中有一个关于它的指南:

http://android-developers.blogspot.com/2009/04/backward-compatibility-for-android.html

编辑:

应该注意的是最新的 ADT(r20,也许更早)在它的默认设置中带有Lint的 Eclipse将寻找在 minSDK 之上的 API 方法的使用。但是,它只会在文件被修改后或运行 Lint 时检查文件。

更多关于 Lint:http ://tools.android.com/tips/lint

于 2012-09-11T21:25:43.053 回答
3

对于 IntelliJ IDEA:

  1. Project Structure>Modules
  2. 选择一个模块
  3. Dependencies选项卡上,选择与Module SDK您要限制自己的 API 级别相关的选项。 Android 2.3.3 Google APIs例如。

IDEA 还在努力改进他们的Android Lint支持,以便即使在使用最新的 SDK 编译时,它也可以帮助您更轻松地检查对 API 级别的遵守情况。

http://youtrack.jetbrains.com/issue/IDEA-85200

于 2012-09-11T21:57:28.750 回答