Robust热更应用在SDK项目

美团Robust提供的的依赖只能应用在APP项目中,SDK项目要使用Robust必须简单的修改一下源码才能使用。在修改源码前我们需要到github上去下载Robus的源码https://github.com/Meituan-Dianping/Robust。然后按照我之前写的《Robust热更应用在APP项目》这篇文章上的步骤配置后robust的配置。一切准备就绪后就开始准备改了。。。。

配置好之后的目录结构是这样的。。。
mylibrary是新建的sdk项目


image.png

引用gradle插件项目需要将gradle发布到本地仓库,也就是需要在本地搭建一个maven仓库。具体搭建方法网上有很多博客,这里就不列出来了。

//设置maven deployer
uploadArchives {
    repositories {
        mavenDeployer {
            //设置插件的GAV参数
            pom.groupId = 'com.xy.plugin'
            //pom.artifactId = 'cooker-plugin'
            pom.version = 1.6
            //文件发布到下面目录
            repository(url: uri('D:/release'))
        }
    }
}

我是将groupId设置为“com.xy.plugin”,所以在全局的build.gradle中使用本地仓库里面的robust就需要如下配置

dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.xy.plugin:gradle-plugin:1.6'
        classpath 'com.xy.plugin:auto-patch-plugin:1.6'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
        classpath 'me.tatarka:gradle-retrolambda:3.2.0'
        classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
    }

其余配置和应用到app项目是一样的。
配置好mylibrary后编译项目会遇到如下问题,不要紧张,我们根据问题来修改源码。


image.png

上图中的问题是找不到属性“applicationVariants”,因为我们是library项目,所以application相关的属性是没有的,所以搜索一下applicationVariants,将改为libraryVariants


image.png

改好之后编译一下,咦,还是报一样的错误,那是因为我们引用的是本地仓库的代码,所以发布一下再编译就好了,发布之前记得mylibrary项目先不要引用robust项目,要不然uploadArchives时候还是会报错的。
项目发布之后再次编译,这次错误换了一个。。。
image.png

这个错误信息还是告诉我们某某某不能应用到library项目
我们先了解一下scopes

scopes:transform 的作用域
type des
PROJECT 只处理当前项目
SUB_PROJECTS 只处理子项目
PROJECT_LOCAL_DEPS 只处理当前项目的本地依赖,例如jar, aar
EXTERNAL_LIBRARIES 只处理外部的依赖库
PROVIDED_ONLY 只处理本地或远程以provided形式引入的依赖库
TESTED_CODE 测试代码

也就是说我们现在需要修改一下transform 的作用域,那我们找到robust的transform,是在RobustTransform.groovy

image.png

我们需要将SCOPE_FULL_PROJECT修改一下,但是怎么改呢,先点进去看一下源码
image.png

源码定义了SCOPE_FULL_PROJECT和SCOPE_FULL_LIBRARY,看名字毫无疑问改为SCOPE_FULL_LIBRARY。
然后再发布到本地仓库,编译一下
apk和补丁都编译成功。。。。
测试一下也能成功应用补丁
Demo项目代码已经上传到github https://github.com/xyAndroid/RobustDemo

image.png

image.png

你可能感兴趣的:(Robust热更应用在SDK项目)