问题描述
我正在尝试从Github构建一个名为AmazeFileManager的开源项目-AmazeFileManager
我以前已经使用Gradle在Android Studio中构建了项目
Android Gradle插件: 3.6.4
Gradle版本: 5.6.4
问题:
当我尝试将Android插件和Gradle版本更新为
Android Gradle插件: 4.1.0
Gradle版本: 6.5
重建项目时出现此错误:
无法为类型为org.gradle.testing.jacoco.tasks.JacocoReport 的任务':app:jacocoTestFdroidDebugUnitTestReport'设置只读属性'executionData'的值
问题:
该如何解决此错误,以便我可以成功地重建项目?
以下是所使用的Gradle文件的摘要:
build.gradle(Module:app)
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
plugins {
id "com.diffplug.gradle.spotless" version "4.3.0"
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
maven { url "https://jcenter.bintray.com" }
mavenCentral()
}
tasks.withType(Test) {
maxParallelForks = 2
maxHeapSize = "2g"
forkEvery = 2
}
}
spotless {
java {
licenseHeaderFile 'spotless.license-java'
target 'app/src/**/*.java'
googleJavaFormat('1.7')
removeUnusedImports() // removes any unused imports
importOrder 'java','javax','org','com','android','androidx',''
}
}
configurations {
robo16
robo17
robo18
robo19
robo21
robo22
robo23
robo24
robo25
robo26
robo27
robo28
robo29
}
dependencies {
robo16 "org.robolectric:android-all:4.1.2_r1-robolectric-r1"
robo17 "org.robolectric:android-all:4.2.2_r1.2-robolectric-r1"
robo18 "org.robolectric:android-all:4.3_r2-robolectric-r1"
robo19 "org.robolectric:android-all:4.4_r1-robolectric-r2"
robo21 "org.robolectric:android-all:5.0.2_r3-robolectric-r0"
robo22 "org.robolectric:android-all:5.1.1_r9-robolectric-r2"
robo23 "org.robolectric:android-all:6.0.1_r3-robolectric-r1"
robo24 "org.robolectric:android-all:7.0.0_r1-robolectric-r1"
robo25 "org.robolectric:android-all:7.1.0_r7-robolectric-r1"
robo26 "org.robolectric:android-all:8.0.0_r4-robolectric-r1"
robo27 "org.robolectric:android-all:8.1.0-robolectric-4611349"
robo28 "org.robolectric:android-all:9-robolectric-4913185-2"
robo29 "org.robolectric:android-all:10-robolectric-5803371"
}
def robolectricDependencies = "${rootProject.buildDir.path}/robolectric"
task fetchRobolectricDependencies(type: Copy) {
from configurations.robo16
from configurations.robo17
from configurations.robo18
from configurations.robo19
from configurations.robo21
from configurations.robo22
from configurations.robo23
from configurations.robo24
from configurations.robo25
from configurations.robo26
from configurations.robo27
from configurations.robo28
from configurations.robo29
into robolectricDependencies
}
subprojects {
afterEvaluate {
if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) {
android {
testOptions.unitTests.all {
systemProperty 'robolectric.offline','true'
systemProperty 'robolectric.dependency.dir',robolectricDependencies
}
}
tasks.withType(Test) {
it.dependsOn fetchRobolectricDependencies
}
}
if (project.plugins.hasPlugin("jacoco-android")){
android {
testOptions.unitTests.all {
jacoco {
excludes = ['jdk.internal.*']
}
}
}
}
dependencies {
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
if (project.hasProperty('kapt')) {
kapt 'javax.xml.bind:jaxb-api:2.3.1'
kapt 'com.sun.xml.bind:jaxb-core:2.3.0.1'
kapt 'com.sun.xml.bind:jaxb-impl:2.3.2'
}
annotationProcessor 'javax.xml.bind:jaxb-api:2.3.1'
annotationProcessor 'com.sun.xml.bind:jaxb-core:2.3.0.1'
annotationProcessor 'com.sun.xml.bind:jaxb-impl:2.3.2'
}
}
}
build.gradle(Project:AmazeFileManager-release-3.5)
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
plugins {
id "com.diffplug.gradle.spotless" version "4.3.0"
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
maven { url "https://jcenter.bintray.com" }
mavenCentral()
}
tasks.withType(Test) {
maxParallelForks = 2
maxHeapSize = "2g"
forkEvery = 2
}
}
spotless {
java {
licenseHeaderFile 'spotless.license-java'
target 'app/src/**/*.java'
googleJavaFormat('1.7')
removeUnusedImports() // removes any unused imports
importOrder 'java',''
}
}
configurations {
robo16
robo17
robo18
robo19
robo21
robo22
robo23
robo24
robo25
robo26
robo27
robo28
robo29
}
dependencies {
robo16 "org.robolectric:android-all:4.1.2_r1-robolectric-r1"
robo17 "org.robolectric:android-all:4.2.2_r1.2-robolectric-r1"
robo18 "org.robolectric:android-all:4.3_r2-robolectric-r1"
robo19 "org.robolectric:android-all:4.4_r1-robolectric-r2"
robo21 "org.robolectric:android-all:5.0.2_r3-robolectric-r0"
robo22 "org.robolectric:android-all:5.1.1_r9-robolectric-r2"
robo23 "org.robolectric:android-all:6.0.1_r3-robolectric-r1"
robo24 "org.robolectric:android-all:7.0.0_r1-robolectric-r1"
robo25 "org.robolectric:android-all:7.1.0_r7-robolectric-r1"
robo26 "org.robolectric:android-all:8.0.0_r4-robolectric-r1"
robo27 "org.robolectric:android-all:8.1.0-robolectric-4611349"
robo28 "org.robolectric:android-all:9-robolectric-4913185-2"
robo29 "org.robolectric:android-all:10-robolectric-5803371"
}
def robolectricDependencies = "${rootProject.buildDir.path}/robolectric"
task fetchRobolectricDependencies(type: Copy) {
from configurations.robo16
from configurations.robo17
from configurations.robo18
from configurations.robo19
from configurations.robo21
from configurations.robo22
from configurations.robo23
from configurations.robo24
from configurations.robo25
from configurations.robo26
from configurations.robo27
from configurations.robo28
from configurations.robo29
into robolectricDependencies
}
subprojects {
afterEvaluate {
if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) {
android {
testOptions.unitTests.all {
systemProperty 'robolectric.offline','true'
systemProperty 'robolectric.dependency.dir',robolectricDependencies
}
}
tasks.withType(Test) {
it.dependsOn fetchRobolectricDependencies
}
}
if (project.plugins.hasPlugin("jacoco-android")){
android {
testOptions.unitTests.all {
jacoco {
excludes = ['jdk.internal.*']
}
}
}
}
dependencies {
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
if (project.hasProperty('kapt')) {
kapt 'javax.xml.bind:jaxb-api:2.3.1'
kapt 'com.sun.xml.bind:jaxb-core:2.3.0.1'
kapt 'com.sun.xml.bind:jaxb-impl:2.3.2'
}
annotationProcessor 'javax.xml.bind:jaxb-api:2.3.1'
annotationProcessor 'com.sun.xml.bind:jaxb-core:2.3.0.1'
annotationProcessor 'com.sun.xml.bind:jaxb-impl:2.3.2'
}
}
}
build.gradle(Module:commons_compress_7z)
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard.cfg'
}
}
}
dependencies {
implementation 'org.apache.commons:commons-compress:1.18'
implementation 'org.tukaani:xz:1.8'
}
解决方法
如果您还没有找到原因,那是因为新 AGP 使用的 Gradle 6 发生了变化。
有关详细信息,请查看您用来添加 jacoco 任务的 jacoco-android
库中的此 Medium post 或更具体的 this PR。