AAR 包中的依赖

在 aar 的源码中不论使用 implementation 或者 api,打成 aar 包之后,当我们通过 gradle 脚本上传到服务器时,我们可以通过 pom.project 来将 aar 源码中的依赖生成 pom.xml 文件。这些依赖配置项会通过脚本,被转义成 maven 中的依赖配置项。脚本片段如下:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: gradle.mavenUrl) {
                authentication(userName: gradle.mavenUserName, password: gradle.mavenPwd)
            }
            pom.project {
                name libraryName
                description mavenDesc
                url siteUrl

                groupId publishedGroupId
                artifactId artifact
                version publishVersion
            }
        }
    }
}

上面是我们工程中的配置。在 pom.project 的配置中其实还可以添加 scope 配置选项,如果未显示指明,那么 scope 就是 compile。因此,在未显示指明 scope 的情况下,aar 源码中无论是使用 implementation 还是 api,最终在 maven 中都会变为 compile

所以在默认配置下,依赖在 mavenpom.xml 文件中都是存在的,且表述为 compile。因此,当项目中通过 gradle 使用 maven 上的 aar 包时,pom.xml 文件中的依赖项就会被 gradle 解析。而此时 gradle 发现 maven 上的依赖配置是 compile,于是 gradle 会将其解析为 api 配置。

这就造成了,当我们在工程中直接依赖 aar 包时,aar 包中的依赖项因为被 gradle 解析为 api,因此在我们的工程中可以「看到」这些依赖项。
但是,当我们在工程中通过源码直接使用 aar 的源码工程时,如果 aar 工程中的依赖是通过 implementation 配置的,那么我们工程中就「看不到」aar 中的依赖项了。
这就导致了工程直接依赖 aar 和通过源码依赖 aar 时,他两的 gradle DAG 不同,从而导致了一些编译上的不方便。

关于 pom 中的 compile 可以阅读:Introduction to the Dependency Mechanism

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

推荐阅读更多精彩内容