過去の開発日誌

2022年

1月18日

Android 版 SDK を更新して、ゲームデータの配布方法のうち「パターン2:アプリに内蔵する方法」に対応しました。

1月15日

ONScripter::flushDirect において、画面の更新領域の横幅と縦幅の一方が正で他方が0だと Android 版で落ちるバグを修正しました。

1月10日

Android 版 20220104 が Android 11 で動作しないとのご報告をいただきました。調べたところ、Android 11 以降では AndroidManifest.xml の android:requestLegacyExternalStorage="true" が無視されるようになっているようで、アプリ固有の領域以外は File API を使ってアクセスできなくなったようです。

以前から書き込みは Storage Access Framework の DocumentFile を使うようにしていたのですが、まず、読み込みについても DocumentFile を使うようにしてみました。しかし、DocumentFile.findFile のソースを見ると TreeDocumentFile.listFiles で ContentResolver.query を実行してディレクトリのファイル一覧を取得し、その各ファイルに対して DocumentsContractApi19.getName でさらに ContentResolver.query を実行しているため非常に遅くなるようです。そこで、ContentResolver.query と DocumentsContract を直接使って効率よくファイルを読み書きするようにして、Android 版 SDK と Android 版アプリを更新しました。Android 10 の実機と Android API 32 のエミュレータで動作することを確認しています。ただし、ゲームデータの配布に関する箇所は修正しておらず、後日修正する予定です。

また、本体のソースコードを修正して TTF_OpenFont ではなく TTF_OpenFontRW を使ってフォントファイルを開くようにし、Android 版では Storage Access Framework 経由してフォントファイルを開くようにしました。

なお、Android Studio からエミュレータを起動しようとすると、vulkan-1.dll が見つからないといったエラーが出て起動しなくなりましたが、以下のファイルを作成したところ起動するようになりました。

c:\users\username\.android\advancedFeatures.ini
Vulkan = off
GLDirectMem = on

1月4日

最新の Android Studio と Android SDK の環境で Android 版をビルドできるようにしました。従来の Import module による方法では Google Play Licensing Library を組み込むことができなくなっていましたが、組み込み方を変更して対応し、Android 10 の端末で動作することを確認しました。Android 版 SDK と Android 版アプリを更新しました。