多模块,依赖android.car.jar后,能调用接口但是没有回调的问题
文章目录
- 前提条件
- 尝试解决问题
- 代码位置
- 依赖位置(最后解决)
- 总结
前提条件
环境是gradle 8.0,多个model相互依赖。
我的项目是类似 base model 给 common model 依赖, common model给 app model 依赖,然后本地jar放在base model的libs文件夹下
通过compileOnly依赖,确保项目编译通过。
然后在base model写了个object工具类,包含get,set和callback方法。最后在app model调用;然后离谱的事情就出现了。编译正常,运行正常,get,set方法调用正常,联调的同事都看见他那边模块的日志打印了,但是最后我这边收不到callback回调,联调的同事帮忙加了日志并反复确认说他已经把回调返给我了,并且进程号都是我app的进程,别的接入的模块都没有此问题,反复对比了别的接此jar的同事的代码,发现无明显差异。
吐槽:明明get,set都可以callback不可以,真的坑爹,我直接傻掉
尝试解决问题
因为出问题的第一时间就对比了自己的实现方法和别人模块的问题,所以代码写法确定是没有错的,那么差异点就在线程和一些配置上面了,首先确定的就是环境的依赖,因为编译和get,set方法是没有问题,怀疑在线程上出了问题导致回调接受不到,让写接口的同事帮忙在返回的地方加了日志,明确了是有返回并且线程号是一致的。那么就确定了是项目环境导致的,一个是代码位置,一个是依赖位置。
代码位置
尝试将callback代码位置放到APP model,编译运行,还是无法收到回调。
依赖位置(最后解决)
尝试将每一个model都放置一个jar包,但并不改变依赖方式,还是通过compileOnly依赖。代码位置保持不变,编译运行,可以收到回调了!
总结
问题的根本原因在于依赖的jar包在模块间的传递性。通过在每个模块中都放置一份jar包,确保依赖的一致性,从而解决了callback回调无法接收的问题。这也算8.0的一个bug?