Android SDK 可以与 JDK 1.7 一起使用吗?

Posted

技术标签:

【中文标题】Android SDK 可以与 JDK 1.7 一起使用吗?【英文标题】:Can the Android SDK work with JDK 1.7? 【发布时间】:2012-01-24 14:14:17 【问题描述】:

我刚刚安装了 android SDK R16 和 JDK 7,但我一直收到错误

Android 要求编译器合规级别为 5.0 或 6.0。而是找到了“1.7”。请使用 Android 工具 > 修复项目属性。”

我正在使用 JRE 1.7 的一些功能,所以我不能将它切换到 1.6。我该如何解决这个问题?

【问题讨论】:

“使用 1.7 JRE 的某些功能”是什么意思? 我在 switch 语句中使用字符串,JRE 1.6 (JDK 6) 中不支持 并且您已经验证字节码将成功转换为Android(不支持JDK 7)可以处理的东西? ***.com/questions/7153989/… 不,我只是假设它会起作用。 就像 ATOM 提到的,你必须在编译期间保持与 Java 5/6 的源代码兼容性,所以不幸的是 switch 语句中没有字符串。有人知道 Android 什么时候会支持编译器合规级别 7.0? 【参考方案1】:

您只需要在您的 PC 上安装 1.6。我有同样的问题。安装 1.6 JDK,并将其添加为已知 JDK,但实际上不要为您的项目选择它。

【讨论】:

所以这行不通。我将 JDK 1.6 添加到已安装的 JRE 选项卡中,但仍然出现错误。我就是你把它添加到已知的 JDK 的意思? 是的,这正是我所说的,因为我遇到了同样的问题,它对我有用。 对,我想我的问题是我想使用 JRE 1.7 但由于 android SDK 不支持它而不能。【参考方案2】:

是的,您可以使用 Java 1.7 进行 Android 开发。您必须在编译期间保持与 Java 6 的源代码兼容性,只有下一个问题是因为更改了 jarsigner 的默认算法。

这已在 Stack Overflow 问题 Android signing with Ant 中得到解决(解决方法)。

但它是already fixed in Ant。所以官方很快就会直接在Android SDK中支持。

如果您想使用Maven 进行构建,解决方案在What kind of pitfals exist for the Android APK signing

更新:Ant、Maven Plugin 或 Gradle 的最新版本与 Java 7 或 Java 8 没有问题,所以这已经过时了。

【讨论】:

有点过时了。从 build tools 19 开始,Android 全面支持 Java 1.7。因此您可以将 1.7 设置为编译的源和目标。对此的支持来自 Android studio 0.3.2。 Android kitkat 完全支持 JAVA 1.7 API,但 1.7 中的大部分语言功能您也可以在旧机器人上使用。除了“尝试资源”。 在Android API8(Froyo)项目之上使用安全吗? 是的,但是支持 API 8 只是浪费时间。 很遗憾,我们有 14% 的会员不是废物。 @ATom 我正在寻找 Java 8 兼容性,但我什么也没找到。您从哪里获取有关 Java 7 支持的信息?【参考方案3】:

从 ADT (22.6) 开始,可以使用 Java 1.7 功能:

http://developer.android.com/tools/sdk/eclipse-adt.html http://tools.android.com/recent/eclipseadt226preview

重要提示:

try-with-resources 需要 API 19 及更高版本:

增加了对 Java 7 语言功能的支持,例如 multi-catch, try-with-resources 和菱形运算符。这些功能需要 版本 19 或更高版本的构建工具。 Try-with-resources 需要 minSdkVersion 19;其余的新语言功能需要 minSdkVersion 8 或更高版本。

【讨论】:

我想从发行说明中强调,如果您使用 try-with-resources,您的应用只需 minSdk 19。否则,您将需要 minSdk 8。(我最初只阅读了您答案的第一行,这意味着其他情况。) 是的,这就是我的意思。如果你使用它,你将需要 minSdk 19 。这也是那里写的。现在我们需要等待 JAVA 1.8 的支持。 :) 我只想添加 java.util.Objects 类只能从 API 19 开始使用(因为它已从该 API 级别添加)。 @Kap 很有趣。没听说过这个包。 “deepEquals”是否只对数组有不同的作用,而对其余的则作为“equals”? 里面有一些漂亮的东西...我已经开始使用它,但是对 API 18 的测试返回了 ClassNotFound。你可否确认?也许我做错了什么。 Here是源代码。【参考方案4】:

值得一提的是,如果您想使用 API 21(Android 5.0 Lollipop)编译项目,您必须使用 JDK 1.7。

API 21 不再适用于 JDK 1.6。

【讨论】:

是的,当我尝试在 /res/values-v21/styles.xml 中设置 Material 主题时,我才发现了这一点。解决方案:从oracle.com/technetwork/java/javase/downloads/…安装Java 7u72然后运行/usr/libexec/java_home -v 1.7(在mac终端上)获取路径,然后在And.Studio中,右键单击您的项目->打开模块设置-> SDK位置->更新JDK位置java_home 命令显示的内容

以上是关于Android SDK 可以与 JDK 1.7 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android开发环境搭建:jdk版本为1.7,sdk 版本选择哪个合适?

Eclipse 中 JDK 1.7 的 Facebook SDK 4.x 错误

Android SDK的安装与环境变量配置

Facebook android sdk 需要 java 1.7 才能工作?

Android studio环境变量配置及其作用(JDK与SDK配置)

带有 Android SDK 的 intellij:-source 1.7 中不支持 lambda 表达式