【问题标题】:Using JDK17 & Record in Android Studio (Java, Android)在 Android Studio 中使用 JDK17 & Record (Java, Android)
【发布时间】:2022-01-20 09:56:16
【问题描述】:

第 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
}

(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'
}

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

第 2 部分:-

最近,我发现 Android Studio 现在显示了创建新 Java Record 的选项。

但是当我创建一个并构建项目时,会弹出这个错误:

那么.. 有没有办法在 java.lang 包中强制添加 Record 类?

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

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

【问题讨论】:

    标签: java android android-studio java-17 java-record


    【解决方案1】:

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

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

    Java Version Numbers

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

    总结: 您已将项目的 Java 版本设置为 Java 17,目前不支持:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    

    目前可以达到的最高点是Java 11 这意味着您必须将 compileOptions 更改为:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    

    【讨论】:

    • 但是增强型开关之类的工作如何正常?
    • 不知道,可能他们已经开始了一些更高版本的开发,或者他们已经为Android SDK实现了这个功能。官方支持的最高Java版本是11
    • 增强型开关(没有模式匹配预览功能)不需要任何字节码支持。编译后,字节码可以在所有 Java 版本中使用,只要它们不会被同一类中使用的其他特性绊倒。
    【解决方案2】:

    Android支持的java字节码最新版本是Java 7

    Android SDK 支持对一些后来的 java 功能进行脱糖 - https://developer.android.com/studio/write/java8-support
    这些特性是“语法糖”——当轻量级和短代码结构取代复杂结构以提高可读性时。此类特性不需要对 JVM 进行重大更改,并且可以重新编译成以前版本的 java 字节码

    “Desugaring”是指在可能的情况下将来自 java 8(或更高版本)的源代码编译成 java 7 的字节码

    大多数 Java8+ 功能不受支持

    如果您想以现代方式为 Android 编写代码,您必须切换到 Kotlin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2020-05-24
      相关资源
      最近更新 更多