教程 搜索 / 发布与基础设施 / 首次将 Android 应用上传至 Google Play
📝 文字 ● 高级 更新于 2026-05-13

首次将 Android 应用上传至 Google Play

从签名好的 AAB 到正式上架 Play 商店。上传本身只需一次点击,真正让首次发布者卡住的是签名密钥的选择、轨道管理、元数据填写以及漫长的审核等待。本教程为零 Android 发布经验的开发者提供完整的通关路径。

Google Play 的上传流程在概念上比 Apple 的更简单,但在实际操作中却更繁琐。说它简单,是因为二进制文件会即时推送给测试人员——没有预配置文件的繁复舞步,没有 entitlements 文件,也没有"开发版"与"发行版"构建之分。说它繁琐,是因为 Google 要求你填写的文件比 Apple 多得多:内容分级问卷、数据安全表单、目标受众声明、广告声明,以及开发者账号的政府 ID 验证。首次发布的大部分时间并不在构建上,而在元数据填写上。

理解整个流程的核心心智模型:你有一个签名密钥,它证明"这次更新来自与上一次相同的发布者"。一旦丢失,你将永远无法更新这个应用。Play 应用签名(Google 自 2017 年起推荐的方案)将其拆分为两个密钥:一个存放在你本机上的上传密钥(如果泄露可以轮换),以及一个由 Google 持有并用于签署实际下发给设备的二进制文件的应用签名密钥。除非有特殊原因,你几乎总应该选择 Play 应用签名。模型的另一半是轨道:内部测试 → 封闭测试 → 开放测试 → 正式发布,覆盖范围依次递增。通常先发布到内部测试轨道(最多 100 名指定测试人员,即时生效),再到封闭测试(私人邀请名单,约一小时生效),然后是开放测试(任何有链接的人),最后是正式发布(所有人)。大多数首次上传的路径是:内部测试 → 修复问题 → 正式发布,历时约一周。

本教程涵盖一次性账号设置、签名密钥方案选择、首个 AAB 构建、提交所需的元数据、内部轨道上传,以及收到审核反馈时的应对方式。最终状态:你的应用正式上架 Play 商店,任何 Android 设备均可下载。

你将学到什么

前置条件:一个可在模拟器上构建并运行的 Android 应用(AVD 教程)、一个 Google 账号、25 美元的一次性开发者注册费、一张政府颁发的身份证件(护照或驾照——Google 自 2023 年起要求新账号进行实名验证)、一张 1024×500 的特色图片、一个应用图标(512×512 PNG),以及至少 2 张手机截图(16:9 竖屏或横屏)。截图是大多数人在到达上传界面时才发现忘记准备的东西。

第 1 步:创建 Play Console 开发者账号

1

一次性 25 美元费用与政府 ID 验证

前往 play.google.com/console/signup,用你想用来拥有该应用的 Google 账号登录。选择个人组织

  • 个人——你是个人发布者,需要政府 ID 验证。
  • 组织——以公司主体发布应用,需要企业的 D-U-N-S 编号以及与该组织绑定的可验证电话号码。验证周期较长(1–2 周),但可以品牌名义而非个人名义发布。

支付 25 美元(终身有效,此账号可无限发布应用)。提交证件后等待验证——个人账号通常 48 小时内完成,组织账号时间更长。

"20 名测试人员满 14 天"规则(2024 年新增)。个人账号的首次发布者必须在封闭测试轨道上邀请 20 名测试人员,并将应用在封闭测试轨道上运行至少 14 天,之后才能推送到正式发布。请提前规划:账号验证通过当天就启动封闭测试,即使应用尚未完成也无妨。这 14 天可以与你完善元数据的时间并行计算。组织账号不受此规则约束。

第 2 步:确定签名策略

2

绝大多数情况下,选择 Play 应用签名

你需要在两种方案中选择一种:

  • Play 应用签名(约 99% 的情况推荐)。你在本地生成一个上传密钥;Google 生成并持有一个应用签名密钥。你上传的每个 AAB 都由上传密钥签名,Play 会将其剥离,再用应用签名密钥重新签名后下发给设备。如果上传密钥泄露,你可以联系 Google 进行轮换;用户设备上的应用仍可正常运行,因为应用签名密钥始终在 Google 手中。
  • 自管理签名(旧方式)。你生成一个密钥,自行签署所有内容,从不将密钥上传给 Google。一旦密钥丢失,便永远无法更新该应用。新应用将作为不同包名下的独立列表重新上架。这种方式适用于因法律原因不允许 Google 接触签名密钥的组织,并不适合大多数人。

选择 Play 应用签名。你接下来要生成的"上传密钥"就是本地构建所使用的签名密钥。

