Firebase-perf конфликтует с плагином let - PullRequest
0 голосов
/ 26 февраля 2019

Недавно нас попросили внедрить «Мониторинг производительности Firebase» в приложении для Android, но оно вызывает у нас много разных проблем.Приложение раньше нормально работало, но после добавления «firebase-perf» оно компилируется, но затем во время выполнения мы обнаружили, что плагин Let перестал работать, каждое разрешение, определенное с помощью аннотации @AskPermission, просто игнорируется..

Просматривая выходные данные сборки gradle, я наткнулся на эту трассировку стека:

java.lang.IllegalStateException: Expecting .,<, or ;, but found firebaseperf while unpacking <K:Ljava/lang/Object;>Lcom/google/android/gms/internal/firebase-perf/zzw<TK;>;
    at org.aspectj.util.GenericSignatureParser.parseClassTypeSignature(GenericSignatureParser.java:204)
    at org.aspectj.util.GenericSignatureParser.parseAsClassSignature(GenericSignatureParser.java:56)
    at org.aspectj.weaver.UnresolvedType.forGenericTypeSignature(UnresolvedType.java:274)
    at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:482)
    at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:456)
    at org.aspectj.weaver.bcel.BcelWeaver.addAspectsFromJarFile(BcelWeaver.java:263)
    at org.aspectj.weaver.bcel.BcelWeaver.addLibraryJarFile(BcelWeaver.java:236)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:874)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:249)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
    at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
    at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
    at org.aspectj.tools.ajc.Main.run(Main.java:371)
    at org.aspectj.tools.ajc.Main$run.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at com.canelmas.let.LetPlugin$_apply_closure2_closure3.doCall(LetPlugin.groovy:66)
    ...

Я видел некоторые подобные случаи здесь и там, но пока не нашел решения.На мой взгляд, это выглядит как конфликт между разными версиями aspectjs, определенными в разных путях классов.

Это релевантная часть нашего файла gradle уровня проекта:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.7.11'
        classpath('com.canelmas.let:let-plugin:0.1.11')
        classpath 'com.google.gms:google-services:4.2.0'
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
    }
}

И это зависимости firebase, которые мы определили в gradle уровня приложения:

dependencies {
    compile 'com.google.firebase:firebase-core:16.0.7'
    compile 'com.google.firebase:firebase-perf:16.2.3'
}

У кого-нибудь есть идеи о возможном исправлении?

EDIT: Тамбыл кто-то в другом потоке , который утверждал, что решил проблему с кодом ниже, но я понятия не имею, как на самом деле его использовать.Может ли кто-нибудь более опытный Gradle объяснить, куда должна идти эта декларация и что я должен с ней делать?

Я пытался разместить ее в разных местах моего файла Gradle, но я получаюэта ошибка: «Нет такого свойства: classpath для класса: org.gradle.api.tasks.compile.JavaCompile»

def filtered_class_filetree = javaCompile.classpath.asFileTree.filter {
    !it.canonicalPath.contains("firebase-perf")
}

1 Ответ

0 голосов
/ 01 марта 2019

Если несколько библиотек компилируют разные версии aspectj (или любой другой зависимости), вы всегда можете принудительно (или игнорировать) те, которые вам нужны, как показано ниже:

implementation('com.google.firebase:firebase-core:16.0.7', { // this will remove aspectj dependencies from firebase
    exclude group: 'org.aspectj', module: 'aspectjrt'
    exclude group: 'com.android.support', module: 'aspectjtools'
  })

Вы также можете принудительно принудить аспектверсия, как показано ниже (кроме ваших зависимостей, в модуле):

configurations.all {
    resolutionStrategy.force 'org.aspectj:aspectjrt:x.x.x'
}

Чтобы ответить на ваш последний вопрос:

Я пытался разместить его в разных местах моего файла градала, но яполучаю эту ошибку: «Нет такого свойства: classpath для класса: org.gradle.api.tasks.compile.JavaCompile»

Вы можете получить доступ к компилятору Java (и classpath), используя applicationVariants вandroid блок внутри вашего модуля:

  // inside your android module 
  android {
       //...
       applicationVariants.all {
       variant ->
         variant.javaCompiler.classpath = variant.javaCompiler.classpath.filter {
           !it.canonicalPath.contains("firebase-perf")
         }
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...