本文へ移動
cccskills
無料GitHub で公開

android-signing-setup

Set up Android app signing safely — generate an upload keystore, enroll in Play App Signing, and wire a Gradle release signingConfig that reads secrets from a git-ignored keystore.properties / CI (never committed). Use when configuring signing for a Play release.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md3.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Android Signing Setup

Configure Android release signing the safe way, under Play App Signing (Google holds the app signing key; you hold the upload key). Belongs to the sdlc-team-android plugin.

Arguments

  • path-to-android-project — the project directory (defaults to the current directory).

The model (why the two keys matter)

Under Play App Signing, you sign uploads with an upload key; Google re-signs with the app signing key it holds. If you lose the upload key you can request a reset in Play Console and keep shipping — the single-point-of-failure of self-managed signing is gone. Best practice: the upload key is distinct from the app signing key.

Steps

1. Generate an upload keystore

keytool -genkeypair -v -keystore upload-keystore.jks \
  -keyalg RSA -keysize 2048 -validity 9125 -alias upload
  • Validity ≥25 years (Play requires the certificate to extend beyond 22 Oct 2033).
  • Store the .jks outside the repo (or encrypted); record the store/key passwords in a secret manager. Export the upload certificate if you need to register it: keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem.

2. Wire the Gradle signingConfig without committing secrets

  • Create a git-ignored keystore.properties (storePassword, keyPassword, keyAlias, storeFile) and load it in build.gradle.kts:
val kp = Properties().apply { load(FileInputStream(rootProject.file("keystore.properties"))) }
android {
    signingConfigs {
        create("release") {
            storeFile = file(kp["storeFile"] as String)
            storePassword = kp["storePassword"] as String
            keyAlias = kp["keyAlias"] as String
            keyPassword = kp["keyPassword"] as String
        }
    }
    buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") } }
}
  • Add keystore.properties and *.jks/*.keystore to .gitignore. In CI, inject the keystore as a base64 secret decoded at build time and pass passwords via env vars. Never commit either.

3. Enroll in Play App Signing

  • New apps use Play App Signing automatically (they ship an .aab). For an existing app, enroll via Play Console → Release → Setup → App signing (PEPK tool to upload an existing key). Confirm the upload key ≠ app signing key.

4. Verify

  • ./gradlew signingReport shows the SHA-1/SHA-256 fingerprints per variant (needed to register API keys / Maps / Sign-In). Run the pre-flight checker — it flags a release build using the debug signing config and any committed secret in Gradle files.

5. Report

Confirm the release signingConfig reads from the git-ignored properties/CI, the keystore is out of the repo, and signingReport shows the expected fingerprints. Note the Play App Signing enrollment status.

Notes

  • Losing the upload key is recoverable (Console reset); losing a self-managed app signing key is not — which is exactly why Play App Signing exists.
  • For the full release flow (bundle, track, rollout) use android-play-release; for signing failures in CI, see gradle-build-specialist and play-store-release-specialist.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Generate a GitHub Actions workflow for Android — JDK + Gradle caching, build, unit + instrumented tests, Android Lint, run the Android pre-flight checks, and (optionally) sign + upload a signed app bundle to a Play track. Use when setting up CI for an Android app.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

Validated Google Play release — runs the pre-flight checks and clears the Play policy gates, builds a signed app bundle with a git-stamped versionCode, uploads to a track, and walks staged rollout (with halt/roll-forward). Use when releasing an Android app to Play.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

Scaffold a new Android app with SDLC and Play-safe defaults — Kotlin/Compose Gradle project with version catalog, convention plugins, module layout, a targetSdk that meets the Play mandate, R8 on release, and git-ignored signing so it passes the pre-flight checker from day one. Use when starting a new Android project.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

Pick an existing workflow for a task or author a new one — recommends workflow + team formation, or generates a fresh workflow YAML with command prompts and team validation.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

Guide the team through writing a change-impact record for IEC 62304 / FDA / ISO 26262 ASIL C+ projects. Surfaces the affected REQ/DES/TEST/CODE artefacts and captures human-attested verification approach.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

Generate boilerplate `# implements:` annotation for a function based on the artefact ID, inserting it as the first line of the function body.

日本語の概要は準備中です。原文の説明を表示しています。

SteveGJones/ai-first-sdlc-practices412026年10月5日 更新

SteveGJones のスキルをすべて見る

このスキルの問題を報告する