android - 在Gradle构建中运行AspectJ和Firebase性能监视

标签 android firebase gradle aspectj firebase-performance

问题陈述
我想在使用Gradle的Android构建中使用AspectJ,同时使用Firebase Performance Monitoring对构建的应用进行检测。
不幸的是,在Type android.support.v4.app.INotificationSideChannel$Default is defined multiple times: ...的DEX合并步骤中,构建失败
发现
app/build/ajc-transform.log中,我发现:

Wed Jul 22 07:55:14 CEST 2020
ABORT
    
Exception thrown from AspectJ 1.9.4

This might be logged as a bug already -- find current bugs at
  http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler

Bugs for exceptions thrown have titles File:line from the top stack, 
e.g., "SomeFile.java:243"

If you don't find the exception below in a bug, please add a new bug
at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
To make the bug a priority, please include a test program
that can reproduce this exception.
Expecting .,<, or ;, but found firebaseperf while unpacking <MessageType:Lcom/google/android/gms/internal/firebase-perf/zzdz<TMessageType;TBuilderType;>;BuilderType:Lcom/google/android/gms/internal/firebase-perf/zzdy<TMessageType;TBuilderType;>;>Ljava/lang/Object;Lcom/google/android/gms/internal/firebase-perf/zzgr;
在项目根目录中有一个ajcore.log:
java.lang.IllegalStateException: Expecting .,<, or ;, but found firebaseperf while unpacking <MessageType:Lcom/google/android/gms/internal/firebase-perf/zzdz<TMessageType;TBuilderType;>;BuilderType:Lcom/google/android/gms/internal/firebase-perf/zzdy<TMessageType;TBuilderType;>;>Ljava/lang/Object;Lcom/google/android/gms/internal/firebase-perf/zzgr;
    at org.aspectj.util.GenericSignatureParser.parseClassTypeSignature(GenericSignatureParser.java:204)
    at org.aspectj.util.GenericSignatureParser.parseFieldTypeSignature(GenericSignatureParser.java:155)
    at org.aspectj.util.GenericSignatureParser.parseFormalTypeParameter(GenericSignatureParser.java:130)
    at org.aspectj.util.GenericSignatureParser.parseAsClassSignature(GenericSignatureParser.java:51)
    at org.aspectj.weaver.UnresolvedType.forGenericTypeSignature(UnresolvedType.java:275)
    at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:479)
    at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:453)
    at org.aspectj.weaver.bcel.BcelWeaver.addClassFile(BcelWeaver.java:456)
    at org.aspectj.weaver.bcel.BcelWeaver.addClassFile(BcelWeaver.java:480)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:908)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:253)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:189)
    at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:114)
    at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
    at org.aspectj.tools.ajc.Main.run(Main.java:371)
    at com.archinamon.api.AspectJWeaver$doWeave$2.invoke(AspectJWeaver.kt:128)
    at com.archinamon.api.AspectJWeaver$doWeave$2.invoke(AspectJWeaver.kt:14)
    at com.archinamon.api.AspectJWeaver$Companion.runBlocking(AspectJWeaver.kt:182)
    at com.archinamon.api.AspectJWeaver.doWeave$android_gradle_aspectj(AspectJWeaver.kt:126)
    at com.archinamon.api.transform.AspectJTransform.transform(AspectJTransform.kt:182)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:284)
[...]
二手Gradle配置
这是我的build.gradle文件的简化版本:
项目级别:
buildscript {
    [...]
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        [...]
        classpath "com.archinamon:android-gradle-aspectj:4.2.1"
        classpath "com.google.gms:google-services:4.3.3"
        classpath "com.google.firebase:firebase-crashlytics-gradle:2.2.0"
        classpath "com.google.firebase:perf-plugin:1.3.1"
    }
}
[...]

应用程序级别:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.firebase.firebase-perf'
[...]
apply plugin: 'com.archinamon.aspectj'

[...]

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    [...]
    implementation "com.google.firebase:firebase-analytics:17.4.4"
    implementation "com.google.firebase:firebase-analytics-ktx:17.4.4"
    implementation ("com.google.firebase:firebase-crashlytics:17.1.1"
    implementation ("com.google.firebase:firebase-perf:19.0.7"
    [...]
}
调查中
Firebase-perf conflicting with let plugin
https://github.com/firebase/quickstart-android/issues/770
我已经尝试了此处提到的方法,但是它们并不能解决我的问题。

最佳答案

我发现插件的顺序很重要。在应用程序级别build.gradle的Firebase插件之前应用AspectJ插件解决了我的问题:

apply plugin: 'com.android.application'
apply plugin: 'com.archinamon.aspectj'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.firebase.firebase-perf'
[...]

关于android - 在Gradle构建中运行AspectJ和Firebase性能监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63029475/

相关文章:

android - Android 应用程序中的布局 inflater 是什么?

javascript - 对 Firebase 数据库中的数据集取平均值

react 堆栈中的 Firebase ApiFuture 到 CompletableFuture

android - Android Studio 中的 Gradle 给出错误项目同步失败

java - 重复的类com.google.api.Advice

gradle - 维护存在于多个存储库中的文件

android - 我怎样才能在 Espresso 中得到应用程序?

android - 有什么 butterknife 可以做而数据绑定(bind)做不到的吗?

java - 如何根据随机结果更改骰子滚轮的ImageView

android - 带有 Onesignal 错误的 Google Play 服务