@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 调用吗?比如获取扫描结果
顶起~~
百度才是 T 吧
自顶
遇到同样问题