LoginSignup
7
8

More than 3 years have passed since last update.

Androidアプリのアップロード鍵.keystoreの作成と管理について

Posted at

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を格納。名前は任意

keystoreファイルを生成する

Android Studioを起動し、Build -> Generate Signed Bundle / APKをクリックします。

generate_nav.png

選択はAPKでもBundleでも、どちらでも構わないようです。
今回はAPKを選択し、Nextをクリックします。

次に、Create new...をクリックしてkeystoreの作成先を指定します。

generate_nav2.png

keystoreは作成したら.signingに移動させるので、プロジェクトルート直下等適当な場所で構いません。
ファイル名はrelease.keystoreとしておきます。

generate_nav3.png

パスワードを設定し、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に記述します。

.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 "======================================================="
      }
    }
  }
}

以上です。

参考

ほぼ翻訳先。

gradle set absolute path value for a keystore file

他にも書き方いろいろ。

Android Studio(Gradle)でapkファイルを作成する時にstorePassword/keyAlias/keyPasswordの指定方法をいくつか検証してみた。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8