AAR合并

96
ingxin
0.6 2019.07.11 00:33* 字数 511

前言

虽然标题叫AAR合并,但本文并不是让你将两个AAR文件通过硬核操作方式合并成一个AAR文件,本文主要是通过maven平台来解决这个问题。

解决方案

我们需要解决的问题并不是合并两个文件,而是给使用者提供统一的依赖入口,而合并只是解决这个问题一种方法。

如果将aar变成gradle依赖,那就没有这个烦恼了呢。
emmm....,这个方案可行性很高啊!

上传maven仓库时,首先会将library打包aar成文件,以及会生成一个pom文件以及其他几个文件,然后将这些文件上传到maven平台上,最终我们可以通过gradle依赖的方式直接引用到这个aar。

现在需要做的就是在正常发布的流程中,用我们需要合并的AAR A文件替换掉library生成的AAR B文件。那么最终在gradle中使用这个依赖时,就相当于直接使用了A文件的代码。

aar变成了gradle依赖,你都解决不了问题,反省一下!

如果不能使用maven等公有平台,点这里https://www.jianshu.com/p/8f7e32015836,不过这个方法我没有验证过。

替换AAR

在正常发布library到maven的流程中,将aar文件替换即可,所以在正式操作前,请务必能个正常发布library到maven。

一切准备OK后,在library的gradle文件中添加下面脚本。

/**
 * 在打包上传maven仓库之前
 * 用sdk/paradigmsdk.aar文件替换掉build/outputs/aarx-release.aar
 * sdk/paradigmsdk.aar是需要合并文件的路径
 */
task replaceMyAAR {
    //解析的时候执行
    println("初始化替换aar任务")

    doFirst {
        //执行任务前执行
        copy {
            println 'copy assembleDebug'
            from('sdk/paradigmsdk.aar')
            into('build/outputs/aar')
            rename {
                project.getName() + '-release.aar'
            }
        }
    }

    doLast {
        //执行完任务时候执行
    }
}

//在解析build.gradle之后执行该脚本
afterEvaluate {
    tasks.forEach { task ->
        // 注意这个 xjsdkwrap:bintrayUpload 参数
        // xjsdkwrap:bintrayUpload 是上传maven时最后一个task的名字,我们要在执行他前替换文件
       // 如何找这个参数下面会讲到
        if (task.getPath() == ":xjsdkwrap:bintrayUpload") {
            //hook住bintrayUpload,在执行上传操作前先执行替换逻辑
            task.dependsOn replaceMyAAR
        }
    }
}

因为每个工程的module名和使用的maven上传代码不一样,所以名字是不固定的。
那么如何寻找最后一个参数?

打开下面的面板或者输出日志,正常执行一次上传流程。观察最后上传的最后一次名字即可。


寻找参数
android