第 3 步:生成上传密钥

3

一个 keystore 文件,永久妥善保管

keytool -genkey -v \
  -keystore ~/keys/mybrand-upload.keystore \
  -keyalg RSA -keysize 2048 -validity 25000 \
  -alias mybrand-upload
# Enter a password. Save it in your password manager.
# Fill in the X.500 fields (name, organization, country).
# 25000 days = ~68 years. Yes, really. Keystores aren't supposed to expire.

务必备份这个 keystore 文件:云存储、加密 U 盘、密码管理器附件——任何能在你笔记本电脑损坏后幸存的地方都行。一旦丢失,就必须走 Google 的申诉流程(流程存在,但极为缓慢)。把它当作一份不动产契约来对待。

keystore 密码和密钥密码(两者都会要求你输入)可以相同,很多人为了简便起见使用同一个密码。两者都应存入密码管理器。

第 4 步:构建已签名的 AAB

4

必须是 AAB,不能是 APK——Play Console 会拒绝新应用的 APK 上传

app/build.gradle.kts(或 Groovy DSL 的 app/build.gradle)中添加发布签名配置:

android {
    signingConfigs {
        create("release") {
            storeFile = file(System.getenv("UPLOAD_KEYSTORE_PATH") ?: "$rootDir/keystore-not-set")
            storePassword = System.getenv("UPLOAD_KEYSTORE_PASSWORD")
            keyAlias = "mybrand-upload"
            keyPassword = System.getenv("UPLOAD_KEY_PASSWORD")
        }
    }
    buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}

构建 bundle:

export UPLOAD_KEYSTORE_PATH=~/keys/mybrand-upload.keystore
export UPLOAD_KEYSTORE_PASSWORD='your-password'
export UPLOAD_KEY_PASSWORD='your-password'
./gradlew :app:bundleRelease

# Output:
# app/build/outputs/bundle/release/app-release.aab

这就是你要上传的文件。验证其签名是否正确:

jarsigner -verify -verbose -certs app/build/outputs/bundle/release/app-release.aab
# Last line should say: "jar verified."
永远不要将 keystore 提交到 git。即使是私有仓库也存在未来泄露的风险。执行 echo "*.keystore" >> .gitignore,并通过环境变量或密钥管理器加载凭据。CI 构建应从加密密钥(GitHub Actions 加密密钥、AWS Secrets Manager 等)中获取 keystore,而非从仓库中读取。

第 5 步:在 Play Console 中创建应用

5

建立商店列表的基本框架

Play Console → 创建应用。填写以下信息:

  • 应用名称——用户在商店中看到的名称,最多 30 个字符。之后可以修改,但 URL 别名由此初始值决定。
  • 默认语言——商店列表主要文案所使用的语言区域,之后可添加其他语言。
  • 应用或游戏——影响可选的分类树,多数情况下影响不大。
  • 免费或付费——付费指一次性购买或订阅。免费应用仍可包含应用内购买。免费应用之后无法改为付费,只能从付费改为免费。请谨慎选择。

提交后,该应用将以草稿状态出现在 Play Console 中。此时还无法发布任何内容,你需要先在某个轨道上传已签名的 AAB,并填写完整的元数据。

第 6 步:填写必要的元数据(这才是工作量最大的部分)

6

六个表单,一个都不能省

在 Play Console 侧边栏中点击应用内容,逐项完成填写。未填写这些内容就提交是首次上传最常见的错误。

  • 隐私政策。指向一个公开可访问的隐私政策文档的 URL。如果应用收集了任何数据,此项为必填。即使不收集任何数据,也需要一条简短声明。可使用生成工具(app-privacy-policy-generator.firebaseapp.com),并将结果托管在稳定可访问的地址上。
  • 应用访问权限。如果应用的部分功能需要登录,你必须提供测试账号凭据,供审核人员访问。"用户名:[email protected],密码:……"——Google 审核人员会实际使用这些凭据。
  • 广告。是或否。如选是,则需回答额外的广告内容分级问题。
  • 内容分级。一份问卷("应用是否含有暴力内容?""是否涉及赌博?"),生成 IARC 分级。大约需要 5–10 分钟。分级结果会影响应用在哪些国家可见。
  • 目标受众和内容。年龄段划分,若面向 13 岁以下用户则有额外规定。对于大多数面向普通消费者的应用,选择"混合受众"较为稳妥。
  • 数据安全。最繁琐的表单。需要披露应用收集的每类数据(位置、通讯录、照片、文件、设备 ID 等),以及这些数据是否为必需、是否与第三方共享、是否在传输中加密。披露内容必须与实际情况一致——Google 会对比应用的运行时行为与表单内容,不符将是下架原因。首次填写此表单请预留 20–40 分钟。
  • 政府应用 / 新闻应用 / 健康应用等。如果你的应用属于受监管类别,需填写相应的条件声明。

