错误:仅从Android O(--min-api 26)开始支持Invoke-customs

时间:2019-04-23 13:45:16

标签: android android-gradle dex

我最近开始学习如何通过Android Studio对Android设备进行编程。我的第一个应用运行良好,直到今天早上升级到Android Studio 3.4。

我遇到以下编译错误:

  

原因:com.android.builder.dexing.DexArchiveBuilderException:无法处理C:\ Users \ Technical.gradle \ caches \ transforms-2 \ files-2.1 \ 4f3f8638c6a9f961dae488a0387efb6b \ jars \ classes.jar

     

起因:com.android.builder.dexing.DexArchiveBuilderException:解密时出错。

     

原因:com.android.tools.r8.CompilationFailedException:编译无法完成

     

原因:com.android.tools.r8.utils.AbortException:错误:仅从Android O(--min-api 26)开始支持调用自定义

是否可以恢复到以前的Android Studio版本?

如果新版本中没有发生什么更改而导致创建dex文件失败?

我尝试按照建议的hereandroid.enableD8=true中添加gradle.properties,但是没有运气。


编辑#1:

还已经将multiDexEnabled true添加到应用build.gradle文件的默认配置中,但是仍然存在相同的编译错误。

该构建文件已满...

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "qdivision.org.qrtracker"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.github.felHR85:UsbSerial:6.0.5'
}

18 个答案:

答案 0 :(得分:4)

尝试将以下内容添加到您的app/build.gradle中,以使您的Android项目编译与 Java 8 兼容。

android {
    ....
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    ....
}

答案 1 :(得分:2)

我必须从useProguard true配置中删除buildTypes

根据the documentation minifyEnabled true足以用R8混淆代码。

示例:

android {
    buildTypes {
        debug {
            versionNameSuffix "-dev"
            minifyEnabled true // <- remove this line when using instant run
            useProguard true // <- remove this line
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
        }

        release {
            shrinkResources true
            minifyEnabled true
            useProguard true // <- remove this line
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
        }
    }
}

答案 2 :(得分:1)

在您的Android Studio中转到build.gradle(模块:应用) 然后将此compileOptions{}块添加到android{}

android{
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

答案 3 :(得分:1)

此堆栈跟踪中与之相关的是此行:

Caused by: com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)

由于您的依赖项中没有kotlin库,因此我假设您正在使用Java。我会尝试answers in this issue

答案 4 :(得分:0)

如果您尝试直接从android studio运行apk,请避免启用

  

minifyEnabled为真

注释以下行。

//            minifyEnabled true
//            shrinkResources true

但是您可以在构建APK时使用上述代码。

答案 5 :(得分:0)

如果您使用的是Google Cloud库,请尝试将版本降低到1.90

答案 6 :(得分:0)

添加以下内容,以使您的应用可以由java8编译器进行编译。

android {

    .....

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

并禁用

处的即时运行

Preferences-> Build,Execution,Deployment-> Debugger-> Instant Run

答案 7 :(得分:0)

我已将以下代码添加到所有模块:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

但是错误仍然存​​在。 在我的情况下,我的一些模块使用了类路径“ me.tatarka:gradle-retrolambda”,它与此产生了冲突:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

因此,我必须通过以下链接从Retrolambda进行迁移: https://developer.android.com/studio/write/java8-support#migrate_from_retrolambda

答案 8 :(得分:0)

请将此行添加到a文件中。

'string'

答案 9 :(得分:0)

我有同样的问题。地雷是由... org.apache.commons:commons-lang ...造成的。我目前没有完整的错误消息。此错误仅在重建或清理生成期间发生。

我决心通过将我的 build.gradle 中的org.apache.commons:commons-text:1.8更改为org.apache.commons:commons-text:1.6

注意-有人建议here在Android Studio中禁用“即时运行”。我的Android Studio中不提供此功能。版本-

Android Studio 3.5.1
Build #AI-191.8026.42.35.5900203, built on September 26, 2019
Windows 10 10.0 

答案 10 :(得分:0)

对于kotlin,您还应该添加kotlinOptions:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

答案 11 :(得分:0)

使用Java 8的解决方案只有在我删除了所有与Retrolambda相关的内容之后,才能开始工作。

答案 12 :(得分:0)

对于其他任何遇到此问题的人,我在对此Jackson库添加依赖项后遇到了这个问题:

implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.1")

上面的“ compileOptions”解决方案为我解决了该问题

答案 13 :(得分:0)

对我来说,在 BUILD.GRADLE 中执行以下命令即可删除该错误。

defaultConfig {
      applicationId "com.example.myapptestheader"
      minSdkVersion 21
      targetSdkVersion 29
      versionCode 1
      versionName "1.0"
      testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
   
      multiDexEnabled true
}

我刚刚添加

multiDexEnabled true

答案 14 :(得分:0)

这在 2021 年仍然有效,请尝试。

android {
    compileSdkVersion 30

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        applicationId "com.example.android.bakingapp"
        minSdkVersion 15
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

答案 15 :(得分:0)

就我而言,添加以下几行后也显示了 -

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

所以我解决了我的问题,只需将我的 minSdkVersion19 更新到 21,然后终于成功了!!!

答案 16 :(得分:0)

在将 build.gradle 中的核心库升级到最新版本后,我遇到了这个错误,幸运地接受了对我有用的答案。

接受答案的工作原因是针对 api 级别 30 的最新版本的核心库的更改,它是用 java8 编写的,因此添加对 java8 的依赖解决了它。

答案 17 :(得分:-1)

尝试一下:

    defaultConfig {
    ...
    multiDexEnabled true
    }