xiaohongshu
xiaohongshu
Google Play Store publishing and management expertise
Full skill instructions
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.
bash - Execute bundletool, Gradle, and Google Cloud commandsread - Analyze store listing files and configurationswrite - Generate metadata files and API configurationsedit - Update Play Store metadataglob - Search for metadata and graphics filesgrep - Search for patterns in configurationsAPI Authentication
App Management
AAB Upload
Build Information
Release Tracks
Staged Rollouts
App Details
Graphics Assets
Localization
Internal App Sharing
Pre-launch Reports
This skill integrates with the following processes:
android-playstore-publishing.js - Play Store publishingbeta-testing-setup.js - Beta distributionapp-store-optimization.js - ASO optimizationautomated-release-management.js - Release automation# 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
{
"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"
}
# 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
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
// 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.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
# 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
// 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}"
}
}
fastlane-cicd - Build automationkotlin-compose - Android developmentfirebase-mobile - Firebase integrationxiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
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...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
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...
Display project status, active tracks, and next actions
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.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience