【发布时间】:2016-01-28 16:05:37
【问题描述】:
我使用 bugsnag 来监控我的 Android 应用程序中的崩溃。 我在编译发布版本时也使用 ProGuard。 我需要上传在我的项目的 build/outputs/mapping/prod/release 文件夹中生成的 mapping.txt 文件。
当我在 (Windows) 命令行中运行此命令时:
curl https://upload.bugsnag.com -F proguard=@C:/mapping.txt -F apiKey=1111111111111111111111 -F versionCode=11111111 -F appId=com.my.package -F versionNumber=1.0.0
文件已上传,一切正常。
我只需要向 gradle 添加一个任务,以便它在文件准备好后上传文件。 因此,一旦我编译了要发布的项目,mapping.txt 文件就会生成,一旦准备就绪,就可以使用 curl 命令 (which is taken from bugsnag's web site by the way) 上传文件。
我尝试了很多变化。当前编译但我不认为该文件正在上传......我看不到任何迹象表明它确实发生了。 这是我目前使用的代码:
task uploadPro(type: Exec) {
logger.error("inside upload task")
commandLine 'cmd', '/c', 'curl', 'https://upload.bugsnag.com', '-F','proguard=@build/outputs/mapping/prod/release/mapping.txt', '-F', 'apiKey=1111111111111111111111', '-F', 'versionCode=111111', '-F', 'appId=com.my.package', '-F', 'versionNumber=1.0.0'
standardOutput = new ByteArrayOutputStream()
doLast {
String output = standardOutput.toString()
logger.info(output);
}
}
我也试过用这个:
def p = ['cmd', '/c', 'curl', 'https://upload.bugsnag.com', '-F', 'proguard=@build/outputs/mapping/prod/release/mapping.txt', '-F', 'apiKey=11111111111111111111111', '-F', 'versionCode=1111111', '-F', 'appId=com.my.package', '-F', 'versionNumber=1.0.0'].execute()
我调用这个任务的方式是使用这个命令:
tasks.getByName("assembleRelease").finalizedBy(uploadPro)
我真的不知道该怎么做。任何帮助表示赞赏!谢谢!
【问题讨论】:
-
也许这可能就足够了:
assembleRelease.finalizedBy uploadPro -
uploadPro 任务确实有效。我可以看到在 Gradle 控制台中打印出“内部上传任务”。所以我确定已经达到了代码。但我不确定我运行 curl 命令的方式是否正确......在 Windows cmd 中,当我运行此命令并且它成功时,我看到一个结果文本:OK。如果我失败了,我会看到错误文本。我怎样才能让那些在gradle?以及如何确保在 mapping.txt 文件生成之后而不是之前调用它?
标签: android curl android-gradle-plugin android-proguard bugsnag