使用android:sharedUserId="android.uid.system"运行jacoco无法生成coverage.ec

259 阅读1分钟

背景

系统应用使用了 android:sharedUserId="android.uid.system",在运行jacoco脚本生成代码覆盖率时,在data/data/包名下可以看到生成了coverage.ec文件,但是在app/build/outputs/code_coverage/debugAndroidTest/connected/设备名称目录下没有coverage.ec文件。

解决方案

app/build.gradle中加入如下代码即可

android {
    defaultConfig {
        testInstrumentationRunnerArguments useTestStorageService: 'true'
    }
}
dependencies {
    androidTestUtil 'androidx.test.services:test-services:1.4.1-alpha02'
}

原因猜想

生成coverage.ec之后,AndroidStudio并不是通过如adb pull命令将文件pull到本地的,而是通过Socket(github.com/jacoco/jaco…):

image.png 使用android:sharedUserId="android.uid.system"之后,可能造成Socket访问异常了(具体原因未分析出来)

参考

github.com/android/and… github.com/jacoco/jaco…