Androidアプリのアップロード鍵.keystoreの作成と管理について
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
が無い場合は作成してください。
// /Users/user/.gradle/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ファイルを生成する
Android Studioを起動し、Build -> Generate Signed Bundle / APKをクリックします。
選択はAPKでもBundleでも、どちらでも構わないようです。 今回はAPKを選択し、Nextをクリックします。
次に、Create new...をクリックしてkeystoreの作成先を指定します。
keystoreは作成したら.signing
に移動させるので、プロジェクトルート直下等適当な場所で構いません。
ファイル名はrelease.keystore
としておきます。
パスワードを設定し、Certificationの少なくともひとつのボックスに入力したら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
を記述します。
// appレベルbuild.gradle 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 "=======================================================" } } } }
ビルドバリアントをreleaseにしてビルド
ビルドバリアントをrelease
にし、署名付きAPKをビルドできれば完了です。
参考
ほぼ翻訳先。