只是想知道是否有人尝试在 Android 中使用新的 Java 7 语言功能?我知道Android会读取Java吐出的字节码并将其转换为dex。所以我想我的问题是它可以理解 Java 7 的字节码吗?
如果您使用的是 Android Studio ,则应自动启用Java 7 语言,无需任何补丁。 Try-with-resource 需要 API 级别 19+,并且缺少 NIO 2.0 的东西。
以下仅出于历史兴趣。
Java 7 的一小部分当然可以与 Android 一起使用(注意:我只在 4.1 上测试过)。
首先,您不能使用 Eclipse 的 ADT,因为它是硬编码的,只有 Java 编译器 1.5 和 1.6 是兼容的。您可以重新编译 ADT,但我发现除了一起重新编译整个 Android 之外,没有简单的方法可以做到这一点。
但是您不需要使用 Eclipse。例如, Android Studio 0.3.2 、 IntelliJ IDEA CE 和其他基于 javac 的 IDE 支持编译到 Android , 您甚至可以将合规性设置为 Java 8:
这仅允许 Java 7 语言功能 ,并且您几乎无法从任何东西中受益,因为一半的改进也来自该库。您可以使用的功能是那些不依赖于库的功能:
<>
catch (Exc1 | Exc2 e)
1_234_567
0b1110111
这些功能还 不能使用:
try
…“还”:) 事实证明,尽管 Android 的库针对 1.6,但 Android 源代码确实包含AutoCloseable等接口,而Closeable等传统接口确实继承自 AutoCloseable(不过,确实缺少 SafeVarargs)。我们可以通过反射来确认它的存在。它们被隐藏只是因为 Javadoc 有@hide标签,这导致“android.jar”不包含它们。
@hide
已经存在一个问题 如何构建具有隐藏和内部 API 的 Android SDK? 关于如何取回这些方法。您只需要将当前平台已有的“android.jar”引用 替换 为我们定制的,那么Java 7的很多API就会变得可用(过程与Eclipse中的类似。检查项目结构-SDK。) __
除了 AutoCloseable 之外,还(仅)显示了以下 Java 7 库功能 :
基本上就是这样。特别是,NIO 2.0 不存在,Arrays.asList 仍然不是@SafeVarargs。