Installs into .claude/skills of the current project.
Are you the author of Code Signing Android?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/khadinakbarlabs-code-signing-android)
---
name: "code-signing-android"
description: "Manage Android signing keys: upload key (you), signing key (Play), keystore generation, EAS credentials, SHA hash extraction. Use when the user says 'android signing', 'keystore', 'signing key android'."
---
# Code Signing (Android)
Keystore management.
## Credential and external action gate
An Android keystore and its password are private signing credentials. Do not generate, import, download, replace, or expose a keystore; run `eas credentials`; or alter Play App Signing without explicit owner confirmation of the exact developer account, app, and recovery plan. Keep keystores and passwords out of the repository, prompts, screenshots, and logs.
## Two keys with Play App Signing
| Key | Holder | Use |
|---|---|---|
| Upload key | You (EAS) | Sign AAB before upload |
| Signing key | Google | Sign APKs delivered to users |
Lose upload key → Google reissues (Play App Signing benefit).
Lose signing key → not possible (Google has it).
## EAS-managed keystore after confirmation
```bash
eas credentials
# → Android → set up new keystore
```
EAS generates keystore (.jks), stores on their servers. Download anytime.
## DIY keystore (if migrating, after confirmation)
```bash
keytool -genkey -v -keystore upload-key.jks \
-keyalg RSA -keysize 2048 -validity 25000 \
-alias upload-key
```
Upload to EAS only after the owner has approved the account and credential-storage plan:
```bash
eas credentials
# → Android → use existing keystore
```
## Extract SHA-1/SHA-256 (for Firebase)
```bash
# From keystore (upload key)
keytool -list -v -keystore upload-key.jks -alias upload-key
# From Play Console (signing key)
# Play Console → Setup → App integrity → copy SHA values
```
## Add to Firebase
Firebase Console → Project Settings → Your apps → Android app → Add fingerprint:
- Both upload key SHA-1 + signing key SHA-1
- Both upload key SHA-256 + signing key SHA-256
This makes Google Sign-In and Dynamic Links work in dev + production.
## Common gotchas
- "DEVELOPER_ERROR" on Google Sign-In → SHA-1 not in Firebase
- Different SHA in dev (your keystore) vs production (Play's) → add BOTH
- Keystore password lost → can't recover unless using Play App Signing reissue
- ".jks vs .keystore" → same format, just naming
## Pair with
- `set-up-play-app-signing`
- `add-google-signin-credential-manager`