13

当我在发布模式下编译时,我找不到这个错误的根源。我的印象是在没有修改我的代码的情况下出现了这个错误(我尝试用 github 返回,但我仍然有这个错误)。

错误:任务“:app:transformClassesWithFirebasePerformancePluginForRelease”执行失败。

java.io.IOException:找不到指定的路径

带有调试标志的 Gradle

22:36:11.767 [错误] [FirebasePerformancePlugin] 无法检测 org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.class

我的 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:3.1.0'
        classpath 'com.google.firebase:firebase-plugins:1.1.0'
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'http://www.idescout.com/maven/repo/'
        }
        maven {
            url 'https://maven.google.com'
        }
    }
}

我的应用程序/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
apply plugin: 'io.fabric'

android {

    compileSdkVersion 26
    buildToolsVersion '26.0.0'
    defaultConfig {
        applicationId ""
        minSdkVersion 16
        targetSdkVersion 26
        multiDexEnabled true

        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
            signingConfig signingConfigs.Keys
        }
        debug {
            signingConfig signingConfigs.Keys
        }
    }
    dexOptions {
        jumboMode = true
    }

    packagingOptions {
        pickFirst 'META-INF/*'
    }
}

repositories {
    jcenter()
}
repositories {
    maven { url "http://repo1.maven.org/maven2" }
    maven { url 'https://jitpack.io' }
    maven { url 'https://maven.fabric.io/public' }
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile 'com.android.support:appcompat-v7:26.0.0-beta2'
    compile 'com.android.support:support-v13:26.0.0-beta2'
    compile 'com.android.support:support-v4:26.0.0-beta2'
    compile 'com.android.support:design:26.0.0-beta2'
    compile 'com.android.support:recyclerview-v7:26.0.0-beta2'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:cardview-v7:26.0.0-beta2'
    compile 'com.android.support:customtabs:26.0.0-beta2'

    //firebase
    compile 'com.google.firebase:firebase-ads:11.0.2'
    compile 'com.google.firebase:firebase-core:11.0.2'
    compile 'com.google.firebase:firebase-messaging:11.0.2'
    compile 'com.google.firebase:firebase-auth:11.0.2'
    compile 'com.google.firebase:firebase-database:11.0.2'
    compile 'com.google.firebase:firebase-config:11.0.2'
    compile 'com.google.firebase:firebase-storage:11.0.2'
    compile 'com.google.firebase:firebase-perf:11.0.2'
    compile 'com.firebaseui:firebase-ui-auth:1.2.0'

    //Fabric
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true;
    }


    compile 'com.android.support:support-vector-drawable:26.0.0-beta2'
    compile 'commons-io:commons-io:2.5'

    compile 'com.android.support:multidex:1.0.1'
    compile files('libs/aa-poi-ooxml-schemas-3.10-reduced-more-0.1.5.jar')
    compile files('libs/aa-poi-3.10-min-0.1.5.jar')
}

apply plugin: 'com.google.gms.google-services'
4

3 回答 3

7

在将我的 Android 项目迁移到 Gradle Kotlin DSL 后,我突然也收到了Can't instrumentFirebase 性能插件对项目任何类的错误,包括第三方依赖项。构建最终以OutOfMemoryError. 错误是

Can't instrument: ...
java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:79)
        at com.google.firebase.perf.plugin.instrumentation.InstrumentationVisitor.<init>(InstrumentationVisitor.java:55)
        ...

查看 ASM 的ClassVisitor的源代码,我看到IllegalArgumentException当传递未处理的 api 版本时,它会在构造函数中抛出。perf-plugin需要 ASM 7.0 版。但是,在检查项目依赖项时,./gradlew :app:dependencies我发现使用了 6.0 版的 ASM。显然,其他一些依赖项需要 6.0。

我试图用显式覆盖 ASM 依赖项

