生成aar以及引入到项目中遇到的问题的笔记

·  阅读 164

因为未来公司的项目会需要聚合一些三方sdk生成自己的sdk,所以近期在整理公司现有的一些三方sdk并尝试聚合生成自己的sdk。在生成aar测试的时候遇到了一些问题,在此记录一下。

AndroidStudio生成aar的方式

1.可以选择新建项目或者用旧项目改造,需要将AndroidManifest中Application标签中的属性都删掉(如果需要保留的话,得处理好引入到主项目后,合并Manifest时可能会发生的冲突问题),若使用旧项目的话AndroidManifes中Application内的主activity,需要把intent-filter的内容去除。 WeChat0e7db704505f6509548a980ef6f9e078.png

2.在app module的build.gradle中,把com.android.application pulgins 改成 com.android.library pulgins,以及去除defaultConfig中的applicationId。 WeChat08357146afe1b27b9f1d88574d656733.png

3.使用Gradle中的assemble构建项目。 WeChat903734420511da3aa655341561a5bc63.png

4.构建完成后会在app module的build/outputs/aar中找到生成的aar文件。 WeChat91e09f1fa4cff9df486f747b92fb20cd.png

遇到的问题

我在之前的工作中也构建过aar供其他项目使用,但在之前构建aar的时候我的项目中没有包含第三方的aar,而且也不需要在其他项目中使用我的aar中依赖的第三方包。 所以,这次的尝试很明显的是失败了,所幸解决方法并不难找,在网上找到解决的方案后我尝试了一下,成功在包含第三方aar的情况下生成了我自己的aar包,并且在其他项目中测试了aar中包含的第三方依赖的可用性,结果成功了,所以在此记录一下方案。

解决方案

1.针对项目中包含第三方aar问题

这里使用的是 github.com/kezong/fat-… 库。

在项目级的 build.gradle中添加fat-aar的依赖。 WeChat8ba16df8afce22bc9ceff139dea43caf.png 在app module的build.gradle中添加fat-aar插件,并用embed替换implementation关键字来引入你想一起打包的三方aar,然后就可以使用assemble来构建aar。 WeChat4d646230a0f54aa1177e7f85493391d6.png

2.针对其他项目无法使用aar中的第三方依赖问题。

针对这个问题找到的解决方式有两种,一是把所有三方依赖都改成用jar包或aar的方式引入项目,这种方式明显不合理。二是使用maven,远程本地都可以,我这边尝试了本地maven的方式。

在app module中添加 maven-publish插件。 WeChat7e6f06b000b1ab0c2a5e306c95277d22.png

同时添加如下代码,其中repositories中的url 即是你想要输出所生成文件的路径。

    publications {
        maven(MavenPublication) {
            groupId 'com.xxxxxx.xxxxxxx'
            artifactId 'xxxxxx'
            version '1.0.0'
            artifact "$buildDir/outputs/aar/zzzzz.aar"

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each { dependency ->
                    if (!"unspecified".equals(dependenciesNode.name)) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', dependency.group)
                        dependencyNode.appendNode('artifactId', dependency.name)
                        dependencyNode.appendNode('version', dependency.version)
                    }
                }
            }
        }
    }

    repositories {
        maven {
            url "/Users/xxxx/AndroidStudioProjects/mavenLocal"
        }
    }
}
复制代码

添加完后构建一下项目,然后可以在Gradle中使用publish,等publish完成后可以在对应的文件夹找到aar文件和pom文件。 WeChat18c0743ba4b689ce85a6024c52fee759.png

接着在需要使用aar的项目的 项目级build.gradle 中添加本地的maven路径。 WeChatde85667a2ada754bf70a4f76b16d80e3.png

在需要使用aar的项目的app moudle中如下引入aar即可。 WeChat4e93d2973c947579e70199d8e3327f8e.png

分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改