android - Firebase 性能监控库与作为签名 jar 分发的库不兼容

标签 android firebase gradle androidx firebase-performance

将我的项目更新到 AndroidX 并将 targetSdkVersion 从 27 更新到 28 后,我在尝试构建时遇到以下 gradle 错误:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithFirebasePerformancePluginFor[Flavour]'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.SecurityException: SHA-256 digest error for META-INF/maven/at.favre.lib/bcrypt/pom.xml
    at sun.security.util.ManifestEntryVerifier.verify(ManifestEntryVerifier.java:218)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:241)
    at java.util.jar.JarVerifier.update(JarVerifier.java:228)
    at java.util.jar.JarInputStream.read(JarInputStream.java:212)
    at com.google.common.io.ByteStreams.toByteArrayInternal(ByteStreams.java:181)
    at com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:221)
    at com.google.firebase.perf.plugin.instrumentation.Instrument.instrumentClassesInJar(Instrument.java:105)
    at com.google.firebase.perf.plugin.FirebaseTransform.transformJarInputs(FirebaseTransform.java:230)
    at com.google.firebase.perf.plugin.FirebaseTransform.transform(FirebaseTransform.java:192)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    at sun.reflect.GeneratedMethodAccessor899.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
    ... 34 more

错误指向Bcrypt项目中使用的库。但我已经用 jarsigner 验证了 jar 签名,它是有效的。

我正在使用:

  • Android Studio 3.3 金丝雀 13
  • Gradle 4.10.2
  • 适用于 Gradle 3.2.0 的 Android 插件
  • Firebase 性能监控 Gradle 插件 1.1.5
  • Firebase 性能监控 16.1.2

如果我从项目中删除 Firebase Performance Monitoring 依赖项,一切正常。

a similar issue posted in SO , 但它是由 jacoco 引起的。我根本不使用 jacoco。

有什么想法吗?谢谢。


12/10/18 更新:

重现问题的示例应用:
https://github.com/davidmigloz/firebase-performance-bug

26/10/18 更新:

我已经能够使用 Firebase Performance Monitoring 库以及作为签名 jar 分发的任何其他库来重现该错误。

26/10/18 更新:

如果我启用 Instant Run 我会得到同样的错误(虽然是针对不同的文件)但是在 Instant Run gradle 任务中:

Execution failed for task ':app:transformClassesWithInstantRunForDebug'.
> com.android.build.api.transform.TransformException: java.lang.SecurityException: java.lang.SecurityException: SHA-256 digest error for at/favre/lib/crypto/bcrypt/BCryptFormatter.class

最佳答案

Firebase 支持团队已向我确认这是他们最终的错误。但他们提出了这种暂时的解决方法:

We looked into this and found a bug. However, were able to figure out a workaround for this for you:

Step 1) In your gradle-wrapper.properties file, update the distributionUrl:

distributionUrl=https://services.gradle.org/distributions/gradle-5.0-all.zip

Step 2) In your top level build.gradle file update the Android Gradle Plugin:

classpath 'com.android.tools.build:gradle:3.4.0-alpha05'

Step 3) In your gradle.properties file add below line:

# Blacklist libraries from being Jetified
android.jetifier.blacklist=bcrypt,bytes

Step 4) Clean Build the Project

Running ./gradlew :app:assembleDebug should succeed now.

While we are working on the fix please use the above workaround to get you up and running. My apologies for the wait here once again.

关于android - Firebase 性能监控库与作为签名 jar 分发的库不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777516/

相关文章:

android - 通过 ADB 在 Android 上发送短信

android - 在抽屉导航底部添加项目

java - Java 中的按钮数组

firebase - 有什么办法可以在Firebase中打印错误?

ios - 将 Firebase 登录转移到今天的扩展

firebase - 如何将以前的 Firebase Analytics 导出到 Bigquery

android - Gradle build - 如果可能的话

android - 当设备的方向改变时动态膨胀行但奇怪的行为

android - 使用 Robolectric 测试将设备上的仪器化测试添加到项目中

java - IntelliJ & Gradle : test module/sourceSet can't see main resources