第 7 步:构建商店列表

7

用户点击你的应用后看到的内容

侧边栏主商店列表,必填素材如下:

  • 应用图标——512×512 PNG,32 位,带 Alpha 通道。Google 在各处展示的图标。
  • 特色图片——1024×500 JPG/PNG,显示在商店列表顶部的横幅图。
  • 手机截图——至少 2 张,最多 8 张。PNG 或 JPG,16:9 或 9:16,短边在 320 至 3840 像素之间。可从 AVD 截取:adb exec-out screencap -p > screen.png
  • 简短说明——80 个字符以内,显示在搜索结果摘要中。
  • 完整说明——最多 4000 个字符,即应用的完整产品页文案。
  • 平板电脑截图——可选,但如果你支持平板电脑,建议提供。不提供的话,平板用户看到的是手机截图以不太理想的宽高比呈现的效果。

描述文案是最值得反复打磨的部分——上线后仍可编辑,因此首次发布时"足够好"就行了。图标和特色图片重新上传则相对麻烦。

第 8 步:上传至内部测试轨道

8

最快在真实设备上安装应用的路径

侧边栏测试内部测试创建新版本

  • 应用签名——首次上传时 Play Console 会提示开启 Play 应用签名,接受即可。
  • 上传 AAB——拖入第 4 步生成的 app-release.aab,上传需 1–3 分钟。
  • 版本名称——自动从版本号填充,保持默认即可。
  • 版本说明——描述本次更新内容。首次发布填写"初始版本"即可。

保存 → 审核版本 → 开始向内部测试版推出。版本通常在 5 分钟内处理完毕。

添加测试人员:内部测试测试人员标签页 → 创建电子邮件列表(每行粘贴一个 Gmail 地址,最多 100 人)。保存后,每位测试人员会收到一个 Play 商店加入链接,点击后方可安装应用。

将加入链接发给测试人员。他们点击链接并接受后,访问该应用的 Play 商店页面(或内部测试直链)即可安装。版本推出后约 5–10 分钟,应用便可在他们的设备上安装。

第 9 步:逐步推进至封闭测试 → 开放测试 → 正式发布

9

真正面向公众发布的完整流程

内部测试确认构建无误后:

  • 封闭测试——私人群组,通常基于邮件列表或 Google 群组。上传流程相同,将版本从内部测试提升到封闭测试即可。适合早期体验用户或 Beta 计划。如果你使用的是个人账号,这就是 14 天的必经阶段。
  • 开放测试(可选)——任何有链接的人都可以加入,承诺度低于正式发布,适合在不获得 Play 商店搜索曝光的情况下进行"软发布"。
  • 正式发布——公开上线。支持国家/地区的所有用户均可搜索并安装你的应用。首次正式发布需经过完整审核(3–7 天),后续更新通常在 24 小时内通过。

首次推送到正式发布:正式发布创建新版本从封闭测试版推广。添加版本说明后提交,然后等待。状态变更时会收到邮件通知。

常见的首次提交被拒原因。Google 审核人员的拒绝理由具体且可修复,几乎不会给出模糊的说法:
  • 数据安全内容不符——表单中声明不收集位置信息,但 manifest 中声明了 ACCESS_FINE_LOCATION 权限。修改表单或移除该权限。
  • 目标 API 级别过低——Play 要求应用针对较新的 Android API(新应用目前要求 API 34 / Android 14)。提高 targetSdkVersion 并重新构建。
  • 隐私政策 URL 无法访问——该 URL 必须能正常打开。404 会被视为缺失。
  • "需要登录但未提供测试账号"——在"应用访问权限"中填写可用的测试凭据。
  • 敏感权限缺少使用说明——对于短信、通话记录或"所有文件访问"等权限,你必须说明应用为何需要这些权限,并使用官方的权限声明流程。

首次发布后的更新循环

应用上线并配置好 Play 应用签名之后,后续更新会比第一次快得多:

# Bump versionCode and versionName in app/build.gradle.kts
# Build a new signed AAB
./gradlew :app:bundleRelease

# Upload it via the Play Console UI, OR via the official gradle plugin:
# https://github.com/Triple-T/gradle-play-publisher
./gradlew publishReleaseBundle

gradle-play-publisher 插件通过 service account JSON 密钥进行认证(从 Play Console → 设置 → 开发者账号 → API 访问权限下载),可以让你从 CI 推送版本。完成第一次手动上传后,所有后续发布都可以通过一步 CI 完成。

下一步