GooglePlay控制台技能Skill GooglePlayConsole

Google Play控制台技能是专门用于Android应用在Google Play商店进行发布、管理和优化的专业技能。它涵盖了应用包(AAB)上传、发布轨道配置、商店列表管理、数据安全声明、应用内产品配置、测试分发以及自动化发布流程。通过集成Google Play开发者API、Fastlane等工具,实现高效的CI/CD流程,确保应用合规上架与持续更新。关键词:Google Play商店发布、Android应用分发、AAB上传、应用商店优化、自动化发布、数据安全合规、Fastlane配置、Play开发者API、分阶段发布、应用生命周期管理。

移动开发 0 次安装 0 次浏览 更新于 2/25/2026

name: Google Play Console description: Google Play商店发布与管理专业知识 version: 1.0.0 category: Android分发 slug: google-play-console status: active

Google Play Console技能

概述

本技能提供Google Play商店发布与管理的全面能力。它支持与Google Play开发者API交互、商店列表管理、发布轨道配置以及应用生命周期管理。

允许的工具

  • bash - 执行bundletool、Gradle和Google Cloud命令
  • read - 分析商店列表文件和配置
  • write - 生成元数据文件和API配置
  • edit - 更新Play商店元数据
  • glob - 搜索元数据和图形文件
  • grep - 在配置中搜索模式

能力

Google Play开发者API

  1. API认证

    • 配置服务账户凭据
    • 实现OAuth 2.0认证
    • 处理API配额和限制
    • 配置项目权限
  2. 应用管理

    • 创建和管理应用列表
    • 配置应用内容评级
    • 管理目标受众设置
    • 处理应用分类

构建管理

  1. AAB上传

    • 上传Android应用包(AAB)
    • 使用bundletool验证AAB文件
    • 配置构建版本管理
    • 处理上传错误
  2. 构建信息

    • 跟踪上传状态
    • 配置原生代码调试
    • 管理反混淆文件
    • 处理扩展文件(OBB)

发布管理

  1. 发布轨道

    • 配置内部测试轨道
    • 设置封闭测试(Alpha)
    • 管理公开测试(Beta)
    • 处理生产发布
  2. 分阶段发布

    • 配置百分比发布
    • 监控发布指标
    • 处理发布暂停/恢复
    • 实施回滚策略

商店列表

  1. 应用详情

    • 配置应用标题和描述
    • 设置简短和完整描述
    • 管理应用分类
    • 配置内容评级
  2. 图形资源

    • 上传屏幕截图
    • 配置特色图形
    • 管理宣传视频
    • 处理图标要求
  3. 本地化

    • 配置支持的语言
    • 管理翻译列表
    • 处理默认语言
    • 导入/导出翻译

数据安全

  1. 数据安全声明
    • 配置数据收集披露
    • 声明数据共享实践
    • 设置安全实践
    • 处理数据删除请求

应用内产品

  1. 产品配置
    • 创建托管产品
    • 配置订阅
    • 设置订阅基础计划
    • 处理促销优惠

测试

  1. 内部应用分享

    • 配置内部分享
    • 生成可分享链接
    • 管理测试版本
    • 处理测试者反馈
  2. 预发布报告

    • 审查自动化测试
    • 分析崩溃报告
    • 检查无障碍问题
    • 审查安全发现

目标流程

本技能与以下流程集成:

  • android-playstore-publishing.js - Play商店发布
  • beta-testing-setup.js - Beta分发
  • app-store-optimization.js - ASO优化
  • automated-release-management.js - 发布自动化

依赖项

必需

  • Google Play开发者账户
  • 具有API访问权限的服务账户
  • Android SDK(用于bundletool)
  • 已签名的AAB文件

可选

  • Fastlane
  • Google Cloud CLI
  • bundletool

配置

服务账户设置

# 在Google Cloud控制台创建服务账户
# 1. 前往Google Cloud控制台
# 2. 创建新服务账户
# 3. 授予“服务账户用户”角色
# 4. 创建JSON密钥文件

# 链接到Play控制台
# 1. 前往Play控制台 > 设置 > API访问
# 2. 链接Google Cloud项目
# 3. 向服务账户授予权限

凭据文件

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
",
  "client_email": "service-account@project.iam.gserviceaccount.com",
  "client_id": "123456789",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token"
}

使用示例

Fastlane Supply配置

# fastlane/Fastfile
lane :deploy_production do
  gradle(
    task: "bundle",
    build_type: "Release"
  )

  supply(
    track: "production",
    aab: "./app/build/outputs/bundle/release/app-release.aab",
    json_key: "./fastlane/play-store-key.json",
    package_name: "com.example.myapp",

    # 发布百分比(0.0到1.0)
    rollout: "0.1",

    # 跳过元数据上传
    skip_upload_metadata: false,
    skip_upload_images: false,
    skip_upload_screenshots: false,
    skip_upload_changelogs: false,

    # 发布说明
    release_status: "completed",

    # 版本代码
    version_code: 42,

    # 崩溃报告的映射文件
    mapping: "./app/build/outputs/mapping/release/mapping.txt"
  )
end

lane :deploy_beta do
  gradle(task: "bundle", build_type: "Release")

  supply(
    track: "beta",
    aab: "./app/build/outputs/bundle/release/app-release.aab",
    json_key: "./fastlane/play-store-key.json"
  )
end

lane :promote_to_production do
  supply(
    track: "beta",
    track_promote_to: "production",
    json_key: "./fastlane/play-store-key.json",
    rollout: "0.2"
  )
