Gradle任务序列配置问题:关联variant1单元测试与variant2构建
问题根源
嘿,这个错误其实很常见:在Gradle的配置阶段,Android插件还没生成对应的测试任务。你直接在build.gradle根级别写testVariant1UnitTest.dependsOn assembleVariant2时,Gradle会立刻去找这个任务,但此时Android插件还没完成Variant的创建和任务生成,自然会抛出"找不到属性"的报错。
看错误提示里的testGrabtaxi2DebugUnitTest,你还要确认自己的变体名称拼写完全正确——任务名是和变体严格对应的,别写错大小写或者后缀哦。
解决方案(适配Gradle 4.4.1)
针对你用的这个Gradle版本(对应Android插件大概3.1.x系列),有两种靠谱的解决方式:
方式一:用afterEvaluate延迟配置
把任务依赖的代码放在afterEvaluate块里,这样会等Android插件生成完所有任务后再执行,就不会找不到任务了:
afterEvaluate { // 直接获取任务,或者用findByName更安全(避免任务不存在时崩溃) def testTask = tasks.findByName('testVariant1UnitTest') def assembleTask = tasks.findByName('assembleVariant2') if (testTask != null && assembleTask != null) { testTask.dependsOn assembleTask } }
方式二:通过Android Variant API配置
如果你想更灵活地针对变体配置,用Android插件提供的Variant API是更好的选择,它能直接关联到对应的变体任务:
android { // 你的其他Android配置(compileSdkVersion、defaultConfig等)... applicationVariants.all { variant -> // 匹配你要设置的目标变体,注意这里的variant.name是小写的,比如"variant1" if (variant.name == 'variant1') { // 拼接出对应的测试任务名:test + 首字母大写的变体名 + UnitTest def testTask = tasks.findByName("test${variant.name.capitalize()}UnitTest") def assembleVariant2Task = tasks.findByName("assembleVariant2") if (testTask != null && assembleVariant2Task != null) { testTask.dependsOn assembleVariant2Task } } } }
小提示
你可以先运行./gradlew tasks命令,查看所有可用的任务列表,确认你的测试任务(比如testVariant1UnitTest)和构建任务(assembleVariant2)是否真的存在,拼写是否完全一致——这是很多人踩坑的点。
内容的提问来源于stack exchange,提问作者ericn
相关产品推荐
相关产品推荐