configurations.all {
    resolutionStrategy.eachDependency {
        if (requested.group == "org.ow2.asm") {
            useVersion("7.0")
            because("Version required by Firebase Performance Plugin")
        }
    }
}

./gradlew :app:dependencies我现在的输出中看到使用了 7.0 但我仍然收到此错误:(

更新:com.google.firebase:firebase-plugins从降级1.2.01.1.5我解决了这个问题。

更新 2:从 2.0.0 版开始,firebase-plugins其用法已弃用。现在推荐的解决方案是明确使用性能监控插件。迁移到新插件后,问题现在为我解决了。

更新 3:我必须撤回我之前的声明。使用性能监视器插件确实修复了我的本地机器上的构建,但没有修复的 Jenkins 构建服务器上的构建。configurations.all正如 Antimonit 所评论的,将上面提到的块移动到块中buildscript也没有修复构建,尽管我可以在./gradlew buildEnvironmentASM 7.0 的输出中看到用于构建。

于 2019-04-04T11:01:28.813 回答
3

原因:当在应用程序级文件而不是项目级perf-plugin文件中定义类路径依赖项时,(在运行时)即使在它的POM 文件中声明了ASM v7 dep 也是ASM v6 dep 。这会触发IllegalArgumentException并且因为它们依赖于ASM v7但是它可以正常工作,因为它依赖于ASM v6 build.gradle build.gradleperf-plugin perf-plugin v1.2.0v1.2.1v1.1.5

这里有很多帖子解释了为什么顶级构建脚本的类路径旨在与项目的其余部分不同:


解决方案: 这是 gradle 行为。一个快速的解决方案是perf-plugin仅在根项目中定义依赖项(在 公共文档build.gradle中已经提到)。


详细说明:

没有错误

根项目 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        classpath 'com.google.firebase:perf-plugin:1.2.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

应用级 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'


. . .

dependencies {
    implementation 'com.google.firebase:firebase-perf:17.0.2'
}

漏洞

根项目 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

应用级 build.gradle

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.google.firebase:perf-plugin:1.2.1'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'


. . .

dependencies {
    implementation 'com.google.firebase:firebase-perf:17.0.2'
}

两种情况下的命令比较$ ./gradlew clean :buildEnvironment表明,所有对的引用org.ow2.asm:asm:6.0都转换为无错误org.ow2.asm:asm:7.0的情况,但在错误的情况下没有发生:

没有错误

> Task :buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

.  .  .

    +--- com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta04
|    |    +--- org.ow2.asm:asm:6.0 -> 7.0
|    |    +--- org.ow2.asm:asm-util:6.0 (*)
|    |    +--- org.ow2.asm:asm-commons:6.0 (*)
|    |    +--- org.jdom:jdom2:2.0.6
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.0 -> 1.3.31 (*)
|    |    \--- com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04 (*)
|    +--- com.google.protobuf:protobuf-java:3.4.0
|    \--- com.google.protobuf:protobuf-java-util:3.4.0 (*)
\--- com.google.firebase:perf-plugin:1.2.1
     \--- org.ow2.asm:asm:7.0

漏洞

> Task :buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

.  .  .

     +--- com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta04
     |    +--- org.ow2.asm:asm:6.0
     |    +--- org.ow2.asm:asm-util:6.0 (*)
     |    +--- org.ow2.asm:asm-commons:6.0 (*)
     |    +--- org.jdom:jdom2:2.0.6
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.0 -> 1.3.31 (*)
     |    \--- com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04 (*)
     +--- com.google.protobuf:protobuf-java:3.4.0
     \--- com.google.protobuf:protobuf-java-util:3.4.0 (*)
于 2019-06-27T23:26:34.863 回答
0

我有同样的错误,因为我的buildSrc目录包含gradle android junit jacoco plugin的分支。一旦我摆脱它(实际上我通过依赖原始插件替换了源代码叉),错误就消失了。如果以上建议都没有帮助您,请尝试检查您的buildSrc目录。

于 2020-07-24T13:11:19.993 回答