AAR合并

作者: yin_xin | 来源:发表于2019-07-11 00:33 被阅读8次

    前言

    虽然标题叫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上传代码不一样,所以名字是不固定的。
    那么如何寻找最后一个参数?

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


    寻找参数

    相关文章

      网友评论

        本文标题:AAR合并

        本文链接:https://www.haomeiwen.com/subject/dzklkctx.html