我正在运行仪器测试并收到此编译错误:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesAndResourcesWithR8ForDebugAndroidTest'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:151)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:141)
...
Caused by: java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:108)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:46)
...
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.tools.r8.utils.z.a(:55)
at com.android.tools.r8.R8.runForTesting(:3)
at com.android.tools.r8.R8.run(:3)
at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:195)
Caused by: com.android.tools.r8.utils.AbortException: Error: offset: 0, line: 16559, column: 1, 'void zza(com.google.android.gms.common.internal.BaseGmsClient,int,android.os.IInterface)' already has a mapping
at com.android.tools.r8.utils.Reporter.a(:21)
at com.android.tools.r8.naming.SeedMapper$a.build(:1)
...
如果我查看app/build/outputs/mappings/debug/mapping.txt
,则会看到该方法列出了两次。
com.google.android.gms.common.internal.BaseGmsClient -> com.google.android.gms.common.internal.BaseGmsClient:
...
344:344:void zza(com.google.android.gms.common.internal.BaseGmsClient,int,android.os.IInterface) -> zza
...
350:350:void zza(com.google.android.gms.common.internal.BaseGmsClient,int,android.os.IInterface) -> zza
答案 0 :(得分:1)
我可能有一些答案。
关于1。 如果在将minifyEnabled设置为true的情况下编译应用程序,然后再运行检测测试,则您的应用程序可能具有缩小的类,方法等。因此,所有测试都需要使用R8重新编译,以便在测试中更正所有缩小的名称。具体来说,您的测试是由R8编译的,其中您的应用程序位于library-path和一个名为-applymapping的proguard配置中。
关于2。 这是R8问题。通过将以下内容添加到项目级别的build.gradle文件中,可能会有些运气:
buildscript {
repositories {
maven {
url 'http://storage.googleapis.com/r8-releases/raw'
}
}
dependencies {
classpath 'com.android.tools:r8:1.5.45' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
关于3。 如果2.中的修复不起作用,则可以在R8错误跟踪器中跟踪以下错误: https://issuetracker.google.com/issues/122924648
在问题解决之前,也有可能无需缩小的应用程序就可以生活。
答案 1 :(得分:0)
我有完全相同的错误,@MortenKJ的建议对我不起作用。
我的解决方法不是很令人满意,但这是我现在能做的最好的。每当我想运行仪器测试时,都会将minifyEnabled
设置为false
,将minSdkVersion
设置为21
(对于此sdk版本,multidex
默认是启用的,没有达到dex方法限制的错误。
仪器测试现在按预期运行。