错误:仅支持从Android O(--min-api 26)开始使用invoke-customs。

9 浏览
0 Comments

错误:仅支持从Android O(--min-api 26)开始使用invoke-customs。

我最近开始学习如何使用Android Studio编程Android设备。我的第一个应用程序在我今天早上升级到Android Studio 3.4之前都很正常运行。

我遇到了以下编译错误:

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

Caused by: com.android.builder.dexing.DexArchiveBuilderException: dexing时出错。

Caused by: com.android.tools.r8.CompilationFailedException: 编译未能完成

Caused by: com.android.tools.r8.utils.AbortException: 错误:只支持从Android O(--min-api 26)开始使用invoke-customs指令

有没有办法恢复到我之前的Android Studio版本?

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

我已经尝试在gradle.properties中添加android.enableD8=true,如这里所建议的,但没有成功。


编辑#1:

我还尝试在应用程序的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'
}

0
0 Comments

原因:这个问题是由于项目的最低API级别低于26,而在Android O(Android版本8.0)之后,才开始支持Invoke-customs。因此,在低于Android O的版本中,使用了Invoke-customs会导致这个错误。

解决方法:在项目的`build.gradle`文件中的`defaultConfig`块中添加`multiDexEnabled true`,开启多Dex支持。这样就可以解决这个问题。

以下是解决这个问题的代码片段:

defaultConfig {

applicationId "com.example.myapptestheader"

minSdkVersion 21

targetSdkVersion 29

versionCode 1

versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

multiDexEnabled true

}

通过添加上述代码片段,可以解决这个问题。

0
0 Comments

Error: Invoke-customs are only supported starting with Android O (--min-api 26) 这个问题的出现原因是使用了不支持的API等级(API level)。

解决方法是将min-api设置为26或更高的值。

在这个例子中,问题的原因是在buildTypes配置中使用了useProguard true。根据文档,只需要使用minifyEnabled true就可以使用R8进行代码混淆。

具体的解决方法是将所有buildTypes配置中的useProguard true这一行移除。

示例:

android {

buildTypes {

debug {

versionNameSuffix "-dev"

minifyEnabled true // <- 使用Instant Run时移除这一行

useProguard true // <- 移除这一行

signingConfig signingConfigs.release

proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"

}

release {

shrinkResources true

minifyEnabled true

useProguard true // <- 移除这一行

signingConfig signingConfigs.release

proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"

}

}

}

通过移除useProguard true这一行,即可解决这个问题。同时,也需要确保min-api的值设置为26或更高的值,以确保支持invoke-custom指令。

0
0 Comments

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

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

在将apachi commons lang库添加到项目后,我遇到了这个错误。然后在添加上述代码后,错误得到了解决。谢谢。

对我来说不起作用,有什么办法吗?

谢谢,当我遇到这个问题时,它解决了我的问题!

0