Skip to content
Google Play Console logo

Google Play Console

Google Play Store publishing and management expertise

SKILL.md

Full skill instructions

Google Play Console Skill

Overview

This skill provides comprehensive capabilities for Google Play Store publishing and management. It enables interaction with Google Play Developer API, store listing management, release track configuration, and app lifecycle management.

Allowed Tools

  • bash - Execute bundletool, Gradle, and Google Cloud commands
  • read - Analyze store listing files and configurations
  • write - Generate metadata files and API configurations
  • edit - Update Play Store metadata
  • glob - Search for metadata and graphics files
  • grep - Search for patterns in configurations

Capabilities

Google Play Developer API

  1. API Authentication

    • Configure service account credentials
    • Implement OAuth 2.0 authentication
    • Handle API quotas and limits
    • Configure project permissions
  2. App Management

    • Create and manage app listings
    • Configure app content rating
    • Manage target audience settings
    • Handle app categories

Build Management

  1. AAB Upload

    • Upload Android App Bundles
    • Validate AAB files with bundletool
    • Configure build versioning
    • Handle upload errors
  2. Build Information

    • Track upload status
    • Configure native code debugging
    • Manage deobfuscation files
    • Handle expansion files (OBB)

Release Management

  1. Release Tracks

    • Configure internal testing track
    • Set up closed testing (alpha)
    • Manage open testing (beta)
    • Handle production releases
  2. Staged Rollouts

    • Configure percentage rollouts
    • Monitor rollout metrics
    • Handle rollout pause/​resume
    • Implement rollback strategies

Store Listing

  1. App Details

    • Configure app title and descriptions
    • Set up short and full descriptions
    • Manage app categories
    • Configure content rating
  2. Graphics Assets

    • Upload screenshots
    • Configure feature graphics
    • Manage promo videos
    • Handle icon requirements
  3. Localization

    • Configure supported languages
    • Manage translated listings
    • Handle default language
    • Import/​export translations

Data Safety

  1. Data Safety Declaration
    • Configure data collection disclosure
    • Declare data sharing practices
    • Set up security practices
    • Handle data deletion requests

In-App Products

  1. Products Configuration
    • Create managed products
    • Configure subscriptions
    • Set up subscription base plans
    • Handle promotional offers

Testing

  1. Internal App Sharing

    • Configure internal sharing
    • Generate shareable links
    • Manage test versions
    • Handle tester feedback
  2. Pre-launch Reports

    • Review automated tests
    • Analyze crash reports
    • Check accessibility issues
    • Review security findings

Target Processes

This skill integrates with the following processes:

  • android-playstore-publishing.js - Play Store publishing
  • beta-testing-setup.js - Beta distribution
  • app-store-optimization.js - ASO optimization
  • automated-release-management.js - Release automation

Dependencies

Required

  • Google Play Developer account
  • Service account with API access
  • Android SDK (for bundletool)
  • Signed AAB file

Optional

  • Fastlane
  • Google Cloud CLI
  • bundletool

Configuration

Service Account Setup

# Create service account in Google Cloud Console
# 1. Go to Google Cloud Console
# 2. Create new service account
# 3. Grant "Service Account User" role
# 4. Create JSON key file

# Link to Play Console
# 1. Go to Play Console > Settings > API access
# 2. Link Google Cloud project
# 3. Grant permissions to service account

Credentials File

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "[email protected]",
  "client_id": "123456789",
  "auth_uri": "https://accounts.google.com/​o/​oauth2/​auth",
  "token_uri": "https://oauth2.googleapis.com/​token"
}

Usage Examples

Fastlane Supply Configuration

# 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",

    # Rollout percentage (0.0 to 1.0)
    rollout: "0.1",

    # Skip metadata upload
    skip_upload_metadata: false,
    skip_upload_images: false,
    skip_upload_screenshots: false,
    skip_upload_changelogs: false,

    # Release notes
    release_status: "completed",

    # Version code
    version_code: 42,

    # Mapping file for crash reports
    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

Metadata Directory Structure

fastlane/​metadata/​android/
├── en-US/
│   ├── title.txt                    # Max 30 chars
│   ├── short_description.txt        # Max 80 chars
│   ├── full_description.txt         # Max 4000 chars
│   ├── changelogs/
│   │   ├── default.txt
│   │   ├── 42.txt                   # Version code specific
│   │   └── 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/
│   └── ... (same structure)
└── default.txt                      # Default language code

Google Play Developer API Usage

// Example: Publishing via Google Play Developer 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()

        // Create edit
        val edit = edits.insert(packageName, null).execute()
        val editId = edit.id

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

            val versionCode = uploadResponse.versionCode

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

            // Update track
            val trackConfig = Track().apply {
                this.track = track
                this.releases = listOf(release)
            }

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

            // Commit edit
            edits.commit(packageName, editId).execute()
            println("Successfully published version $versionCode to $track")

        } catch (e: Exception) {
            // Delete edit on failure
            edits.delete(packageName, editId).execute()
            throw e
        }
    }
}

Data Safety Configuration

# data_safety.yaml
data_collection:
  - category: "Personal info"
    types:
      - "Name"
      - "Email address"
    purposes:
      - "App functionality"
      - "Account management"
    is_optional: false

  - category: "Financial info"
    types:
      - "Purchase history"
    purposes:
      - "App functionality"
    is_optional: false

data_sharing:
  - category: "Analytics"
    shared_with: "Third parties"
    purpose: "Analytics"

security_practices:
  data_encrypted_in_transit: true
  data_deletion_available: true
  independent_security_review: false

Bundletool Commands

# Validate AAB
bundletool validate --bundle=app-release.aab

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

# Install APKs on device
bundletool install-apks --apks=app.apks

# Get device spec
bundletool get-device-spec --output=device-spec.json

# Build APKs for specific device
bundletool build-apks \
  --bundle=app-release.aab \
  --output=device.apks \
  --device-spec=device-spec.json

Version Code Management

// build.gradle.kts
android {
    defaultConfig {
        // Auto-increment version code based on CI build number
        val buildNumber = System.getenv("BUILD_NUMBER")?.toIntOrNull() ?: 1
        versionCode = buildNumber
        versionName = "1.0.${buildNumber}"
    }
}

Quality Gates

Store Listing Requirements

  • Title: max 30 characters
  • Short description: max 80 characters
  • Full description: max 4000 characters
  • Feature graphic: 1024x500 PNG or JPEG
  • Screenshots: 2-8 per device type
  • Icon: 512x512 32-bit PNG

Release Requirements

  • Signed AAB file
  • Target API level compliance
  • 64-bit support
  • Permissions declared
  • Data safety form complete

Compliance

  • Content rating questionnaire
  • Target audience declaration
  • Ads declaration
  • Data safety section

Related Skills

  • fastlane-cicd - Build automation
  • kotlin-compose - Android development
  • firebase-mobile - Firebase integration

Version History

  • 1.0.0 - Initial release with Play Developer API v3 support

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View