错误:只有在Android O(--min-api 26)及以上版本中才支持invoke-customs。

34

我最近开始学习如何通过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: Dexing时出错。

原因:com.android.tools.r8.CompilationFailedException: 编译未能完成

原因:com.android.tools.r8.utils.AbortException: 错误:从Android O开始仅支持Invoke-customs(--min-api 26)

有办法回退到我之前使用的Android Studio版本吗?

如果不行,新版本中改变了什么导致dex文件创建失败?

我尝试在gradle.properties中添加android.enableD8=true,如此处所建议,但没有成功。


编辑 #1:

我还尝试在app build.gradle文件的默认配置中添加multiDexEnabled true,但仍然出现相同的编译错误。

完整的构建文件如下:

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'
}
20个回答

74

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

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

1
在我将Apache Commons Lang库添加到项目后,我遇到了这个错误。然后,添加上述代码解决了我的错误。谢谢。 - Saeid Z
3
对我没用,有什么想法吗? - questionasker
1
谢谢,当我遇到这个问题时,它解决了我的问题! - KarlMeierBE

3

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

根据 文档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

对于我来说,在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

1
在您的Android Studio中,转到build.gradle(Module:App),然后将此compileOptions{}块添加到android{}块中。
android{
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

1

What is relevant in this stacktrace is this line:

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

由于你的依赖中没有 Kotlin 库,我猜测你正在使用 Java。建议尝试 此问题中的答案

0

对于我的情况,在添加以下行后也显示 -

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

所以我解决了我的问题,只需要将我的minSdkVersion19更新到21,最后它终于工作了!!!


0
截至2021年12月,以下是有效的内容。 我遇到这个问题的原因是缺少skd版本26和缺少java版本8。在您的build.gradle(app)文件夹下,添加以下代码以确保您具有正确的依赖项、默认配置和Android兼容性。您现在不需要知道它们的含义,只需知道它们存在即可。基本上,您正在尝试确保Android可以读取先前版本的内容。以下是我运行的代码,以确保我的应用程序运行。
apply plugin: 'com.android.application'

android {

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
compileSdkVersion 26
compileSdkVersion 27
compileSdkVersion 30
buildToolsVersion "30.0.2"


defaultConfig {
    applicationId "com.example.firstfirstapp"
    minSdkVersion 16
    targetSdkVersion 26
    targetSdkVersion 30
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 
'proguard-rules.pro'
    }
}

}

dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "androidx.cardview:cardview:1.0.0"
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

implementation 'com.android.support:appcompat-v7:26.0.0'

}

0
如果您正在使用Google Cloud库,请尝试将版本降至1.90

0

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

接受的答案之所以有效,是因为最新版本的核心库针对api级别30进行了更改,使用了Java8编写,因此添加对Java8的依赖解决了问题。


0
在 build.gradle 文件中添加以下行:multiDexEnabled true。
在 defaultConfig 部分中加入以下代码:
``` ... multiDexEnabled true ```
此外,将 minsdk 设置为 26。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接