Android Macrobenchmark模块无法识别com.android.test插件求助
集成MacroBenchmark库时Gradle同步报错:
com.android.test插件与targetProjectPath属性冲突 问题背景
在项目中集成MacroBenchmark库,使用AGP 7.3.1、Kotlin 1.7.10,基准测试模块位于项目子目录下。已在根目录build.gradle中添加同版本的com.android.test插件,但Gradle同步时出现报错。
报错详情
应用com.android.test插件时的报错
An exception occurred applying plugin request [id: 'com.android.test'] > Failed to apply plugin class 'com.android.build.gradle.api.AndroidBasePlugin'. > Extension of type 'TestedExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension, SonarQubeExtension, Property<ModuleType>, ReportingExtension, DetektExtension, LibrariesForLibs, VersionCatalogsExtension, BasePluginExtension, DefaultArtifactPublicationSet, SourceSetContainer, JavaToolchainService, JavaPluginExtension, NamedDomainObjectContainer<BaseVariantOutput>, TestExtension, TestAndroidComponentsExtension]
移除com.android.test插件后的报错
移除插件后,android块中的targetProjectPath属性无法识别:
android { ... targetProjectPath = ":app" ... }
对应的报错信息:
> Could not set unknown property 'targetProjectPath' for extension 'android' of type com.android.build.gradle.LibraryExtension.
移除targetProjectPath后的问题
项目可以正常构建,但无法运行任何基准测试。已测试Android Studio 2022.2.1 Canary 9和2021.3.1 Patch 1两个版本。
相关配置代码
根目录build.gradle
buildscript { apply from: "./buildSystem/android-config.gradle" dependencies { classpath "org.jetbrains.kotlin:kotlin-serialization:${libs.versions.kotlin.get()}" classpath 'com.google.firebase:perf-plugin:1.4.1' } } plugins { id 'com.android.test' version '7.3.1' apply false alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.crashlytics) apply false alias(libs.plugins.google.services) apply false alias(libs.plugins.quadrant) apply false alias(libs.plugins.sonarqube) alias(libs.plugins.test.gradle.retry) apply false // Core-lib plugins alias(libs.plugins.corelib.detekt) alias(libs.plugins.corelib.googlePlayReleaseNotes) alias(libs.plugins.corelib.moduleDependenciesCheck) alias(libs.plugins.corelib.coverage) }
基准测试模块build.gradle
plugins { id 'com.android.test' id 'org.jetbrains.kotlin.android' } android { namespace 'com.example.benchmark' compileSdk 33 compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } defaultConfig { minSdk 23 targetSdk 33 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { // This benchmark buildType is used for benchmarking, and should function like your // release build (for example, with minification on). It's signed with a debug key // for easy local/CI testing. benchmark { debuggable = true signingConfig = debug.signingConfig matchingFallbacks = ["release"] } } targetProjectPath = ":app" experimentalProperties["android.experimental.self-instrumenting"] = true } dependencies { implementation 'androidx.test.ext:junit:1.1.4' implementation 'androidx.test.espresso:espresso-core:3.5.0' implementation 'androidx.test.uiautomator:uiautomator:2.2.0' implementation 'androidx.benchmark:benchmark-macro-junit4:1.1.1' } androidComponents { beforeVariants(selector().all()) { enabled = buildType == "benchmark" } }
内容的提问来源于stack exchange,提问作者Artur Schaefer
相关产品推荐
相关产品推荐

