You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至buildTools 27.0.3后Gradle构建失败并抛出空指针异常

解决Gradle升级到27.0.3后构建空指针异常问题

我之前在升级buildToolsVersion到27.0.3时也碰到过一模一样的问题,核心原因是旧版插件/自定义脚本调用了已废弃的registerResGeneratingTask方法,而新版本的Android Gradle Plugin(AGP)对这个方法的内部实现做了变更,直接调用就会触发空指针异常(NullPointerException)。下面是具体的排查和解决步骤:

步骤1:定位问题来源

你输出里反复出现的警告registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)已经给出了线索——肯定有代码还在调用这个废弃方法。大概率是项目里的第三方插件(比如旧版ButterKnife、自定义资源生成插件),或者你自己写的Gradle脚本在使用它。

步骤2:升级第三方插件

先把项目中所有第三方插件升级到适配buildToolsVersion 27.0.3的最新版本:

  • 比如用了ButterKnife的话,直接升级到10.0.0及以上版本,这个版本已经替换了废弃的API;
  • 其他插件可以去官方仓库查版本说明,确认是否修复了AGP兼容性问题。

步骤3:手动替换废弃方法(针对自定义脚本)

如果是你自己写的Gradle脚本在调用registerResGeneratingTask,直接替换成官方推荐的registerGeneratedResFolders方法:

原来的废弃代码:

android.applicationVariants.all { variant ->
    registerResGeneratingTask(yourResourceGenTask, yourResourceGenTask.outputDir)
}

替换后的代码:

android.applicationVariants.all { variant ->
    // 注册生成的资源文件夹
    variant.registerGeneratedResFolders(files(yourResourceGenTask.outputDir))
    // 如果是Library模块,把applicationVariants换成libraryVariants
}

注意要确保yourResourceGenTask已经正确配置,输出目录是有效的文件路径。

步骤4:清理缓存重新构建

替换完成后,先清理Gradle缓存避免旧文件干扰:

./gradlew clean

然后再执行构建命令:

./gradlew main:build

一般来说,做完这几步就能解决空指针异常的问题了。如果还是不行,可以加上--stacktrace参数执行构建,查看详细报错日志定位具体哪一行代码触发了NPE。

内容的提问来源于stack exchange,提问作者Diego Plentz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:30:13