除了一些常见的配置问题(这些网上大把大把的文章),这次老项目又遇到一个诡异的问题。
问题描述:
项目是组件化的,其他的module都是可以正常再kotlin类引用java,只有一个module不行, 而且这个module只是不能应用自己module的java类, 公共组件的java类是没有问题的。
解决过程:
很明显是这个module的问题,但是kotlin的配置是没毛病的。最后发现唯一的不同是, 包的结构不同, 其他的module是逐级嵌套的结构比如 com/projectname/module/代码, 而这个module是只有一级,命名使用.来隔离的:com.projectname.module/代码, 这样java的编译器是可以识别,并且自动转换我嵌套的形式, 所以在Android Studio里面, 这两种结构看起来是一模一样的,必须到操作系统的文件系统(Finder)中查看才能看到区别: 一个是嵌套的,一个只有一层。
而Kotlin的编译器无法识别这种用点分割命名的方式, 他只能识别嵌套的形式, 所以无法识别引用到kotlin类的本module的java类了。导致编译不能通过 compileDebugKotlin failed.