安卓无法调用模块aar中的依赖问题

问题背景

模块化在安卓开发中应用广泛,开发者可以将自己工程中的模块编译成aar提供给其他工程使用,也可以使用其他工程提供的模块aar. 但是这些aar可能有自己的依赖(如jar包)等。当外部工程在依赖aar时,可能无法依赖到aar的依赖。

模块被自身工程使用的情况

对于被依赖的模块,如果其是在自身的工程中,如果在编译时提示找不到相关的类或资源,常见的解决方案是:

  • 将compileOnly修改为implementation或api
  • 若是单元测试无法依赖,需添加androidTestImplementation
    即解决思路就是修改build.gradle中的编译关键字,让其依赖在编译后,也能被打包到apk中。

模块被其他工程使用的情况

一般情况下,模块包括资源文件的话,需要将其编译成aar文件,才能被其他工程所依赖。但是会发现,不管是否使用implementation或者api关键字,其相关依赖都不会被编译到aar文件中。导致在依赖aar时,会告警找不到aar中的类。

常见的解决方案为:

  • 将依赖复制到工程中
    若模块中的依赖不是动态依赖,即是将依赖文件放置在本地路径下。可以将这些依赖复制到使用模块的工程中。不推荐该方法。

  • 复制依赖到aar中
    在对应模块的build.gradle中添加task

task copyLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

执行该任务后,相应的依赖会被包含到aar中。

  • 在外部工程中添加依赖
    例如在aar对应的模块中,其依赖是
implementation xxx

只需将这句命令复制到使用aar的工程的build.gradle中,即可实现对其的依赖。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容