哪些版本的 Android SDK 支持在哪些 Java 版本中进行编码?

Posted

技术标签:

【中文标题】哪些版本的 Android SDK 支持在哪些 Java 版本中进行编码?【英文标题】:Which versions of Android SDK support coding in which versions of Java? 【发布时间】:2012-05-25 03:50:05 【问题描述】:

我正在为 android SDK 2.3.3 编写一个 Android 应用程序,但后来我被要求在运行 Android 2.2.1 的设备上对其进行测试。所以我将目标设置为 8 而不是 10。但是 java.util.concurrent.TimeUnit 只有 Java 1.5 功能集,而不是 java.util.concurrent.TimeUnit 的 Java 1.6/1.7 功能集。因此,我将 TimeUnit 的 openjdk 6 实现放入我的 Android 应用程序包中,一切正常。

有谁知道我在哪里可以获得一些文档,这些文档给了我一个图表,例如,当使用官方 SDK 时,Android 2.2 必须使用 Java 1.5 关键字/语法/API、Android 2.3.3 进行编码可以使用 Java 1.6 关键字/语法/API 等进行编码...?

【问题讨论】:

我觉得奇怪的是,Android 会强迫你使用 1.5,因为 Java 1.6 比 Android 更早。也许这里还有更多事情要做。 我敢打赌,当时 openjdk 只能达到 1.5,这与它有关。 openjdk 7 直到 2011/07/28 才发布 重复:***.com/q/7535385/324625 和 ***.com/q/390482/324625 【参考方案1】:

您试图将 Android 视为 Java 的一个子集,但它不是。它们是完全分开的。尽管 Android 来自 Java,但与 Java 相差甚远,两者之间不再存在“版本方面”的相关性。

您可以查看的是 Android 文档。对于每条指令/命令/方法/属性,您会在右上角找到可以访问所述属性的 api 级别。

单击 api 级别将带您进入一个页面,该页面包含一个将 api 级别转换为 Android 版本的表格。

确定是否允许使用属性的简单方法是使用 eclipse 并执行您刚才所做的操作:更改目标 api 级别。那么任何对您不可用的方法或属性的调用都会产生致命错误。

【讨论】:

"两者之间不再存在关联。"那不是真的吗? @Keyser Yahel 的观点似乎是您不应该尝试将 android 版本映射到特定的 java 版本以找出支持的内容 - 而应该直接查看 Android 文档。 @Keyser :如果你愿意详细说明:) 好的,我发现字节码是使用 Apache Harmony en.wikipedia.org/wiki/Apache_Harmony 编译的,然后该字节码被转换为 Dalvik 字节码。我一直认为 Oracle JDK 或您使用的任何 JDK 创建了后来转换为 Dalvik 字节码的 Java 字节码。所以 Android 2.2 及之前使用了 99% 完整的 Apache Harmony JDK 5.0。 Android 2.3.3 及更高版本使用 97% 完整的 Apache Harmony Java SE 6。因此在使用官方工具编译 Android 应用时,无法使用特定于 JDK 7 及更高版本的功能。 @Robert :抱歉,Android 和 Java 版本之间根本没有直接关联。 Java 是 Android 发展的基础,它留下了一些东西,并根据需要添加了新的东西。尝试使用与 Android 不同的文档只会让您的生活更加艰难:)

以上是关于哪些版本的 Android SDK 支持在哪些 Java 版本中进行编码?的主要内容,如果未能解决你的问题,请参考以下文章

Android Support Library 23.2都有哪些新东西

android中使用了哪些版本的SQLite? [复制]

配置react native 环境需要哪些版本的sdk

我们是怎么调用android sdk里的库的,android的API有哪些?怎么分类?

android SDK下各目录的用途,以及在不同系统下哪些是通用的

android 调用海康sdk 录像回放需要调用哪些方法