美团Robust提供的的依赖只能应用在APP项目中,SDK项目要使用Robust必须简单的修改一下源码才能使用。在修改源码前我们需要到github上去下载Robus的源码https://github.com/Meituan-Dianping/Robust。然后按照我之前写的《Robust热更应用在APP项目》这篇文章上的步骤配置后robust的配置。一切准备就绪后就开始准备改了。。。。
配置好之后的目录结构是这样的。。。
mylibrary是新建的sdk项目
引用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后编译项目会遇到如下问题,不要紧张,我们根据问题来修改源码。
上图中的问题是找不到属性“applicationVariants”,因为我们是library项目,所以application相关的属性是没有的,所以搜索一下applicationVariants,将改为libraryVariants
改好之后编译一下,咦,还是报一样的错误,那是因为我们引用的是本地仓库的代码,所以发布一下再编译就好了,发布之前记得mylibrary项目先不要引用robust项目,要不然uploadArchives时候还是会报错的。
项目发布之后再次编译,这次错误换了一个。。。
这个错误信息还是告诉我们某某某不能应用到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
我们需要将SCOPE_FULL_PROJECT修改一下,但是怎么改呢,先点进去看一下源码
源码定义了SCOPE_FULL_PROJECT和SCOPE_FULL_LIBRARY,看名字毫无疑问改为SCOPE_FULL_LIBRARY。
然后再发布到本地仓库,编译一下
apk和补丁都编译成功。。。。
测试一下也能成功应用补丁
Demo项目代码已经上传到github https://github.com/xyAndroid/RobustDemo