gpt4 book ai didi

amazon-web-services - 通过适用于 Go 的 AWS 开发工具包在 Device Farm 中上传的 Android 应用程序从未更改状态为 INITIALIZED

转载 作者:IT王子 更新时间:2023-10-29 01:42:22 26 4
gpt4 key购买 nike

我正在尝试使用适用于 Go 的 AWS 开发工具包在 AWS Device Farm 中自动运行应用程序。但是任何使用 Go 版本的 SDK 上传的应用程序都不会从“INITIALIZED”改变状态。如果我通过 AWS 控制台 Web UI 上传它们,那么一切都会好起来的。

上传代码示例:
func uploadApp(client *devicefarm.DeviceFarm, appType, projectArn string) string {
参数 := &devicefarm.CreateUploadInput{
名称:aws.String(*appName),
ProjectArn: aws.String(projectArn),
类型:aws.String(appType),
}
resp, err := client.CreateUpload(参数)
如果错误!=无{
log.Fatal("上传应用失败,因为:", err.Error())
}
log.Println("上传 ARN:", *resp.Upload.Arn)
返回 *resp.Upload.Arn
}
作为回应,我得到了类似的东西:

{
上传:{
阿恩:“arn:aws:devicefarm:us-west-2:091463382595:上传:c632e325-266b-4bda-a74d-0acec1e2a5ae/9fbbf140-e377-4de9-b7df-dd18a21b2bca”,
创建时间:2016-01-15 14:27:31 +0000 UTC,
名称:“app-debug-unaligned.apk”,
状态:“已初始化”,
输入:“ANDROID_APP”,
网址:“bla-bla-bla”
}
}

时间状态永远不会从“INITIALIZED”改变。正如我提到的,从 UI 计划运行的应用程序运行良好。

如何找出原因?

=======================================

解决方案:

1) 在 CreateUpload 之后,它需要在响应中使用预签名的 S3 链接上传文件
2) 上传应该通过HTTP PUT 请求执行,通过接收到的URL 和正文中的文件内容
3) 在&devicefarm.CreateUploadInput中需要指定ContentType参数。对于 PUT 请求,应使用 Content-Type header 的相同值
4) 如果 PUT 请求将从 Go 代码发送,则应手动设置 Content-Length header

最佳答案

当您调用 CreateUpload API 时,Device Farm 将返回包含“Url”字段的“上传”响应。

{
上传:{
阿恩:“阿恩:aws:devicefarm:us-west-2:......”,
创建时间:2016-01-15 14:27:31 +0000 UTC,
名称:“应用程序名称.apk”,
状态:“已初始化”,
输入:“ANDROID_APP”,
网址:“bla-bla-bla”
}
}

返回的 url“bla-bla-bla”是一个预签名的 S3 url,供您上传应用程序。有关使用预签名 url 上传对象的文档:http://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html

一旦您的申请被上传,该应用将被处理。您上传的状态将更改为“处理中”和“成功”(如果有问题则为“失败”)。一旦它处于“成功”状态,您就可以使用它来安排运行。

关于amazon-web-services - 通过适用于 Go 的 AWS 开发工具包在 Device Farm 中上传的 Android 应用程序从未更改状态为 INITIALIZED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com