通过AppCenter构建后脚本用Curl上传APK报错curl: (26)
解决AppCenter Post-Build脚本curl上传APK报错curl: (26) Failed to open/read local data的问题
curl返回(26)错误的核心原因是指定的本地文件不存在,或者进程没有权限读取该文件。结合你提供的AppCenter脚本,可通过以下步骤排查修复:
1. 先验证文件路径与存在性
在curl命令前添加调试输出,确认环境变量指向的目录下是否真的存在app-release.apk:
echo "APPCENTER_OUTPUT_DIRECTORY路径:$APPCENTER_OUTPUT_DIRECTORY" ls -la "$APPCENTER_OUTPUT_DIRECTORY"
执行脚本后查看AppCenter构建日志,就能清楚看到目录下的所有文件,确认目标APK是否存在。
2. 修正curl命令的路径引用
原脚本中-F "file_stage=@$APPCENTER_OUTPUT_DIRECTORY/app-release.apk"存在潜在问题:如果$APPCENTER_OUTPUT_DIRECTORY包含空格或特殊字符,路径会被拆分导致curl无法识别。需要给路径添加转义引号,确保完整解析:
-F "file_stage=@\"$APPCENTER_OUTPUT_DIRECTORY/app-release.apk\""
3. 确认APK的实际生成路径
部分Android项目的APK不会直接生成在$APPCENTER_OUTPUT_DIRECTORY根目录,而是在子路径中(比如Gradle项目的app/build/outputs/apk/release/)。如果调试发现根目录没有APK,需要把路径调整为实际生成位置,例如:
-F "file_stage=@\"$APPCENTER_SOURCE_DIRECTORY/app/build/outputs/apk/release/app-release.apk\""
修改后的完整脚本
if [ "$AGENT_JOBSTATUS" == "Succeeded" ]; then echo "Current branch is $APPCENTER_BRANCH" if [ "$APPCENTER_BRANCH" == "staging" ]; then # 调试输出,检查路径和文件 echo "APPCENTER_OUTPUT_DIRECTORY路径:$APPCENTER_OUTPUT_DIRECTORY" ls -la "$APPCENTER_OUTPUT_DIRECTORY" curl \ -F "status=2" \ -F "file_stage=@\"$APPCENTER_OUTPUT_DIRECTORY/app-release.apk\"" \ https://stag.api.website.com/v1/upload/android else echo "Current branch is $APPCENTER_BRANCH" fi fi
内容的提问来源于stack exchange,提问作者Avinash A
相关产品推荐
相关产品推荐

