码迷,mamicode.com
首页 > 移动开发 > 详细

安卓代码覆盖率:android studio+ gradle+jacoco

时间:2016-11-03 18:10:44      阅读:648      评论:0      收藏:0      [点我收藏+]

标签:repo   build   led   执行命令   extern   ldd   port   写入   sdi   

  1. 在工程的oncreate()方法添加如下代码,目的是创建ec文件.
 String DEFAULT_COVERAGE_FILE_PATH = "/mnt/sdcard/coverage.ec";

        File file = new File(DEFAULT_COVERAGE_FILE_PATH);

        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  2.在工程的ondestory()方法添加如下代码,目的是写入数据.

 OutputStream out = null;
                try {
                    out = new FileOutputStream("/mnt/sdcard/coverage.ec", false);
                    Object agent = Class.forName("org.jacoco.agent.rt.RT")
                            .getMethod("getAgent")
                            .invoke(null);

                    out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean.class)
                            .invoke(agent, false));
                } catch (Exception e) {
                    Log.d(TAG, e.toString(), e);
                } finally {
                    if (out != null) {
                        try {
                            out.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

  3.build里面增加如下内容,目的是为了生成报告.ec文件放在./build/outputs目录下.

apply plugin: ‘jacoco‘

task jacocoTestReport (type:JacocoReport) {

    group = "Reporting"

    description = "Generate Jacoco coverage reports on the  build."



    classDirectories = fileTree(

            dir: "${project.buildDir}/intermediates/classes",

            excludes: [‘**/R.class‘,

                       ‘**/R$*.class‘,

                       ‘**/*$ViewInjector*.*‘,

                       ‘**/BuildConfig.*‘,

                       ‘**/Manifest*.*‘]

    )



    def coverageSourceDirs = [

            "src/main/java"

    ]

    additionalSourceDirs = files(coverageSourceDirs)

    sourceDirectories = files(coverageSourceDirs)

    executionData = fileTree(dir:‘./build/outputs‘,include:‘**/*.ec‘)



    reports {

        xml.enabled = true

        html.enabled = true

    }

}

  

  4. AndroidManifest.xml里面需要确认一下写sd的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  

  5.生成apk后,进行手动测试,测试完毕后使用adb pull /sdcard/coverage.ec d:\test 进行导出,然后将ec文件放到./build/outputs目录下,执行命令:gradlew jacocoTestReport,然后就可以看报告了.

安卓代码覆盖率:android studio+ gradle+jacoco

标签:repo   build   led   执行命令   extern   ldd   port   写入   sdi   

原文地址:http://www.cnblogs.com/xiaobaichuangtianxia/p/6027432.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!