前言
虽然标题叫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上传代码不一样,所以名字是不固定的。
那么如何寻找最后一个参数?
打开下面的面板或者输出日志,正常执行一次上传流程。观察最后上传的最后一次名字即可。
寻找参数
网友评论