compileDebugKotlin FAILED和aidl

compileDebugKotlin FAILED和aidl,第1张

自从入职CS,项目编译一直有个神坑报错,每次都需要clean rebuild若干次, 非常耽误时间

简单的说, 如果在使用AIDL时需要一个自定义的数据类型, 我们一般会这么写:

当我们写一个子类SubClass继承该类.然敏毁后槐返在Kotlin文件中直接或者间接引用到SubClass时, 就会出现一个以下的报错

报错发生在 app:compileDebugKotlin , 也就是kotlinc. 但是我们明明已经定义了该类. 全局搜索发现有两个 CustomParcel.java , 推测是两个同名铅拿饥的文件引起.

除了我们自己写的Java文件, 另外一个肯定是aidl生成的. 引用一张图:

在编译开始时会把aidl转化为Java文件, 接下来才会经过javac, kotlinc把JVM语言文件转化为字节码 .class 文件.

查看aidl生成的文件, 发现是空的, 并且有一行注释: 说明这是一个 PlaceHolder , 也就是占位文件.

网上搜到有人遇到了 相同的问题 ,问题确实发生在kotlinC编译器以aidl生成的空java文件为编译目标, 而不是真正的java类文件. 并且也给出了解决办法,升级buildTools版本.

查看 buildTools提交记录

提交记录: No java output for parcelable declaration . 也就是移除了以下的为自定义的aidl Parcelable类生成Java文件的设定(29.0.2之前的实现)

升级29.0.3, 再次编译, 发现build/aidl目录下不再生成同名的 PlaceHolder 文件了, 只剩下唯一的我们自己的文件, kotlinC这次只能用唯一的文件来编译,报错解决.

至于为什么有时候clean rebuild能编译成功,需要探究下kotlinC的源码.

最坑的是, 29.0.2就是 gradle plugin4.1默认支持的版本 , 所以你不手动指定buildTools版本为29.0.3以上就会掉进坑里.

问题:

直接使用android studio导入cocos2d-x的官方测试工程,顷备cpp-test,会报错“No value has been specified for property 'aidlExecutableProvider'”。

修改方法:

直接百度或者谷歌,给出的原因是aidl文件名称冲突。需要先到文件夹中删除举高缓存在clean就没问题了,我本地测试了N次,也关闭android studio重新打开,依然无法解决,可见我遇到的不是这个问题。再回来看sync时候的event log。

NDK Resolution Outcome: Project settings: Gradle model version=4.6, NDK version is UNKNOWN

再重新看cocos2d-x for android的编译环境正乎尺要求,发现NDK没有配置,配置之后重新sync就没问题了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12254787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存