소스 정보
- 저장소
- MikeTreml/MissionControl
- 최근 소스 활동
- 2026년 4월 29일 22:06
- 감지된 SKILL.md 언어
- 영어
- 스타
- 1
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/MikeTreml/MissionControl --skill google-play-console명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | Google Play Console |
| description | Google Play Store publishing and management expertise |
| version | 1.0.0 |
| category | Android Distribution |
| slug | google-play-console |
| status | active |
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": "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/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:
)
lane
supply(
,
,
,
)
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()
versionCode = uploadResponse.versionCode
release = TrackRelease().apply {
.versionCodes = listOf(versionCode.toLong())
.status =
.releaseNotes = releaseNotes.map { (lang, notes) ->
LocalizedText().apply {
language = lang
text = notes
}
}
}
trackConfig = Track().apply {
.track = track
.releases = listOf(release)
}
edits.tracks()
.update(packageName, editId, track, trackConfig)
.execute()
edits.commit(packageName, editId).execute()
println()
} (e: Exception) {
edits.delete(packageName, editId).execute()
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 integration