Firebase-perf与let插件冲突

时间:2019-02-26 14:54:56

标签: android firebase gradle firebase-performance

我们最近被要求在Android应用上实施“ Firebase性能监控”,但这已经给我们带来了许多不同的问题。该应用程序曾经可以正常运行,但是在添加了“ firebase-perf”后便可以编译,但是随后在运行时,我们发现Let plugin停止运行,使用@AskPermission批注定义的每个权限都将被忽略。

通过gradle build输出,我偶然发现了这个堆栈跟踪:

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'
    }
}

我到处都看到了一些类似的案例,但是找不到解决方案。从我的角度来看,这似乎是在不同的类路径中定义的不同版本的Aspectjs之间的冲突。

这是项目级gradle文件的相关部分:

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

以下是我们在应用程序级gradle中定义的firebase依赖项:

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

有人有可能解决的想法吗?

编辑another thread中有人声称已经解决了以下代码中的问题,但我不知道如何实际使用它。懂得Gradle的人还能解释这个声明应该去哪里以及我应该怎么做吗?

我尝试将其放置在gradle文件的许多不同位置,但出现此错误:“无此类属性:类的类路径:org.gradle.api.tasks.compile.JavaCompile”

{{1}}

1 个答案:

答案 0 :(得分:3)

如果多个库正在编译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'
}

要回答您的最后一个问题:

  

我尝试将它放置在gradle文件的许多不同位置,但是我   得到此错误:“没有这样的属性:类的类路径:   org.gradle.api.tasks.compile.JavaCompile“

您可以使用模块内applicationVariants块中的android访问Java编译器(和类路径):

  // inside your android module 
  android {
       //...
       applicationVariants.all {
       variant ->
         variant.javaCompiler.classpath = variant.javaCompiler.classpath.filter {
           !it.canonicalPath.contains("firebase-perf")
         }
     }
  }