首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在构建APK时,只有从Android o(-min-api 26)开始才支持Android studio "MethodHandle.invoke和MethodHandle.invokeExact“错误。

在构建APK时,只有从Android o(-min-api 26)开始才支持Android studio "MethodHandle.invoke和MethodHandle.invokeExact“错误。
EN

Stack Overflow用户
提问于 2020-12-16 12:07:16
回答 1查看 2.8K关注 0票数 4

我正在用许多导入的外部.jar开发一个Android应用程序(在Android中非常陌生),模拟器中的开发进行得很顺利,但是当我开始构建APK时,我得到了以下错误:

代码语言:javascript
运行
复制
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:desugarDebugFileDependencies'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Error while dexing.
代码语言:javascript
运行
复制
Error: C:\Users\Daniel Alves Rosel\.gradle\caches\transforms-2\files-2.1\514725b031c9b95dac9cf3e9a193720c\jetified-jetty-util-9.4.31.v20200723.jar:org/eclipse/jetty/util/ModuleLocation.class, java.net.URI org.eclipse.jetty.util.ModuleLocation.getModuleLocation(java.lang.Class), MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
Stack trace:
com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
    at com.android.tools.r8.errors.a.a(:7)
    at com.android.tools.r8.ir.conversion.O.b(:58)
    at com.android.tools.r8.ir.conversion.O.a(:104)
    at com.android.tools.r8.ir.conversion.O.a(:53)
    at com.android.tools.r8.graph.C.b(:43)
    at com.android.tools.r8.ir.conversion.O.b(:35)
    at com.android.tools.r8.utils.U0.a(:10)
    at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
    at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
    at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
    at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:322)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:66)
    at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:36)
    at com.android.tools.r8.utils.U0.a(:3)
    at com.android.tools.r8.ir.conversion.O.a(:10)
    at com.android.tools.r8.D8.d(:29)
    at com.android.tools.r8.D8.b(:1)
    at com.android.tools.r8.utils.W.a(:30)
    at com.android.tools.r8.D8.run(:11)
    at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:116)
    at com.android.builder.dexing.DexArchiveBuilder.convert$default(DexArchiveBuilder.kt:46)
    at com.android.build.gradle.internal.tasks.DexFileDependenciesTask$DexFileDependenciesWorkerAction.run(DexFileDependenciesTask.kt:153)
    at com.android.build.gradle.internal.tasks.Workers$ActionFacade.run(Workers.kt:242)
    at org.gradle.workers.internal.AdapterWorkAction.execute(AdapterWorkAction.java:50)
    at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:50)
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:63)
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:59)
    at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98)
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:59)
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:53)
    at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:200)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:215)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.lang.Thread.run(Thread.java:748)
    Suppressed: java.util.concurrent.ExecutionException: com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
        at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:552)
        at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:513)
        at com.google.common.util.concurrent.FluentFuture$TrustedFuture.get(FluentFuture.java:86)
        at com.android.tools.r8.utils.U0.a(:14)
        at com.android.tools.r8.utils.U0.a(:9)
        ... 39 more
    [CIRCULAR REFERENCE:com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)]
Caused by: com.android.tools.r8.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
    at com.android.tools.r8.ir.conversion.N.a(:633)
    at com.android.tools.r8.ir.conversion.N.a(:674)
    at com.android.tools.r8.r.n.A.a(:236)
    at com.android.tools.r8.ir.conversion.o.a(:153)
    at com.android.tools.r8.ir.conversion.N.a(:133)
    at com.android.tools.r8.graph.l.a(:93)
    at com.android.tools.r8.graph.l.a(:71)
    at com.android.tools.r8.graph.l.buildIR(:1)
    at com.android.tools.r8.graph.C0.buildIR(:1)
    at com.android.tools.r8.graph.T.a(:152)
    at com.android.tools.r8.ir.conversion.O.a(:412)
    at com.android.tools.r8.ir.conversion.O.b(:53)
    ... 52 more

我尝试将以下内容添加到我的build.gradle中,但没有成功。

代码语言:javascript
运行
复制
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

我尝试从15 => 8更改在我的系统上运行的Java版本,因为我看到一篇文章建议java -version版本应该等于sourceCompatibility JavaVersion.VERSION_1_8

当我运行https://stackoverflow.com/questions/63612606/com-android-tools-r8-errors-a-methodhandle-invoke-and-methodhandle-invokeexact (在gradlew :app:dependencies中建议查找引起问题的jar )时,我得到:

代码语言:javascript
运行
复制
* What went wrong:
Could not initialize class org.codehaus.groovy.runtime.InvokerHelper

增加:

代码语言:javascript
运行
复制
allprojects {
    configurations.all {
        resolutionStrategy.force 'org.objenesis:objenesis:2.6'
    }
}

到了最后,build.gradle也什么也没做。

这是我的build.gradle:

代码语言:javascript
运行
复制
apply plugin: 'com.android.application'


buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.borg.borg2"
        minSdkVersion 23
        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'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
    implementation files('C:\\Users\\Daniel Alves Rosel\\Documents\\Invoy\\Projects\\BORG\\nodes\\node-api-tunnel-v9.jar')
    implementation fileTree(dir: 'C:\\Users\\Daniel Alves Rosel\\Documents\\Invoy\\Projects\\BORG\\dependencies\\dependencies_package', include: ['*.aar', '*.jar'], exclude: [])
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}
allprojects {
    configurations.all {
        resolutionStrategy.force 'org.objenesis:objenesis:2.6'
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 07:46:05

您使用的库之一是使用Java特性,这些特性仅在API 26级的Android上支持。由于没有这些特性的开发/支持,所以如果minSdkVersion低于26,编译就会失败。在第174733673期中跟踪允许在较低的API级别上使用这些语言特性。

从Android进行测试的原因是,Android将指示AGP使用与用于测试的设备相匹配的API级别构建,以获得最佳的调试体验。在构建最终项目时,build.gradle中的API级别集将生效,结果将产生此编译错误。

除了删除对违规库(似乎是jetty-util-9.4.31.v20200723.jar)的使用之外,您还可以尝试另一件事,那就是按照缩小、混淆和优化应用程序中的描述缩小应用程序。这假设违规代码实际上是运行时的死代码,并通过收缩来删除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65322936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档