Android で外部キーボード使用時の日本語入力を快適にする (SKK) | tech - 氾濫原 というのを書いたが、設定できない部分で自分にあわない挙動があったので、fork して変更した。

以下の点だけ

  • egg-like-newline な挙動に (変換中の RET で改行を入力しない)
  • 辞書登録時に何も入力せず RET した場合は元の状態に戻るように

GitHub Actions で自動ビルドするようにしてある。

  1. トップ
  2. tech
  3. SKK for Android の自分用フォーク

Android では、アプリのサイズをできるだけ減らしたりするために、リリース前にアプリ全体のコードの最適化 (いわゆるツリーシェイキング) が推奨されている。動作としては、実行されるコードを解析で割り出しで、不要なコードを全て削除、というものになる。

基本的には minifyEnabled true を build.gradle に書けばよくて、簡単なアプリケーションなら、マニフェストから起動される Activity を解析してそこから呼ばれるクラスやメソッドは削除されないようになるので、これだけですむ。

が、リフレクションや JNI、または capacitor のように JavaScript のエンジンを一度経由して呼ばれるクラスなどは、この解析パスで到達できない。結果として、性質上、実行時にエラーが起こることになる。

capacitor で keep すべきもの

capacitor の場合、JavaScript 経由で呼ばれるものには全て keep しておく必要がある。

  • com.getcapacitor.plugin.* のうち、利用しているもの。
    • 名前も含めて keep しないとダメ。JS 側から見える名前はリフレクションで取得されるため
  • その他、利用しているプラグイン以下のクラス

-keep public class com.getcapacitor.plugin.App {
    static *;
    public *;
}
-keep public class com.getcapacitor.plugin.Device {
    static *;
    public *;
}
-keep public class com.getcapacitor.plugin.Filesystem {
    static *;
    public *;
}

-keep public class org.apache.cordova.CordovaPlugin

-keep public class fr.drangies.cordova.serial.**
-keepclasseswithmembers class com.hoho.android.usbserial.driver.** {
    static *;
    public *;
}

-printconfiguration /tmp/full-r8-config.txt
-printusage /tmp/usage.txt

`-keep public class com.getcapacitor.plugin.Filesystem` だけだと名前が変わってしまう。ProGuard の指定方法がややこしつてよくわからなかったが、上記のようにしたらうまくいった。

cordovarduino という Cordova のプラグインを利用しているので、それ系の設定もある。

`-printusage` で指定したファイルには「削除された」クラスやメソッド名が出力される。必要なメソッドが意図せず削除されているかも?と思ったらこのファイルを見てみる。

  1. トップ
  2. tech
  3. capacitor で Android 向けに minifyEnabled true