Jacoco与Gradle 3.1.0一起运行

时间:2018-03-29 22:58:37

标签: android android-studio gradle android-gradle jacoco

我最近将我的Android Studio更新为3.1.0,我使用的是Gradle 4.4.0,自从我更新了IDE以来,我一直遇到Jacoco的问题。我遇到了运行时崩溃,如下所示:

03-29 15:41:19.944 6629-6629/com.MyApp.pr.redesign.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.MyApp.pr.MyApp.app, PID: 6629
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_773e439/Offline;
        at com.MyApp.pr.eventcollector.utils.MyApp.$jacocoInit(Unknown Source:13)
        at com.MyApp.pr.eventcollector.utils.MyApp.<clinit>(Unknown Source:0)
        at com.MyApp.pr.eventcollector.utils.MyApp.setLevel(Unknown Source:0)
        at com.MyApp.pr.MyApp.MyApp.setupLogging(MyApp.java:175)
        at com.MyApp.pr.MyApp.MyApp.onCreate(MyApp.java:77)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jacoco.agent.rt.internal_773e439.Offline" on path: DexPathList[[zip file "/data/app/com.MyApp.pr.redesign.app-EGnUUyKeM4P-cZrCGsyoUQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.MyApp.pr.redesign.app-EGnUUyKeM4P-cZrCGsyoUQ==/lib/arm64, /data/app/com.MyApp.pr.redesign.app-EGnUUyKeM4P-cZrCGsyoUQ==/base.apk!/lib/arm64-v8a, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.MyApp.pr.eventcollector.utils.MyApp.$jacocoInit(Unknown Source:13) 
        at com.MyApp.pr.eventcollector.utils.MyApp.<clinit>(Unknown Source:0) 
        at com.MyApp.pr.eventcollector.utils.MyApp.setLevel(Unknown Source:0) 
        at com.MyApp.pr.MyApp.MyApp.setupLogging(MyApp.java:175) 
        at com.MyApp.pr.MyApp.MyApp.onCreate(MyApp.java:77) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740) 
        at android.app.ActivityThread.-wrap1(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

以下是我的Gradle文件的样子:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: 'gradle/configurations.gradle'
apply from: 'gradle/gradleLintConfig.gradle'

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {

        }

        maven {
            url "https://maven.fabric.io/public"
        }
    }
    dependencies {
        // 3.0.1 (November 2017) - is a minor update to support Android Studio 3.0.1, and includes general bug fixes and performance improvements.
        classpath 'com.android.tools.build:gradle:3.1.0'
        classpath 'com.google.gms:google-services:3.2.0'

        //Here is Jacoco reference
        classpath 'org.jacoco:org.jacoco.core:0.8.0'

        // Nebula lint is used as a lint for our Gradle scripts. It helps identify if our
        // Gradle scripts have unused dependencies for example. Also, it checks for conformance
        // to Gradle standards.
        classpath 'com.netflix.nebula:gradle-lint-plugin:9.0.0'

        //Crashlytics - Crash reporting
        classpath 'io.fabric.tools:gradle:1.25.1'
    }
}

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

    }

    tasks.withType(JavaCompile) {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是app build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply from: "$project.rootDir/gradle/findbugs.gradle"
apply plugin: 'jacoco'

jacoco {
    toolVersion = '0.8.0'
}
...
 buildTypes {
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            minifyEnabled false
        }
        debug {
            versionNameSuffix="-debug"
            debuggable true
            /**
             *  Code below is commented out because it causes build issue
             *  when using newer version of gradle (3.1.0)
             */

            testCoverageEnabled true
            minifyEnabled false


            }
        }
    }
...
dependencies {
...

}

我不知道问题所在。我试图将.jar文件直接添加到项目中,结果相同。如果有人能提供帮助,我将永远感激不尽!

2 个答案:

答案 0 :(得分:1)

当从android studio / idea启动构建时,gradle 4.6和android plugin 3.1.0存在相同的问题。但是,当我使用gradle构建apk并将其与adb一起部署时,效果很好。

因此,看来该问题与IDE本身有关。 它没有将正确的jacoco版本打包到apk。

编辑: 我已禁用即时运行,现在可以正常运行了。

答案 1 :(得分:0)

我不能说我的答案是确定的问题,因为我无法在app build.gradle中看到你的依赖项,但是使用这个最新版本的Gradle“compile”不再受支持。这可能是您的build.gradle或Jacoco的build.gradle的根本原因。