Androidの署名ファイル(keystore)について個人的まとめ。
keystoreとは
今回作成するkeystoreファイルはアップロード鍵と呼ばれるもの。
アップロード鍵: Google Play アプリ署名用にアップロードする前に、App Bundle または APK への署名に使用する鍵。アップロード鍵は非公開にする必要があります。
非公開にしなければならないため、Androidプロジェクトディレクトリ配下に置いてあると、うっかりGitHubにプッシュしてしまったりと危険な香りがします。
そのためローカル(/Users/user/.gradle
)に格納し、アプリのビルド時もそこから参照するように設定します。
環境
- Windows 10 Pro
手順
/Users/user/.gradle/gradle.propertiesにパスを記述する
あらかじめKeys.repo
という名前でパスを定義しておきます(名前は任意)。
gradle.properties
が無い場合は作成してください。
Keys.repo='/Users/user/.signing'
.gradle/.signingフォルダを作る
パスワード等を記述したprojectname.properties
を格納するため、.signing
というディレクトリを作成します(projectname
部分は任意)。
さらに、直下にkeystore
を格納するためのディレクトリを作成します。
$ mkdir .gradle/.signing
$ New-Item -Type File projectname.properties # touchと同じ
$ mkdir .gradle/.signing/YourProjectName # keystoreを格納。名前は任意
keystoreファイルを生成する
Android Studioを起動し、Build -> Generate Signed Bundle / APKをクリックします。
選択はAPKでもBundleでも、どちらでも構わないようです。
今回はAPKを選択し、Nextをクリックします。
次に、**Create new...**をクリックしてkeystoreの作成先を指定します。
keystoreは作成したら.signing
に移動させるので、プロジェクトルート直下等適当な場所で構いません。
ファイル名はrelease.keystore
としておきます。
パスワードを設定し、Certificateの少なくともひとつのボックスに入力したらOKをクリックします。
そうしたらNextをクリックし、次の画面でFinishをクリックすれば、指定したディレクトリにrelease.keystore
が作成されます。
keystoreを.signing/YourProjectNameに移動する
release.keystore
を.signing/YourProjectName
ディレクトリに移動します。
$ mv ProjectRoot/release.keystore /Users/user/.gradle/.signing/YourProjectName
パスワードをprojectname.propertiesに記述する
release.keystore
を作成するときに設定したパスワード等を.signing/projectname.properties
に記述します。
RELEASE_STORE_FILE=/YourProjectName/release.keystore
RELEASE_STORE_PASS=xxxxx
RELEASE_ALIAS=xxxxx
RELEASE_KEY_PASS=xxxxx
build.gradleに署名付きビルドのためのコードを記述する
appレベルbuild.gradle
のandroidブロックにsigningConfig
を記述します。
android {
signingConfigs {
debug {}
release {
if (project.hasProperty("Keys.repo")) {
def projectPropsFile = file(project.property("Keys.repo") + "/projectname.properties")
if (projectPropsFile.exists()) {
Properties props = new Properties()
props.load(new FileInputStream(projectPropsFile))
storeFile file(file(project.property("Keys.repo") + props['RELEASE_STORE_FILE']))
storePassword props['RELEASE_STORE_PASS']
keyAlias props['RELEASE_ALIAS']
keyPassword props['RELEASE_KEY_PASS']
}
} else {
println "======================================================="
println "[ERROR] - Please configure release-compilation environment - e.g. in ~/.signing directory"
println "======================================================="
}
}
}
}
以上です。
参考
ほぼ翻訳先。
gradle set absolute path value for a keystore file
他にも書き方いろいろ。
Android Studio(Gradle)でapkファイルを作成する時にstorePassword/keyAlias/keyPasswordの指定方法をいくつか検証してみた。