java - 哪些 Android 版本运行哪些 Java 版本?
问题描述
我刚刚尝试在 Android 4.0 设备上运行使用 Java 8 编译的应用程序。虽然我习惯于仔细查看 Android 文档中的 Android API 级别,以确保我只使用 Android 4.0 上可用的 API,但我不太习惯确保我没有使用Java 本身的任何特性在 Android 4.0 上不可用。
考虑以下代码,它尝试initializeScrollbars()
从类中导入 API,View
因为无论出于何种原因,它已从官方 SDK 中删除:
try {
final Method initializeScrollbars = android.view.View.class.getDeclaredMethod("initializeScrollbars", TypedArray.class);
initializeScrollbars.invoke(this, a);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
虽然此代码在我的 Android 8.0 测试系统上运行良好,但在 Android 4.0 上却无法运行。错误是:
Could not find method java.lang.ReflectiveOperationException.printStackTrace
经过一些研究,我发现ReflectiveOperationException
在 Java 7 之前不可用,因此,显然,Android 4.0 不支持 Java 7。
这让我想知道:是否有一个概述清楚地显示了哪些 Android 版本附带了哪些 Java 版本?例如,我怎样才能找到第一个支持 Java 7 的 Android 版本?我怎样才能找到第一个支持 Java 8 的 Android 版本?
这真的很容易找到,但我只是没看到它。谷歌搜索总是会导致人们询问 Android Studio 支持的 Java 版本,而不是 Android 本身。
那么,任何人都可以对此有所了解吗?我知道它一定在某个非常明显的地方,但我似乎没有找到它......
解决方案
因此,显然,Android 4.0 不支持 Java 7。
根据您的定义,Android 不支持任何版本的 Java。Android SDK 中的java
和javax
类与任何 Java 版本都不完全匹配,无论是数字版本(例如,6、7、8)还是您想将 Java SE/EE/ME 视为的任何版本。
是否有概述清楚地显示哪些 Android 版本附带哪些 Java 版本
在语言特性(例如,lambda 表达式)方面,引用文档:
Android Studio 3.0 及更高版本支持所有 Java 7 语言功能和 Java 8 语言功能的子集,这些功能因平台版本而异
在这里,“Android Studio”实际上是指编译您的源代码并创建 Dalvik 字节码的构建工具。当前的工具可以支持所有版本的 Android 上的所有 Java 7 和一些 Java 8 功能。其他 Java 8 功能仅在 API 级别 24+ 上可用,通常是因为它们依赖于当时仅添加到 Android SDK 的某些类。
但是您关心的似乎是类和方法,在这种情况下,没有任何 Java 版本到任何 Android 版本的简单映射。
此外,您正在使用反射侵入框架类,这意味着您的结果不仅会因 Android 版本而异,而且会因设备型号而异,因为设备制造商可以并且确实会更改框架类的实现。
推荐阅读
- python - 在 split 命令中应用 like 运算符以过滤数据框中的数据
- python - cloudinary.exceptions.Error:使用 Flask 的空文件
- android - 如何解决“发生意外错误。请在 Google Play 商店应用程序发布中重试 (7515006A)'
- mysql - 传递给 ransacker 的 Active Admin 过滤器参数
- javascript - 在数组对象内映射数组
- python - os.path.join('BASE_DIR','template') 问题
- hibernate - 当我试图将我们的整个数据移动到新服务器时,我们面临着这个问题
- grails - 如何为简单的示例制作 Grails 子查询?
- java - 来自线程的方法调用在哪里运行?
- php - 有什么方法可以将 *this* 日期格式转换为 Ymd H:i:s?