返回

Gradle:自动化打包、加固和发布的自定义插件

Android

前言

在软件开发中,构建和发布管理是至关重要的。Gradle 是一个强大的构建工具,允许开发人员定义自定义插件以简化特定任务。本指南将展示如何创建自定义 Gradle 插件,它可以自动化打包、加固并发布 Android 应用程序,同时通过钉钉机器人发送更新通知。

创建自定义插件

创建一个名为 AutoReleasePlugin 的新 Gradle 插件类,继承自 Plugin<Project> 类。在 apply() 方法中,定义插件执行的任务:

class AutoReleasePlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.task('release') {
            // 打包任务
        }
        project.task('securityCheck') {
            // 加固任务
        }
        project.task('publish') {
            // 发布任务
        }
    }
}

自动化打包

使用 compileJavaassembleRelease 任务自动化打包过程:

task release {
    dependsOn 'compileJava'
    doLast {
        gradle.startParameter.taskRequests.stream()
                .filter { it.args == ['assembleRelease'] }
                .forEach { it.run() }
    }
}

加固应用程序

使用 ProGuard 加固发布版本,以保护应用程序免受安全漏洞的影响:

task securityCheck {
    doLast {
        exec {
            commandLine 'java', '-jar', 'proguard.jar', '-injars', 'build/outputs/apk/release/app-release.apk',
                    '-outjars', 'build/outputs/apk/release/app-release-proguard.apk', '-configuration', 'files/proguard-rules.pro'
        }
    }
}

发布到商店

使用 PlayPublisherApp Store Connect API 发布应用程序。例如,使用 Play Publisher API:

task publish {
    dependsOn 'securityCheck'
    doLast {
        exec {
            commandLine 'gradle-play-publisher', 'publish', '-credPath', 'my-service-account.json', '-releaseFile', 'build/outputs/apk/release/app-release-proguard.apk'
        }
    }
}

发送钉钉通知

使用钉钉机器人 API 通过消息通知团队新版本:

task notifyTeam {
    doLast {
        def webhook = 'https://oapi.dingtalk.com/robot/send?access_token=...'
        def data = [
                "msgtype": "markdown",
                "markdown": [
                        "title": "New release available!",
                        "text": "The new version of the app is now available on the store."
                ]
        ]
        def json = new groovy.json.JsonBuilder(data).toPrettyString()
        URLConnection conn = new URL(webhook).openConnection()
        conn.doOutput = true
        conn.setRequestProperty('Content-Type', 'application/json; charset=utf-8')
        conn.outputStream.write(json.getBytes('UTF-8'))
    }
}

应用插件

在项目中应用自定义插件,只需在 build.gradle 文件中添加以下内容:

plugins {
    id 'com.example.autorelease' version '1.0'
}

结论

通过创建自定义 Gradle 插件,您可以自动化打包、加固和发布过程,并通过钉钉机器人发送更新通知。这可以显著提高效率和团队协作,让您专注于构建高质量的软件。