【.kts】Google Play Consoleのために署名を作成する方法【開発備忘録】

Flutter GCP 開発備忘録

以前、同様のタイトルの記事を投稿しました。
しかし、「build.gardle」ファイルは現在、「build.gardle.kts」と拡張子が「.kts」のものが主流となっています。

それにつまずいたので、.kts版の署名作成方法を備忘録として記します。

※build.gardle時代のやり方は、以前の記事を参照してください。

1. 証明書を作成する

こちらは以前と同じ操作です。ですが、いちいち前の記事を参照するのも面倒なので再掲しておきます。

ターミナルにて以下のコマンドを実行します。

$ keytool -genkey -v -keystore release.jks -alias key -keyalg RSA -keysize 2048 -validity 10000

これを実行すると、パスワード・姓名・組織などなど、、、色々と質問をされます。これらに正しく回答していきます。
※証明書から誰もが見れる情報なので、姓名は〇〇.comみたいにしても良いかもしれません。
※追記:姓名や組織などを全世界に晒したくない場合は、半角ドットひとつだけ(「.」)を入力すると、空白にできます。今回初めて気づきました!

回答が全て終えて確認も終わったら、あとはエンター連打でOKです。

この作業が終了すると、カレントディレクトリ直下にrelease.jksというファイルが生成されます。
このファイルを、android/app/ディレクトリに移動しておきます。

2. androidの設定ファイルを編集する

key.propertiesファイルを作成

こちらの操作も以前から変更点はありませんが、再掲します。

androidディレクトリ直下にkey.propertiesという名前のファイルを作成します。
ファイルの中身は以下の通りです。

storePassword={自分で設定したパスワード}
keyPassword={自分で設定したパスワード}
keyAlias=key
storeFile=release.jks

※storeFileは基本的にandroid/appを起点にした相対パスとなります。万が一、それでエラーが出る場合は絶対パスで記述してください。
※追記:GitHubなどを利用している場合は、このファイルを.gitignoreに追加してアップロードされないようにしてください。誤ってアップロードして誰かに閲覧されたら、セキュリティ上問題になります。

app/build.gradle.kts

ここからが.ktsになったことで変わったところです。

ファイル内に以下のコードを追記してください。

/* 前略 */
import java.util.Properties

val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(keystorePropertiesFile.inputStream())
}

android {
    /* 中略 */
    signingConfigs {
        create("release") {
            keyAlias = keystoreProperties.getProperty("keyAlias")
            keyPassword = keystoreProperties.getProperty("keyPassword")
            val storeFileProperty = keystoreProperties.getProperty("storeFile")
            storeFile = if (storeFileProperty != null) file(storeFileProperty) else null
            storePassword = keystoreProperties.getProperty("storePassword")
        }
    }

    buildTypes {
        getByName("release") {
            signingConfig = signingConfigs.getByName("release")
            
            isMinifyEnabled = true
            
            isShrinkResources = true
            
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

/* 後略 */

これで問題なくビルドできれば設定完了です!

ビルドしてエラーが出る場合

ビルドを試みると以下ようなエラーが出る場合があります。

  Line 〇〇:         jvmTarget = JavaVersion.VERSION_17.toString()
                   ^ 'jvmTarget: String' is deprecated. Please migrate to the compilerOptions DSL. More details are here: https://kotl.in/u1r8ln

もし、このエラーが出た場合は、build.gradle.ktsファイルの当該行(エラー分に表示されている行数)を

jvmTarget = JavaVersion.VERSION_17.toString()

から

jvmTarget = "17"

に置き換えてください。

これで再度ビルドすると、問題なく動くはずです。