在 Android Studio 中使用 JDK17 和记录(Java、Android)

Suj*_*mar 9 java android android-studio java-record java-17

在此输入图像描述

第1部分 :-

获得此版本的 Android Studio 后,我可以在我的项目中使用JDK17 。一切都工作得很好,没有构建失败,没有运行时错误等(就像增强型开关工作正常)......但是这个警告在每次构建期间不断出现。有什么办法可以抑制这种情况吗?

在此输入图像描述 (警告文本 -> “一个或多个类的文件版本 >= 56,不受官方支持”

这些是 build.gradle 文件:

(1):-

buildscript {

   repositories {
       google()
       mavenCentral()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:7.1.0-rc01'
       classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.2'

       // NOTE: Do not place your application dependencies here; they belong
       // in the individual module build.gradle files
   }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

(2):-

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
    compileSdkVersion 32
    buildToolsVersion '32.0.0'
    defaultConfig {
        applicationId "com.Sujal_Industries.SelfEmot"
        minSdkVersion 21
        targetSdkVersion 32
        versionCode 11
        versionName "1.3.1"
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'androidx.recyclerview:recyclerview:1.3.0-alpha01'
    implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
    implementation 'com.google.mlkit:image-labeling:17.0.6'
    implementation 'com.google.android.material:material:1.6.0-alpha01'
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.1.3'
}
Run Code Online (Sandbox Code Playgroud)

(我尝试搜索类似的警告但没有运气)

第2部分 :-

最近,我发现 Android Studio 现在显示了创建新 Java Record的选项。 在此输入图像描述

但是当我创建一个并构建项目时,会弹出以下错误: 在此输入图像描述

那么..有什么方法可以强制在java.lang包中添加Record类吗?

(如果需要更多信息/澄清,请告诉我)

编辑:我知道 11 以上的版本不受官方支持,但是没有解决方法吗?

Seb*_*ger 11

对于第一部分: 警告意味着您的项目中有一个或多个类不支持高于 11 的 Java 版本。

您的项目中有一些依赖项未针对 JDK 17 进行编译。这是因为 Android 目前不支持 Java 17。这意味着您正在混合不同版本的 Java Bitcode,从而产生此警告。

Java 版本号

对于第二部分: 您正在尝试使用 Android 目前不支持的记录。

摘要: 您已将项目的 Java 版本设置为 Java 17,目前不支持该版本:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}
Run Code Online (Sandbox Code Playgroud)

目前您可以使用的最高版本是Java 11 ,这意味着您必须将compileOptions 更改为:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)

  • 增强型交换机(没有模式匹配预览功能)不需要任何字节码支持。编译后,字节码将在所有 Java 版本中工作,只要它们不会绊倒同一类中使用的其他功能。 (8认同)

joa*_*kie 8

从 Android 14 SDK 开始,我可以证明以下所有 Java 17 语言功能都可以在正在运行的应用程序中完美运行,非常好!代码自动完成和检查也适合我。

  • JEP 361:切换表达式
  • JEP 378:文本块
  • JEP 394:instanceof 的模式匹配
  • JEP 395:记录
  • JEP 409:密封课程

他们在这里写道:

Android 14 包含进一步与 OpenJDK 17 LTS 版本保持一致的功能和改进,包括库更新以及对应用和平台开发人员的 Java 17 语言支持。

我只收到一条构建警告,指出我的 Android Gradle 插件 (8.0.2) 尚未“使用compileSdk = 34 进行测试”。如果您要使用较新的 Android Gradle 插件将 Android Studio 更新到 Beta 或 Canary 通道,我确信警告将会消失。我使用的是当前的官方版本:

在此输入图像描述

要开始使用 Java 17 语言功能,请设置 Android 14 SDK

在此输入图像描述

在此输入图像描述

在应用程序的 build.gradle 中(使用 Groovy):

android {
    compileSdk 34
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}
Run Code Online (Sandbox Code Playgroud)