BlackBerry KEYone で使うためのランチャーを書いて、 Google Play にリリースした

去年、 Nexus 5X がブートループに陥り、買い換えざるを得なくなったので、BlackBerry KEYone を購入していた。キーボードがあるので快適に使っていたが、 Alfred のようなアプリがあるとより便利なのではないかと思った。幸いにも、 KEYone には(それまで使っていなかったが)「便利キー」という名前の、アプリを最大 3 つまで紐づけられて、特に一つしか紐づけなければどの画面でもボタン一つでアプリを起動できるボタンがあったので、そこから呼び出すことにしてアプリを作成、リリースまでした。

作成したアプリは「Blue Line Console」で、 Google Play にリリースした。ソースコードは GitHub のリポジトリに置いてある。

(3/27 追記:画像を一枚も貼っていなかったので、スクリーンショットを追加)

リリースするまでの流れを思い出せる範囲で書いておく。

    • アプリを作ろうと思った
    • とりあえず、 Android Studio をダウンロードしてパソコンに入れ、プロジェクトを作成した。
    • Android Studio は Git との連携が最初からついていて、 .gitignore もちゃんと書いてあったので、 Git でコードを管理できるようにした。
    • とりあえず欲しい機能が実現できるか書き始めてみた。アプリの検索周りが Android 特有の事情でどれくらい影響を受けるかわからなかったので、そこから書き始めた。
    • 動いたが遅かった。アプリ一覧そのものはすぐ取得できるが、アプリの名前の取得が遅いらしいことに気付いた。ぐぐってみると Android: Getting list of device applications – Very Slow – Stack Overflow というページがひっかかり、どうにもならなそうだったので、アプリの名前を SQLite にキャッシュすることにした。
    • レイアウトの画面で、 left / right より start / end のほうが RTL な端末にフレンドリーだよ、という警告がでていたので、 RTL 周りを調べて修正した。端末の言語設定をアラビア語に変えてどのように動作するか調べた(開発者オプションで日本語のまま RTL レイアウトにすることもできたが、どうせなので実際にアラビア語だとどうなるか調べた)。
    • 必要な機能を実装したり、レイアウトを調整したりしていた。名前がまだ決まっていなかったので、パッケージ名は仮置きのまま、アプリの名前やアイコンはデフォルトのままになっていた。
    • 途中で、 Jenkins でビルドできるようにした。gradlew ファイルを実行可能にして、Jenkins に Android エミュレータプラグインを入れて、 Gradle で “build connectedCheck” の二つのジョブを実行するようにした。GitLab からフックするようにして、コミットしたら入れられる apk ができるようにした。
    • 名前が決まったので、クラス名などを決定し、アイコンを作成した。 デフォルトで roundIcon (Android 7.1 (API レベル25)から)と anydpi なアイコン(Android 8.0 (API レベル26)から)が設定されていたが、一旦は無視することにして削除した。なお、後で Google Play にアップロードする操作の途中でアプリのアイコンの高解像度版やヘッダなどが必要になるので、アイコンができたからといってアイコン用の png だけ残して元ファイルを削除してしまうと悲しい思いをする(さすがに消さなかったが)。
    • Google Play にリリースする準備をした。
      • Google Play コンソールから、デベロッパー登録をして $25 を支払った。
      • Google Play App Signing (Google Play アプリ署名)を利用することにしたが、 Google に確認してもらうための電子署名はしないといけないので、 Jenkins の Android Signing Plugin (と Credentials Plugin)を設定した。PKCS#12 な証明書(秘密鍵あり)を keytool コマンドで作成して Jenkins の Credentials プラグインに読み込ませた。方法は後述。
      • フォームから、デフォルトの言語を選んで、アプリのタイトルや説明、スクリーンショットをアップロードした。レーティング(何歳以上じゃないと使ってはいけないとか)の判別のための設問なども必要だった。基本的には必要な作業は画面を見ればわかるようになっていた。非公開な状態で apk のアップロードと説明の記述まで実施した。
      • 完了したらアップロードボタンを押すと割とすぐにアプリのタイトルで検索してインストールできるようになった。

PKCS#12 な証明書の作成

アプリケーションへの署名 | Android Developersに従って署名を作った後、Credentials Plugin に読み込ませるために PKCS#12 に変換した。よくわかっていなかったのでこうしたが、もっといい方法がありそう。

$ keytool -genkey -v -keystore android-build-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
$ keytool -importkeystore -srckeystore android-build-key.jks -destkeystore android-build-key.p12 -deststoretype PKCS12 -srcalias my-alias