问题陈述
我想在使用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/