Can't build android. Execution failed for task ':generateJsonModelDebug' 踩坑记录

3 篇文章 0 订阅

Can’t build android. Execution failed for task ‘:generateJsonModelDebug’ 踩坑记录

最近在使用 Cmake 进行 NDK 编译的时候发生了这样一个错误:Can't build android. Execution failed for task ':generateJsonModelDebug'。之后被这个错误困扰了很长一段时间,现在把相关的分析和解决方案记录下来。

起因

导致这个问题是在一个项目中需要使用到一个三方库,由于这个库的功能不能完全满足我的需求,于是就很自然的 fork 了一份下来自己进行修改,而该库中核心代码都是由 C 写的,因此就用到了 CMake。将三方库引入到主项目中后本来一切顺利,可是在编译时便发生了上述的错误。

分析

看着这个错误一脸懵逼,一大堆无关痛痒的日志咋一看也得不到什么有用的信息。想了想也没有改过什么重要配置,而他的原生项目是可以正常编译的,于是对比了一下前后的差异,总算发现了不同的地方:gradle-plugin,他原始版本号为2.3.3,而我的主项目为3.x+,为了验证是否和版本号有关,新建了一个空 project,正常引入三方库,分别配置gragle-plugin版本号。

结果和预料中一样,当把版本号改为3.x+以后发生了一样的问题,而将版本号改为2.3.3则能正常编译通过。基于这点又常识了别的版本号,发现有的可以,而有的则会出现别的错误,例如:Execution failed for task 'externalNativeBuildDebug'

解决方案

通过上面的分析,可以大致确定和 gradle-plugin版本号存在一定的联系,但是修改主项目的版本号牵扯太广显然是不可能的。那要怎么搞呢,于是踏上了苦逼的采坑之路。

先是在百度、google上搜索了相关的问题,发现并没有什么有用的信息。

然后在 Android 官网中查看了 gradle 版本升级的相关说明,主要是想看看对 CMake 的兼容性问题。最后也没有找到需要的内容。

最后喝了杯咖啡准备放弃,考虑使用最2B的方式,先在三方库本来的项目中进行交叉编译,生成so库,再往主工程里面进行自行编写对应的 CMake 脚本进行关联。但是这种方式实在太繁琐,由于他本身项目结构比较复杂,需要耗费大量的时间来编写 CMake,并且意味着之后的每一次修改都需要重新在另一个项目中进行编译并且复制粘贴。

最终解决方案

果然懒是推动社会发展的重大动力,想着上面的备选方案实在太麻烦,就又仔细去看了报错的相关信息,在里面发现了一个没见过的字样 Ninja,结合 google 上面的一些答案,总算是找到了解决方案。

原来 Ninja 是个编译工具,在老版本的 CMake 中会自动去依赖这些编译工具,可是 google 在新版本中可能是为了给开发者挖坑或者是出于什么别的想法,把这项给去掉了。因此就会导致在高版本的 gradle 中无法正常进行编译。

解决方法:在系统中安装 Ninjia

相关资料

https://developer.android.com/studio/releases/gradle-plugin

https://github.com/cocos2d/cocos2d-x/issues/18769

https://stackoverflow.com/questions/54500937/cocos2d-x-android-build-failed

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值