create-keystore

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Android Keystore Creation Skill

Android Keystore Creation Skill

Android 앱 서명을 위한 Keystore 파일을 생성하고 관리하는 스킬입니다.
这是一款用于生成和管理Android应用签名所需Keystore文件的Skill。

Keystore 생성

Keystore生成

기본 생성 명령어

基础生成命令

bash
keytool -genkey -v \
  -keystore <keystore_name>.jks \
  -keyalg RSA \
  -keysize 2048 \
  -validity 10000 \
  -alias <alias_name>
bash
keytool -genkey -v \
  -keystore <keystore_name>.jks \
  -keyalg RSA \
  -keysize 2048 \
  -validity 10000 \
  -alias <alias_name>

입력 항목

输入项目

항목설명예시
keystore passwordKeystore 비밀번호최소 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
项目说明示例
keystore passwordKeystore密码至少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

비대화식 생성 (자동화용)

非交互式生成(自动化用)

bash
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>
bash
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 설정

Gradle配置

방법 1: gradle.properties (권장)

方法1: gradle.properties(推荐)

properties
undefined
properties
undefined

~/.gradle/gradle.properties 또는 프로젝트 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
undefined
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
undefined

방법 2: build.gradle.kts 설정

方法2: build.gradle.kts配置

kotlin
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"
            )
        }
    }
}
kotlin
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)

方法3: build.gradle (Groovy)

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'
        }
    }
}
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管理

Keystore 정보 확인

查看Keystore信息

bash
keytool -list -v -keystore <keystore_name>.jks
bash
keytool -list -v -keystore <keystore_name>.jks

인증서 지문(Fingerprint) 확인

查看证书指纹(Fingerprint)

bash
undefined
bash
undefined

SHA-1 (Google Play 등록용)

SHA-1(Google Play注册用)

keytool -list -v -keystore <keystore_name>.jks | grep SHA1
keytool -list -v -keystore <keystore_name>.jks | grep SHA1

SHA-256

SHA-256

keytool -list -v -keystore <keystore_name>.jks | grep SHA256
undefined
keytool -list -v -keystore <keystore_name>.jks | grep SHA256
undefined

비밀번호 변경

修改密码

bash
undefined
bash
undefined

Keystore 비밀번호 변경

修改Keystore密码

keytool -storepasswd -keystore <keystore_name>.jks
keytool -storepasswd -keystore <keystore_name>.jks

Key 비밀번호 변경

修改Key密码

keytool -keypasswd -alias <alias_name> -keystore <keystore_name>.jks
undefined
keytool -keypasswd -alias <alias_name> -keystore <keystore_name>.jks
undefined

Alias 변경

修改Alias

bash
keytool -changealias -keystore <keystore_name>.jks \
  -alias <old_alias> \
  -destalias <new_alias>
bash
keytool -changealias -keystore <keystore_name>.jks \
  -alias <old_alias> \
  -destalias <new_alias>

Play App Signing 업로드 키

Play App Signing上传密钥

Google Play Console의 Play App Signing을 사용하는 경우:
使用Google Play Console的Play App Signing时:

PEM 파일로 인증서 내보내기

将证书导出为PEM文件

bash
keytool -export -rfc \
  -keystore upload-key.jks \
  -alias upload-key \
  -file upload-certificate.pem
bash
keytool -export -rfc \
  -keystore upload-key.jks \
  -alias upload-key \
  -file upload-certificate.pem

보안 권장사항

安全建议

Keystore 보관

Keystore保管

  • Keystore 파일을 Git에 커밋하지 않기 (
    .gitignore
    에 추가)
  • 비밀번호를 코드에 직접 작성하지 않기
  • 안전한 장소에 백업 보관 (분실 시 앱 업데이트 불가)
  • CI/CD에서는 환경변수 또는 Secret Manager 사용
  • 不要将Keystore文件提交到Git(添加到
    .gitignore
  • 不要在代码中直接写入密码
  • 存放在安全位置并备份(丢失后无法更新应用)
  • CI/CD中使用环境变量或Secret Manager

.gitignore 추가

添加到.gitignore

gitignore
undefined
gitignore
undefined

Keystore

Keystore

*.jks *.keystore keystore.properties
undefined
*.jks *.keystore keystore.properties
undefined

환경변수 사용 (CI/CD)

使用环境变量(CI/CD)

kotlin
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") ?: ""
        }
    }
}
kotlin
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 foundJDK 미설치 또는 PATH 미설정JDK 설치 후 PATH 설정
keystore password was incorrect비밀번호 오류올바른 비밀번호 입력
alias does not exist잘못된 alias
keytool -list
로 확인
错误原因解决方法
keytool: command not found未安装JDK或未配置PATH安装JDK并配置PATH
keystore password was incorrect密码错误输入正确的密码
alias does not existAlias错误使用
keytool -list
查看

사용 예시

使用示例

사용자가 다음과 같이 요청하면 이 스킬을 활용합니다:
  • "keystore 만들어줘"
  • "앱 서명 키 생성해줘"
  • "릴리즈 키 만들어줘"
  • "키스토어 생성해줘"
  • "Play Store 업로드 키 만들어줘"
用户提出以下请求时可使用本Skill:
  • "帮我创建Keystore"
  • "帮我生成应用签名密钥"
  • "帮我创建发布密钥"
  • "帮我生成密钥库"
  • "帮我创建Play Store上传密钥"