android-release
App signing, bundling, and Play Store deployment automation. Use when signing APK/AAB, generating release builds, preparing Play Store upload, or configuring ProGuard.
Best use case
android-release is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
App signing, bundling, and Play Store deployment automation. Use when signing APK/AAB, generating release builds, preparing Play Store upload, or configuring ProGuard.
Teams using android-release should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/android-release/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How android-release Compares
| Feature / Agent | android-release | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
App signing, bundling, and Play Store deployment automation. Use when signing APK/AAB, generating release builds, preparing Play Store upload, or configuring ProGuard.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Android Release Skill
App signing, bundling, and Play Store deployment automation.
## When to Use
- Signing APK/AAB for release
- Generating release builds
- Preparing Play Store upload
- Managing signing keys
- Configuring ProGuard/R8
## Signing Configuration
### keystore.properties (gitignored)
```properties
storeFile=release-key.jks
storePassword=your_store_password
keyAlias=your_key_alias
keyPassword=your_key_password
```
### build.gradle.kts
```kotlin
val keystoreProperties = Properties().apply {
val file = file("keystore.properties")
if (file.exists()) file.inputStream().use { load(it) }
}
android {
signingConfigs {
create("release") {
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
```
## Build Commands
```bash
# Build signed AAB (for Play Store)
./gradlew bundleRelease
# Build signed APK
./gradlew assembleRelease
# Clean and build
./gradlew clean bundleRelease
# Build with specific variant
./gradlew bundleProdRelease
```
## ProGuard/R8 Rules
```proguard
# Keep data classes for serialization
-keepclassmembers class * {
@kotlinx.serialization.Serializable *;
}
# Keep Compose
-keep class androidx.compose.** { *; }
-dontwarn androidx.compose.**
# Keep Koin
-keep class org.koin.** { *; }
# Keep Supabase/Ktor
-keep class io.github.jan.supabase.** { *; }
-keep class io.ktor.** { *; }
# Keep Retrofit models (if used)
-keepclassmembers class * {
@com.google.gson.annotations.SerializedName <fields>;
}
# Remove debug logs
-assumenosideeffects class android.util.Log {
public static int d(...);
public static int v(...);
}
```
## Play Store Deployment
### Using Gradle Play Publisher Plugin
```kotlin
// plugins block
id("com.github.triplet.play") version "3.10.1"
play {
serviceAccountCredentials.set(file("play-service-account.json"))
track.set("internal") // internal, alpha, beta, production
defaultToAppBundles.set(true)
}
```
```bash
# Upload to internal testing
./gradlew publishBundle
# Upload to production
./gradlew publishReleaseBundle --track production
# Promote from internal to production
./gradlew promoteArtifact --from-track internal --to-track production
```
### Manual Upload
1. Build AAB: `./gradlew bundleRelease`
2. Find at: `app/build/outputs/bundle/release/app-release.aab`
3. Upload via Play Console
## Version Management
```kotlin
android {
defaultConfig {
versionCode = 10
versionName = "1.2.0"
}
}
// Or auto-generate from git
val gitVersionCode = "git rev-list --count HEAD".execute().toInt()
val gitVersionName = "git describe --tags --always".execute()
```
## Version Compatibility
| AGP | Gradle | JDK | Target SDK |
|-----|--------|-----|------------|
| 8.8+ | 8.10+ | 17+ | 35 |
| 8.5+ | 8.5+ | 17+ | 34 |
## Error Handling
```bash
# Validate AAB before upload
bundletool validate --bundle=app-release.aab
# Check signing
jarsigner -verify -verbose -certs app-release.apk
# Test release build locally
./gradlew assembleRelease && adb install -r app/build/outputs/apk/release/app-release.apk
```
## Troubleshooting
| Issue | Solution |
|-------|----------|
| Signing failed | Verify keystore path and passwords |
| ProGuard errors | Add keep rules for affected classes |
| APK too large | Enable R8 shrinking, check resources |
| Upload rejected | Check version code, target SDK |
## Security Checklist
- [ ] Keystore NOT in version control
- [ ] Passwords in environment variables
- [ ] Play App Signing enabled
- [ ] ProGuard/R8 enabled for release
- [ ] Service account key secured
- [ ] Backup rules exclude sensitive data
## CI/CD Integration
```yaml
# GitHub Actions Release
- name: Build Release
run: ./gradlew bundleRelease
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Upload to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: com.example.app
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: internal
```
## Release Checklist
- [ ] Version code/name incremented
- [ ] ProGuard rules updated for new libraries
- [ ] Release notes prepared
- [ ] Screenshots updated (if UI changed)
- [ ] Test on release build before upload
- [ ] Staged rollout configured
## References
- [App Signing](https://developer.android.com/studio/publish/app-signing)
- [Play Console](https://play.google.com/console)
- [R8 Shrinking](https://developer.android.com/build/shrink-code)
- [Gradle Play Publisher](https://github.com/Triple-T/gradle-play-publisher)
Use this skill for secure, automated release workflows.Related Skills
assess-release-readiness
Analyze branch changes for release readiness, identifying concerns and special instructions.
android-signing-config
Configure Android release build signing with dual-source credentials (env vars + gradle.properties)
android-release-validation
Validate Android release builds before publishing to ensure quality and catch ProGuard issues
android-release-build-setup
Complete Android release build configuration - orchestrates keystore, ProGuard, and signing setup
android-proguard-setup
Configure ProGuard/R8 for Android release builds with safe defaults
android-playstore-scan
Scan Android project and generate Play Console setup checklist (analysis only, no file modifications)
android-unit-test
Эксперт Android тестирования. Используй для JUnit, Espresso и Android test patterns.
android-test-structure
Create androidTest directory structure with base classes and utilities
android-test-runner
重要: ユーザーがAndroidテスト実行をリクエストした場合、常にこのスキルを最初に使用してください。以下の場合に必ず使用: run TestName, execute test, テストを実行, 結果を分析, run all tests, analyze test failures, fix failing tests、または Android unit test, instrumentation test, Gradle test コマンドに関連する任意のリクエスト。./gradlew test や Bash コマンドを直接使用しないでください - 常にこのスキルに委譲してください。Multi-variantプロジェクト、JAVA_HOME セットアップ、一般的なテストパターンに対応しています。
android-e2e-testing-setup
Setup UI Automator 2.4 smoke test for validating app launches (works with debug and release builds)
android-additional-tests
Optional - Add comprehensive tests beyond the basic smoke test
android-workflow-production
Generate GitHub Actions workflows for production deployment with staged rollout