• @zailushang 大佬求问,我不能生成覆盖率报告是为什么,这个问题已经困扰我四天了,嘤嘤嘤,找了网上的解决方案,都没有效,特来请教
    build.gradle 的配置如下

    apply plugin: 'com.android.application'
    apply plugin: 'jacoco'
    
    jacoco {
        toolVersion = "0.7.9"
    //    reportsDir = file("$buildDir/reports/coverage")
    }
    
    android {
        compileSdkVersion 30
        buildToolsVersion "30.0.3"
        defaultConfig {
            applicationId "com.example.sample1"
            minSdkVersion 17
            targetSdkVersion 30
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
            debug {
                /**打开覆盖率统计开关*/
                testCoverageEnabled = true
            }
        }
    //    lintOptions {
    //        abortOnError false
    //    }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.0.2'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.0'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    }
    
    def coverageSourceDirs = [
            '../app/src/main/java/'
    ]
    
    task jacocoTestReport(type: JacocoReport) {
        println "aa"
        group = "Reporting"
        description = "Generate Jacoco coverage reports after running tests."
        reports {
            xml.enabled = true
            html.enabled = true
    //        html.destination "${buildDir}/reports/jacocoHtml.html"
    //        html.destination(file("${buildDir}/reports/jacocoHtml.html"))
    
        }
    
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: './build/intermediates/app_classes/debug',
                    excludes: ['**/R.class',
                               '**/R$*.class',
                               '**/*$InjectAdapter.class',
                               '**/*$ModuleAdapter.class',
                               '**/*$ViewInjector*.class'
                    ])
        }))
        sourceDirectories.from files([coverageSourceDirs])
        executionData.from files("$buildDir/outputs/code_coverage/debugAndroidTest/connected/coverage.ec")
    
    
        doFirst {
            new File("$buildDir/intermediates/app_classes/debug").eachFileRecurse { file ->
                if (file.name.contains('$$')) {
                    file.renameTo(file.path.replace('$$', '$'))
                }
            }
        }
        print "bbb"
    }
    
    

    manifest 文件配置如下

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.sample1">
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <instrumentation
            android:handleProfiling="true"
            android:label="CoverageInstrumentation"
            android:name="com.example.sample1.test.JacocoInstrumentation"
            android:targetPackage="com.example.sample1"/>
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
            </activity>
            <activity
                android:name="com.example.sample1.loginActivity"
                android:parentActivityName="com.example.sample1.MainActivity">
    
                <!-- The meta-data tag is required if you support API level 15 and lower -->
                <meta-data
                    android:name="android.support.PARENT_ACTIVITY"
                    android:value="com.example.sample1.MainActivity" />
            </activity>
            <activity android:name="com.example.sample1.zhuceActivity"
                android:parentActivityName="com.example.sample1.MainActivity" >
                <!-- The meta-data tag is required if you support API level 15 and lower -->
                <meta-data
                    android:name="android.support.PARENT_ACTIVITY"
                    android:value="com.example.sample1.MainActivity" />
            </activity>
    
            <activity android:label="InstrumentationActivity"
                android:name="com.example.sample1.test.InstrumentedActivity" />
        </application>
    
    </manifest>
    

    build 后的文件夹路径如下:

    点击 jacocoTestReport 后,提示 build 成功,但是不生成 html 结果

    另外第二个问题:执行 createDebugCoverageReport 时会重新安装 apk 和覆盖率的安装包,然后,删除安装包。那之前编译安装,gradle installDebug 安装和 adb shell am instrument 命令调起 app 那一步还有什么用了呢??ec 会在执行 createDebugCoverageReport 生成新的 ec 文件,且如果没有 sleep 的话,覆盖率都是 0 啊??

    第三个问题:
    createDebugCoverageReport 会生成 ec 文件和报告,但是需要一直链接 USB 且本地编译 Android 代码。问题来了:createDebugCoverageReport 生成的报告有数据,这个 createDebugCoverageReport 和 jacocoTestReport 的区别是什么?

    最最最困惑的问题就是为什么执行 jacocoTestReport 时,不会生成报告

    =====================
    给后来的人一个答案吧,问题已经解决了。
    问题一:不能生成 html 报告的问题:jacoco 版本替换到 0.8.5,gradle3 的编译后的路径是./build/intermediates/javac/debug,不是之前的 app_classes
    问题二:createDebugCoverageReport 是 jacoco 中自带的生成报告和路径的命令,但是报告都是 0,需要替换到自己拉出来的 ec 文件。
    问题三:jacocoTestReport 才是我们自己写的生成报告的 task

  • activity android:label="InstrumentationActivity"    android:name="coverage.netease.com.test.InstrumentedActivity" />
    

    这个写错了吧,name 应该是包名.test.InstrumentedActivity 吧

  • 请问 fireline 现在不支持 API 调用吗?比如获取扫描结果

  • 顶起~~😳 😳 😳 😎

  • qq at 2017年09月01日

    百度才是 T 吧

  • qq at 2017年08月31日

    自顶 😳 😳 😳 😳 😳

  • 遇到同样问题