Skip to content

v0.3.7 — 支援 Android 9、再瘦一圈

Choose a tag to compare

@plateaukao plateaukao released this 21 Aug 18:30
· 36 commits to main since this release

這版做兩件事:把最低系統需求降到 Android 9,以及讓安裝包再瘦一圈 —— release APK 從 767 KB 減到 534 KB(−30%)

支援 Android 9(minSdk 29 → 28)

原本 Android 9 裝不上去。降 minSdk 後只有三處要處理,功能零損失:

  • 主題Theme.DeviceDefault.DayNight 是 API 29 才有的,改成自訂 @style/AppThemevalues/ 走淺色、values-night/ 走深色。-night 資源限定詞 Android 9 就支援,Android 10 以上行為完全不變。
  • IME 導覽列 insetsapplyNavBarPadding() 用的 WindowInsets API 是 Android 15 專用路徑,呼叫端本來就有版本守衛,只是 lint 追不進私有方法;加註解即可,零執行期改變。
  • 簡繁轉換android.icu.text.Transliterator 公開 SDK 自 API 29 起。實測它在 Android 9 上其實可用(那個 API 29 是編譯期門檻,不是類別存在的門檻),但不能假設每家 OEM ROM 都放行,所以加了版本守衛,Android 9 改用 app 已附的 s2t.json / t2s.json 逐字對照 —— 就是 CINTable 做候選排序用的同一份表。

Pixel API 28 模擬器實測(全程走軟鍵盤,不用 adb shell input text):設定頁與深色模式、liu.cin on-device 編譯、鍵盤彈出與游標、mn→米 候選送出、聯想詞、,,VS 剪貼簿繁→簡皆正常。

資料表 v2 格式(−233 KB)

解析四個 mmap 資料檔的內容後發現表示法上的浪費,改格式不改資料、不動功能

檔案 改法 大小
phrases.bin → PHM2 去掉與鍵重複的首字、UTF-32 改 UTF-16 251 → 170 KB
zhuyin_data.bin → ZYM2 反向索引不再存第二份字表,改存 u16 音節索引 151 → 61 KB
pinyin_data.bin → PYM2 1338 個拼音音節與注音音節字表相同,改存索引別名 40 → 8 KB
char_freq.bin → CFM2 頻次只用於排序,改存 dense rank u16 54 → 26 KB

讀取端仍是 mmap 零 heap,查詢時間差異在 ±1–2 µs。正確性由 Python 參考讀取端對 v1/v2 逐鍵比對(全部音節、字、拼音、詞首字、頻次順序,外加整個 CJK 區間的未命中探針)確認一致。

APK 簽章與 v0.3.6 相同,可直接覆蓋更新。