APK构建后,从Android gradle执行.bat

时间:2016-01-30 12:04:39

标签: android batch-file gradle android-gradle

我正在将我的项目移至 Gradle 构建系统。在 APK 构建之后,我需要使用制造商证书对其进行签名。

如何在构建APK之后由Gradle执行.bat文件?

task runSign(type:Exec) {
    println "Sign apk..."
    commandLine = ['cmd','/c','sign.bat']
}

我知道如何在构建之前运行.bat(但我需要在之后):

preBuild.doLast {
    runSign.execute()
}

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。

转到Run - >编辑配置...

在APK构建后选择要在哪里运行任务的模块。添加新配置 “Gradle-aware Make”。

Picture 1

单击下图中的图标,选择实施任务的模块,并写下其名称。

Picture 2

完成此步骤后,您将在APK构建后执行自定义Gradle任务。

答案 1 :(得分:0)

我需要执行类似的操作,但除此之外,我需要知道构建了哪个产品,以及使用了什么配置。

我最终在build.gradle中添加了以下行:

android {
    applicationVariants.all { variant -> variant.assemble.doLast { signAndInstall.execute() } }
    ...

使用以下辅助函数:

//
//  Returns array for CommandLine, path, variant (arm7), configuration (debug / release)
//
def getCommandLine(path)
{
    String taskReqStr = getGradle().getStartParameter().getTaskRequests().toString()
    Pattern pattern = Pattern.compile("(assemble|generate)(\\w+)(Release|Debug)")
    Matcher matcher = pattern.matcher(taskReqStr)
    if (!matcher.find())
        return [ path ]

    String flavor = matcher.group(2).toLowerCase() + " " + matcher.group(3).toLowerCase()
    return [ path, matcher.group(2).toLowerCase(), matcher.group(3).toLowerCase() ]
}

task signAndInstall(type: Exec) {
    def batch = projectDir.toString() + '\\postbuild.bat'
    commandLine = getCommandLine(batch)
}

跟随postbuild.bat

@echo off
rem echo %0 %*
if %1. == . exit /b 0
if %2. == . exit /b 0
set InPath=%~dp0build\outputs\apk\%1\%2\app-%1-%2.apk
set OutPath=%~dp0build\outputs\apk\app-%1-%2.apk
copy /y %InPath% %OutPath% 1>NUL

您当然可以将此批处理配置为执行您喜欢的任何操作,%1会收到您的产品支持(例如arm7, arm8, fat ...),%2会收到'debug' or 'release'作为配置。