最近项目中需要接入新的SDK,需求是根据后台的配置来确认是否需要添加新SDK的依赖。决定使用自定义Gradle插件来实现。
实现思路是:
- 从后端请求是否需要添加新SDK依赖的配置。
- 插件中动态添加SDK依赖。
1. 从后端请求配置
自定义插件中进行网络请求需要添加依赖包:
plugins {
id 'groovy'
}
dependencies {
implementation(gradleApi())
//网络请求库
implementation("com.squareup.okhttp3:okhttp:4.9.2")
//用于解析后台返回的json数据,也可以用groovy自带的json解析,但比较复杂。
implementation("com.google.code.gson:gson:2.8.9")
}
然后就可以进行简单的网络请求:
void getAppLinksFromNet() {
def url = "config file download path"
OkHttpClient client = new OkHttpClient.Builder()
.build()
Request request = new Request.Builder()
.get()
.url(url)
.build()
Call call = client.newCall(request)
try {
Response response = call.execute()
if (response.isSuccessful()) {
ResponseBody body = response.body()
if (body != null) {
String bodyString = body.string()
try {
Config Config = new Gson().fromJson(bodyString, new TypeToken<SdkConfig>() {
}.getType())
} catch (JsonIOException e) {
e.printStackTrace()
}
}
}
} catch (IOException e) {
e.printStackTrace()
}
}
2. 动态添加依赖
根据配置文件来添加依赖,代码如下:
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.afterEvaluate {
addDependencies(project, dependenciesList)
}
}
/**
* 添加依赖包
*/
void addDependencies(Project project, ArrayList<String> dependenciesList) {
project.dependencies {
dependenciesList.each {dependenciesName->
implementation(dependenciesName)
}
}
}
}