我正在将我的项目移至 Gradle 构建系统。在 APK 构建之后,我需要使用制造商证书对其进行签名。
如何在构建APK之后由Gradle执行.bat文件?
task runSign(type:Exec) {
println "Sign apk..."
commandLine = ['cmd','/c','sign.bat']
}
我知道如何在构建之前运行.bat(但我需要在之后):
preBuild.doLast {
runSign.execute()
}
答案 0 :(得分:2)
我找到了解决方案。
转到Run - >编辑配置...
在APK构建后选择要在哪里运行任务的模块。添加新配置 “Gradle-aware Make”。
单击下图中的图标,选择实施任务的模块,并写下其名称。
完成此步骤后,您将在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'
作为配置。