Android 自定义Gradle插件(三):动态添加依赖

2,076 阅读1分钟

最近项目中需要接入新的SDK,需求是根据后台的配置来确认是否需要添加新SDK的依赖。决定使用自定义Gradle插件来实现。

实现思路是:

  1. 从后端请求是否需要添加新SDK依赖的配置。
  2. 插件中动态添加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)
            }
        }
    }
}