错误:仅支持从Android O(--min-api 26)开始使用invoke-customs。
错误:仅支持从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' }
原因:这个问题是由于项目的最低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
}
通过添加上述代码片段,可以解决这个问题。
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指令。