create-keystore
2
总安装量
2
周安装量
#63213
全站排名
安装命令
npx skills add https://github.com/ingpdw/pdw-android-dev-tool --skill create-keystore
Agent 安装分布
mcpjam
2
openhands
2
replit
2
junie
2
windsurf
2
zencoder
2
Skill 文档
Android Keystore Creation Skill
Android ì± ìëª ì ìí Keystore íì¼ì ìì±íê³ ê´ë¦¬íë ì¤í¬ì ëë¤.
Keystore ìì±
기본 ìì± ëª ë ¹ì´
keytool -genkey -v \
-keystore <keystore_name>.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias <alias_name>
ì ë ¥ í목
| í목 | ì¤ëª | ìì |
|---|---|---|
| keystore password | Keystore ë¹ë°ë²í¸ | ìµì 6ì ì´ì |
| key password | ê°ë³ í¤ ë¹ë°ë²í¸ | Keystoreì ëì¼ ê°ë¥ |
| CN (Common Name) | ì´ë¦ | Hong Gildong |
| OU (Organizational Unit) | ë¶ì | Development |
| O (Organization) | ì¡°ì§/íì¬ | MyCompany |
| L (Locality) | ëì | Seoul |
| ST (State) | ì/ë | Seoul |
| C (Country) | êµê° ì½ë (2ì리) | KR |
ë¹ëíì ìì± (ìëíì©)
keytool -genkey -v \
-keystore release-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias my-key-alias \
-dname "CN=Hong Gildong, OU=Development, O=MyCompany, L=Seoul, ST=Seoul, C=KR" \
-storepass <password> \
-keypass <password>
Gradle ì¤ì
ë°©ë² 1: gradle.properties (ê¶ì¥)
# ~/.gradle/gradle.properties ëë íë¡ì í¸ gradle.properties
RELEASE_STORE_FILE=../keystore/release-key.jks
RELEASE_STORE_PASSWORD=your_store_password
RELEASE_KEY_ALIAS=my-key-alias
RELEASE_KEY_PASSWORD=your_key_password
ë°©ë² 2: build.gradle.kts ì¤ì
android {
signingConfigs {
create("release") {
storeFile = file(project.property("RELEASE_STORE_FILE") as String)
storePassword = project.property("RELEASE_STORE_PASSWORD") as String
keyAlias = project.property("RELEASE_KEY_ALIAS") as String
keyPassword = project.property("RELEASE_KEY_PASSWORD") as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
ë°©ë² 3: build.gradle (Groovy)
android {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
Keystore ê´ë¦¬
Keystore ì ë³´ íì¸
keytool -list -v -keystore <keystore_name>.jks
ì¸ì¦ì ì§ë¬¸(Fingerprint) íì¸
# SHA-1 (Google Play ë±ë¡ì©)
keytool -list -v -keystore <keystore_name>.jks | grep SHA1
# SHA-256
keytool -list -v -keystore <keystore_name>.jks | grep SHA256
ë¹ë°ë²í¸ ë³ê²½
# Keystore ë¹ë°ë²í¸ ë³ê²½
keytool -storepasswd -keystore <keystore_name>.jks
# Key ë¹ë°ë²í¸ ë³ê²½
keytool -keypasswd -alias <alias_name> -keystore <keystore_name>.jks
Alias ë³ê²½
keytool -changealias -keystore <keystore_name>.jks \
-alias <old_alias> \
-destalias <new_alias>
Play App Signing ì ë¡ë í¤
Google Play Consoleì Play App Signingì ì¬ì©íë ê²½ì°:
PEM íì¼ë¡ ì¸ì¦ì ë´ë³´ë´ê¸°
keytool -export -rfc \
-keystore upload-key.jks \
-alias upload-key \
-file upload-certificate.pem
ë³´ì ê¶ì¥ì¬í
Keystore ë³´ê´
- Keystore íì¼ì Gitì 커ë°íì§ ì기 (
.gitignoreì ì¶ê°) - ë¹ë°ë²í¸ë¥¼ ì½ëì ì§ì ìì±íì§ ì기
- ìì í ì¥ìì ë°±ì ë³´ê´ (ë¶ì¤ ì ì± ì ë°ì´í¸ ë¶ê°)
- CI/CDììë íê²½ë³ì ëë Secret Manager ì¬ì©
.gitignore ì¶ê°
# Keystore
*.jks
*.keystore
keystore.properties
íê²½ë³ì ì¬ì© (CI/CD)
android {
signingConfigs {
create("release") {
storeFile = file(System.getenv("KEYSTORE_PATH") ?: "../keystore/release.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD") ?: ""
keyAlias = System.getenv("KEY_ALIAS") ?: ""
keyPassword = System.getenv("KEY_PASSWORD") ?: ""
}
}
}
문ì í´ê²°
| ìë¬ | ìì¸ | í´ê²° |
|---|---|---|
| keytool: command not found | JDK 미ì¤ì¹ ëë PATH 미ì¤ì | JDK ì¤ì¹ í PATH ì¤ì |
| keystore password was incorrect | ë¹ë°ë²í¸ ì¤ë¥ | ì¬ë°ë¥¸ ë¹ë°ë²í¸ ì ë ¥ |
| alias does not exist | ì못ë alias | keytool -listë¡ íì¸ |
ì¬ì© ìì
ì¬ì©ìê° ë¤ìê³¼ ê°ì´ ìì²íë©´ ì´ ì¤í¬ì íì©í©ëë¤:
- “keystore ë§ë¤ì´ì¤”
- “ì± ìëª í¤ ìì±í´ì¤”
- “ë¦´ë¦¬ì¦ í¤ ë§ë¤ì´ì¤”
- “í¤ì¤í ì´ ìì±í´ì¤”
- “Play Store ì ë¡ë í¤ ë§ë¤ì´ì¤”