java - 操作系统版本、API 级别和 Java 版本之间的关系

标签 java android android-version

我知道这里有很多关于 Android API 级别和版本的问题,但这个问题不同,所以请不要将其标记为重复。

我想知道 Java 版本 1.6、1.7、1.8... 与这两个版本有何关系。我困惑的根源是我试图将 Pattern.compile 方法与 Pattern.UNICODE_CHARACTER_CLASS 标志一起使用,如下所示。

Pattern pattern = Pattern.compile("\\b" + keywordToCheck + "\\b", Pattern.UNICODE_CHARACTER_CLASS);

来自 the docsPattern.UNICODE_CHARACTER_CLASS 上它说它说 Since: 1.7,我认为这意味着它在 Java 1.7 及更高版本中可用。我正在尝试在 Android 项目中使用该行代码,但每次在我的设备上运行它时,我都会得到:

java.lang.IllegalArgumentException: Unsupported flags: 256

下面是我的build.gradle文件的相关部分

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

据我了解,这意味着我的应用程序将使用任何 API 级别 19 及更高版本,这意味着它可以在 Android 4.4 (KitKat) 或更高版本上运行。我运行应用程序的设备有 Android 6.0. Java 版本如何适应这个?我正在使用 Android Studio 3.0,它说我正在使用:

Android Studio 3.0
Build #AI-171.4408382, built on October 20, 2017
JRE: 1.8.0_152-release-915-b08 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

有人可以向我解释为什么会出现此错误,以及 Android API 级别、版本和 Java 版本之间的关系吗?谢谢

最佳答案

在您给出的示例中,该标志直到 API 24 才被添加。 .在很多情况下,即使较早添加了对给定语言级别(例如 7)的支持,并不意味着所有内容都会立即添加。无论出于何种原因,Google 都会等待某些内容。

我不能告诉你为什么,因为我不知道。

正如 Gabe 提到的,Java 版本不一定与 Android 兼容。

因此,由于您在 API 19 及更高版本上使用标志的代码,您将在 19 和 23 之间或等于 19 和 23 之间的版本上崩溃,因为尚未添加该标志。

还值得注意的是,版本兼容性不会通过 Android 版本限制 Java 版本。现在,您可以在任何您想要的 Android 版本上运行 Java 8。这就是兼容性。

但是。如果你阅读 Android Java 8 Language Features ,它说(强调我的):

Android Studio 3.0 and later supports all Java 7 language features and a subset of Java 8 language features that vary by platform version.

我在这里以 Java 8 为例,但这几乎适用于 Android 和 java 的每个版本。

本质上:

  • 直到 API 24 才添加您使用的标志。据我所知,即使存在硬编码变量,也未添加用法
  • Android 不一定拥有每个单独的 Java API,这些 API 因 Android 版本而异
  • Java 版本不受 API 的限制,但可访问的功能各不相同。这意味着您可以根据需要在 API(随机数)12 上运行 Java 8。

两者之间没有固定关系 (Android [x] = Java[x])。不同的字段/方法/类可能最终会立即添加(在发布对给定 java 版本的支持时)或根本不添加。


常规Java和Android中使用的Java版本是两个非常不同的,因为Android是基于平台的,而Java是基于版本的。您无法比较它们之间的版本,它们都有单独的文档。

值得注意的是,对于 Android (Java) 问题,您应该查看可以在 API reference 中找到的 Android 文档。而不是使用不适用于 Android 的 Oracle 文档,因为 API 存在巨大差异。

关于java - 操作系统版本、API 级别和 Java 版本之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230781/

相关文章:

java - 将子类添加到数组列表中,然后高级

java - NullPointerException JApplet 与 getClass().getResource

java - hibernate中每组最大n个

Android数据分区大小

android - 无法实例化 Activity ComponentInfo

java - 安装 Android SDK Build-Tools 26 后无法启动 Activity ComponentInfo{...}

java - Spring Batch ItemReader使用PostgreSQL函数游标错误

android.support.test 无法解析

android - 如何使用 Android 和 Graph API 获取 Facebook 个人资料 ID?

android - 检查 android 应用程序在 playStore 上是否有更新版本