御幸備忘録

主にUnityに関してのブログです。

AndroidのKeystoreとKeyのパスワードをUnity起動時に自動入力する

はじめに

 UnityでAndroid Player設定のPublishing SettingsでKeystoreを設定すると、Unity起動時に(より正確にはビルド時に)KeystoreとKeyのパスワードを入力する必要があります。パスワードを入力せずにビルドするとエラーで止まりまるため、ちょっと忘れただけでストレスの原因になります。

 ちょっと調べ物をしていたら、解決策を見つけたのでここに残しておきます。

解決策

Unity – auto set Android password in project – Da Viking Codeで紹介されている方法は、以下のコードをAssetフォルダ以下のEditorフォルダ内に.csファイルを作成して書き込みます。ファイル名は何でもいいです。迷ったらSettingKeystorePassword.csなど分かりやすい名前を付けましょう。

using UnityEngine;
using UnityEditor;
 
[InitializeOnLoad]
public class StartUp {
 
    #if UNITY_EDITOR
 
    static StartUp() {
 
        PlayerSettings.keystorePass = "myPwd";
        PlayerSettings.keyaliasPass = "myAliasPwd";
    }
 
    #endif
}

 記事内ではKeystoreのパスを自動で渡す方法も書いてありますが、こちらは一度設定すれば、その後設定し直すことはまずないので、ここでの紹介は割愛します。必要であれば記事の方を参照してください。

欠点

 パスワードが平文で保存されてしまうため、もしコードが流出するなどのアクシデントがあればパスワードも読めてしまうこと。

 Android Player 設定 - Unity マニュアルには、以下の引用のような記述があるため、その観点からも推奨される行為とは言えないでしょう。

ノート: セキュリティ上の理由から、Unity はこのページにパスワードを保存しません。署名されていないデバッグキーストアは、デフォルトで、MacOS の場合は ~/.android/debug.keystore、Windows の場合は %USERPROFILE%\.android\debug.keystore にあります。

別の解決策

 UnityのAndroidビルド時にkeystoreのパスワードを毎回要求しないようにする - テラシュールブログでは、もっと簡単な方法が紹介されています。「証明書をUnsigned (debug) に戻すだけ」でも言いようです。上で紹介した方法が難しい場合は、こちらでもいいかも…

 また、UnityでAndroidのKeystoreパスワードを自動セーブ・ロードする - Qiitaでは、タイトル通り自動でセーブ・ロードする方法を紹介しています。実装は少し複雑になっていますが、やり方はこちらの方がいいかもしれません。(ソースコード上にパスワードが残らず、EditorPrefs上に残すため)

終わりに

 セキュリティ的に多少問題があるとは言え、毎回パスワードを入力する煩わしさから解放されるのは、大きなメリットです。ビルド時にパスワードを入力するのを忘れるいうちょっとしたことでイライラすることが減るのはいいですね。