You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交Google Play Console编辑后,如何通过BASH脚本获取APK制品URL?

当然可以!用Bash脚本+Google Play Developer API完全能实现这个需求,我帮你拆解下具体步骤和可直接复用的脚本示例:

核心思路

Google Play Developer API提供了专门的端点来获取已上传APK的临时下载URL,我们的工作流是:

  • 通过服务账号获取API访问令牌
  • 调用API查询目标APK的详情(或对应发布轨道的信息)提取下载URL
  • 下载APK并上传到你的私有Web服务器
前置准备
  1. 确保你的服务账号已获得Google Play Console的编辑权限(在Play Console → 设置 → 用户和权限中添加服务账号邮箱,授予「编辑」角色)
  2. 下载服务账号的JSON密钥文件到本地
  3. 安装必要工具:curl(几乎所有系统默认都有)、jq(用于解析JSON响应,可通过apt install jq/brew install jq安装)
脚本实现

下面提供两种方案,你可以根据环境选择:

方案1:用gcloud简化认证(推荐,适合已配置gcloud的环境)

这个方案利用gcloud工具自动处理令牌生成,省去手动JWT签名的麻烦:

#!/bin/bash

# -------------------------- 配置区 --------------------------
PACKAGE_NAME="com.your.company.app"       # 你的应用包名
SERVICE_ACCOUNT_KEY="./service-account.json" # 服务账号密钥文件路径
EDIT_ID="abc123xyz"                       # 编辑ID(上传APK时的响应会返回,或用API查询最新编辑)
VERSION_CODE="1001"                       # 目标APK的版本号
PRIVATE_SERVER_USER="your-server-user"    # 私有服务器用户名
PRIVATE_SERVER_HOST="your-server-domain"  # 私有服务器地址
PRIVATE_SERVER_PATH="/var/www/test-apks/" # 服务器上的存储路径
# -----------------------------------------------------------

# 激活服务账号并获取访问令牌
gcloud auth activate-service-account --key-file="$SERVICE_ACCOUNT_KEY"
ACCESS_TOKEN=$(gcloud auth print-access-token)

# 调用API获取APK的临时下载URL
echo "正在获取APK下载链接..."
APK_DOWNLOAD_URL=$(curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/$PACKAGE_NAME/edits/$EDIT_ID/apks/$VERSION_CODE" | \
  jq -r '.downloadUrl')

if [ -z "$APK_DOWNLOAD_URL" ]; then
  echo "获取下载URL失败,请检查配置或权限"
  exit 1
fi
echo "成功获取URL: $APK_DOWNLOAD_URL"

# 下载APK到本地临时文件
echo "正在下载APK..."
curl -o temp-apk-file.apk "$APK_DOWNLOAD_URL"

# 上传到私有Web服务器(这里用scp,你也可以换成服务器的上传API)
echo "正在上传到私有服务器..."
scp temp-apk-file.apk "$PRIVATE_SERVER_USER@$PRIVATE_SERVER_HOST:$PRIVATE_SERVER_PATH"

# 清理本地临时文件
rm temp-apk-file.apk

echo "操作完成!APK已上传到私有服务器"

方案2:纯curl+openssl无依赖版(适合没有gcloud的环境)

如果你的环境无法安装gcloud,可以手动生成JWT令牌来认证:

#!/bin/bash

# -------------------------- 配置区 --------------------------
PACKAGE_NAME="com.your.company.app"
SERVICE_ACCOUNT_KEY="./service-account.json"
EDIT_ID="abc123xyz"
VERSION_CODE="1001"
PRIVATE_SERVER_USER="your-server-user"
PRIVATE_SERVER_HOST="your-server-domain"
PRIVATE_SERVER_PATH="/var/www/test-apks/"
# -----------------------------------------------------------

# 从密钥文件提取服务账号信息
CLIENT_EMAIL=$(jq -r '.client_email' "$SERVICE_ACCOUNT_KEY")
PRIVATE_KEY=$(jq -r '.private_key' "$SERVICE_ACCOUNT_KEY")

# 生成JWT头部和声明(有效期1小时)
HEADER='{"alg":"RS256","typ":"JWT"}'
NOW=$(date +%s)
EXPIRY=$((NOW + 3600))
CLAIM=$(cat <<EOF
{
  "iss": "$CLIENT_EMAIL",
  "scope": "https://www.googleapis.com/auth/androidpublisher",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": $EXPIRY,
  "iat": $NOW
}
EOF
)

# Base64URL编码工具函数
base64url_encode() {
  openssl base64 -e -A | tr '+/' '-_' | tr -d '='
}

# 组装JWT签名输入
ENCODED_HEADER=$(echo -n "$HEADER" | base64url_encode)
ENCODED_CLAIM=$(echo -n "$CLAIM" | base64url_encode)
SIGNATURE_INPUT="$ENCODED_HEADER.$ENCODED_CLAIM"

# 生成JWT签名
SIGNATURE=$(echo -n "$SIGNATURE_INPUT" | openssl dgst -sha256 -sign <(echo "$PRIVATE_KEY") | base64url_encode)
JWT="$ENCODED_HEADER.$ENCODED_CLAIM.$SIGNATURE"

# 获取访问令牌
ACCESS_TOKEN=$(curl -s -X POST "https://oauth2.googleapis.com/token" \
  -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
  -d "assertion=$JWT" | jq -r '.access_token')

# 后续步骤和方案1一致:获取URL、下载、上传
APK_DOWNLOAD_URL=$(curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/$PACKAGE_NAME/edits/$EDIT_ID/apks/$VERSION_CODE" | \
  jq -r '.downloadUrl')

if [ -z "$APK_DOWNLOAD_URL" ]; then
  echo "获取下载URL失败,请检查配置或权限"
  exit 1
fi

curl -o temp-apk-file.apk "$APK_DOWNLOAD_URL"
scp temp-apk-file.apk "$PRIVATE_SERVER_USER@$PRIVATE_SERVER_HOST:$PRIVATE_SERVER_PATH"
rm temp-apk-file.apk

echo "操作完成!APK已上传到私有服务器"
关键注意事项
  • 临时URL有效期:Google返回的APK下载URL有效期约1小时,所以要在获取后尽快完成下载和上传
  • 自动获取EDIT_ID:如果你不想手动填写EDIT_ID,可以调用Edits: list端点获取最新的编辑:
    LATEST_EDIT_ID=$(curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
      "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/$PACKAGE_NAME/edits" | \
      jq -r '.edits[0].id')
    
  • 权限验证:如果出现权限错误,务必检查服务账号在Play Console中的角色是否为「编辑」,且API已启用(在Google Cloud Console中搜索「Google Play Developer API」并启用)

内容的提问来源于stack exchange,提问作者AhiyaHiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:36:33