Alo*_*ski 2 android curl android-gradle-plugin bugsnag android-proguard
我使用 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
Run Code Online (Sandbox Code Playgroud)
文件已上传,一切正常。
我所需要的只是向 gradle 添加一个任务,以便它在准备好后上传文件。因此,一旦我编译了要发布的项目,mapping.txt 文件就会生成,一旦准备好,就使用这个curl 命令上传该文件(顺便说一下,该命令取自bugsnag 的网站)。
我尝试了很多变化。当前的文件可以编译,但我不认为该文件正在上传......我看不到任何迹象表明它确实发生了。这是我当前使用的代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这个:
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()
Run Code Online (Sandbox Code Playgroud)
我调用此任务的方式是使用以下命令:
tasks.getByName("assembleRelease").finalizedBy(uploadPro)
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做。任何帮助表示赞赏!谢谢你!
我找到了自己问题的解决方案......主要是。这是我用来在构建过程结束时运行curl命令的代码:
task uploadPro << {
logger.error("Uploading mapping.txt file to bugsnag")
def myCommand = "cmd /c curl https://upload.bugsnag.com -F proguard=@path\\to\mappingFile\\mapping.txt -F " +
"apiKey=111111111111111111111111 -F versionCode=" + versionCodeId + " -F " +
"appId=com.xxxx.yyy.zzz -F versionNumber=" + versionId
ProcessBuilder builder = new ProcessBuilder(myCommand.split(' '));
Process process = builder.start();
process.waitFor()
println process.err.text
println process.text
}
Run Code Online (Sandbox Code Playgroud)
然后我用它在构建过程结束时运行它:
gradle.buildFinished {
tasks.uploadPro.execute()
}
Run Code Online (Sandbox Code Playgroud)
不能确定这是最佳实践,但它确实有效。
我希望仅在发布 buildType 期间运行 uploadPro 任务...但这被证明也很困难。
| 归档时间: |
|
| 查看次数: |
9826 次 |
| 最近记录: |