end

元数据目录结构

fastlane/metadata/android/
├── en-US/
│   ├── title.txt                    # 最多30个字符
│   ├── short_description.txt        # 最多80个字符
│   ├── full_description.txt         # 最多4000个字符
│   ├── changelogs/
│   │   ├── default.txt
│   │   ├── 42.txt                   # 特定版本代码
│   │   └── 43.txt
│   └── images/
│       ├── phoneScreenshots/
│       │   ├── 1_home.png
│       │   ├── 2_feature.png
│       │   └── 3_settings.png
│       ├── sevenInchScreenshots/
│       ├── tenInchScreenshots/
│       ├── tvScreenshots/
│       ├── wearScreenshots/
│       ├── featureGraphic.png       # 1024x500
│       ├── icon.png                 # 512x512
│       ├── promoGraphic.png         # 180x120
│       └── tvBanner.png             # 1280x720
├── es-ES/
│   └── ... (相同结构)
└── default.txt                      # 默认语言代码

Google Play开发者API使用

// 示例:通过Google Play开发者API发布
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.json.gson.GsonFactory
import com.google.api.services.androidpublisher.AndroidPublisher
import com.google.api.services.androidpublisher.model.*
import com.google.auth.http.HttpCredentialsAdapter
import com.google.auth.oauth2.GoogleCredentials
import java.io.FileInputStream

class PlayStorePublisher(
    private val packageName: String,
    credentialsPath: String
) {
    private val publisher: AndroidPublisher

    init {
        val credentials = GoogleCredentials
            .fromStream(FileInputStream(credentialsPath))
            .createScoped(listOf("https://www.googleapis.com/auth/androidpublisher"))

        publisher = AndroidPublisher.Builder(
            GoogleNetHttpTransport.newTrustedTransport(),
            GsonFactory.getDefaultInstance(),
            HttpCredentialsAdapter(credentials)
        )
            .setApplicationName("MyApp Publisher")
            .build()
    }

    fun uploadAndPublish(aabPath: String, track: String, releaseNotes: Map<String, String>) {
        val edits = publisher.edits()

        // 创建编辑
        val edit = edits.insert(packageName, null).execute()
        val editId = edit.id

        try {
            // 上传AAB
            val aabFile = java.io.File(aabPath)
            val uploadResponse = edits.bundles()
                .upload(packageName, editId, FileContent("application/octet-stream", aabFile))
                .execute()

            val versionCode = uploadResponse.versionCode

            // 创建发布
            val release = TrackRelease().apply {
                this.versionCodes = listOf(versionCode.toLong())
                this.status = "completed"
                this.releaseNotes = releaseNotes.map { (lang, notes) ->
                    LocalizedText().apply {
                        language = lang
                        text = notes
                    }
                }
            }

            // 更新轨道
            val trackConfig = Track().apply {
                this.track = track
                this.releases = listOf(release)
            }

            edits.tracks()
                .update(packageName, editId, track, trackConfig)
                .execute()

            // 提交编辑
            edits.commit(packageName, editId).execute()
            println("成功将版本 $versionCode 发布到 $track")

        } catch (e: Exception) {
            // 失败时删除编辑
            edits.delete(packageName, editId).execute()
            throw e
        }
    }
}

数据安全配置

# data_safety.yaml
data_collection:
  - category: "个人信息"
    types:
      - "姓名"
      - "电子邮件地址"
    purposes:
      - "应用功能"
      - "账户管理"
    is_optional: false

  - category: "财务信息"
    types:
      - "购买历史"
    purposes:
      - "应用功能"
    is_optional: false

data_sharing:
  - category: "分析"
    shared_with: "第三方"
    purpose: "分析"

security_practices:
  data_encrypted_in_transit: true
  data_deletion_available: true
  independent_security_review: false

Bundletool命令

# 验证AAB
bundletool validate --bundle=app-release.aab

# 从AAB构建APKs
bundletool build-apks \
  --bundle=app-release.aab \
  --output=app.apks \
  --ks=release.keystore \
  --ks-key-alias=release \
  --ks-pass=pass:password

# 在设备上安装APKs
bundletool install-apks --apks=app.apks

# 获取设备规格
bundletool get-device-spec --output=device-spec.json

# 为特定设备构建APKs
bundletool build-apks \
  --bundle=app-release.aab \
  --output=device.apks \
  --device-spec=device-spec.json

版本代码管理

// build.gradle.kts
android {
    defaultConfig {
        // 基于CI构建号自动递增版本代码
        val buildNumber = System.getenv("BUILD_NUMBER")?.toIntOrNull() ?: 1
        versionCode = buildNumber
        versionName = "1.0.${buildNumber}"
    }
}

质量门

商店列表要求

  • 标题:最多30个字符
  • 简短描述:最多80个字符
  • 完整描述:最多4000个字符
  • 特色图形:1024x500 PNG或JPEG
  • 屏幕截图:每种设备类型2-8张
  • 图标:512x512 32位PNG

发布要求

  • 已签名的AAB文件
  • 目标API级别合规
  • 64位支持
  • 已声明权限
  • 数据安全表单完成

合规性

  • 内容评级问卷
  • 目标受众声明
  • 广告声明
  • 数据安全部分

相关技能

  • fastlane-cicd - 构建自动化
  • kotlin-compose - Android开发
  • firebase-mobile - Firebase集成

版本历史

  • 1.0.0 - 初始版本,支持Play开发者API v3