8月25日
Play Console アプリのクラッシュ数から確認できるクラッシュ時のスタックトレースを見ると、起動時にディレクトリを選択するところで NullPointerException が発生して落ちる場合があるようなので、一部対応しました。Android 版 SDK と Android 版アプリを更新しました。
Play Console アプリのクラッシュ数から確認できるクラッシュ時のスタックトレースを見ると、起動時にディレクトリを選択するところで NullPointerException が発生して落ちる場合があるようなので、一部対応しました。Android 版 SDK と Android 版アプリを更新しました。
手元の端末を Android 10 にアップデートしたところ、ONScripter を起動してゲームデータを選択した直後に落ちるようになってしまいました。調べたところ、Android 10 から対象範囲別ストレージが導入され、任意のファイルにアクセスするためには AndroidManifest.xml に以下の赤字の内容を記述する必要があるようです。Android 版 SDK と Android 版アプリを更新しました。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application android:label="@string/app_name" android:icon="@drawable/icon" android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="true">
本家ではスクリプトでラベルを二重に定義すると実行時にエラーになります。ONScripter ではラベルの二重定義についてはチェックしておらず、最初に見つかったラベルを使用するようにしていました。一方、PONScripter では、std::map を使ってラベルの登録と検索を行っており、ラベルが二重に定義されている場合は、最後に見つかったラベルが使用されます。ONScripter でも PONScripter に合わせて最後に見つかったラベルを使用するように変更しました。
アプリをリリースしようとしたら、Google Play Console に以下のメッセージが表示されました。そこで、Android 版 SDK を更新して、対象を Android 9 (API 28) から Android 10 (API 29) に変更しました。
2020 年 8 月以降、新しいアプリは Android 10(API レベル 29)以上を対象にする必要があります。 2019 年 11 月以降、アプリのアップデートは Android 10(API レベル 29)以上を対象にする必要があります。
また、Android 版 SDK の AndroidManifest.xml に以下の赤字の内容を記述して、HTTP 通信を有効にしました。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application android:label="@string/app_name" android:icon="@drawable/icon" android:usesCleartextTraffic="true">
文字コードが UTF-8 の場合に、右クリックメニューの文字が正しく描画されないバグを修正しました。
ゲームデータの配布方法を「パターン1:Google Play からダウンロードする方法」にすると、Android 5.0 以上の端末では実行時に以下のログを出力して落ちるとメールでご報告をいただきました。
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService }
拡張ファイルをダウンロードするには、Google によって提供されている LicenseChecker.java の 153 行目を以下の赤字の箇所のように修正する必要があるようなので、ゲームデータの配布方法にそのように追記しました。
ONScripter/library/src/main/java/com/google/android/vending/licensing/LicenseChecker.java:
.bindService(
new Intent(
new String(
Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))).setPackage("com.android.vending"),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
バグ報告「20200530バージョンにおけるtagの不具合」を元に、20200530において、textgosub 命令と pretextgosub 命令を併用しているときに、textgosub 命令で指定されたラベルから戻ると、文章の途中であっても再び pretextgosub 命令で指定されたラベルを呼び出してしまうバグを修正しました。20200510 にこのバグはなかったのですが、20200530 の修正に問題がありバグが発生していました。
メールでいただいたバグ報告を元に、文字コードが UTF-8 の場合に、gettag 命令においてタグを正しく読み取ることができないバグを修正しました。
バグ報告「movie命令でエラー」を元に、MPEG-1 形式ではない動画(MPEG-4形式など)を、誤って MPEG-1 形式として再生しようとすることがあるバグを修正しました。Android 版では、以前は外部の動画再生アプリを使用してすべての動画を再生していましたが、20190911 以降では、MPEG-1 形式は ONScripter 内部で、それ以外の動画は外部の動画再生アプリを使用して再生します。このときに、MPEG-1 ではない形式の動画を誤って MPEG-1 形式として再生しようとして落ちていたようです。
なお、ONScripter や本家が想定している動画の形式は MPEG-1 です。Android 版と iOS 版では MPEG-4 など他の形式の動画も再生できますが、これはあくまでもおまけの機能です。また、Android 版では、外部の動画再生アプリによっては動画再生後に ONScripter に正常に復帰しない場合があります。その場合は、動画再生後にいったん ONScripter をバックグラウンドに移動してからフォアグラウンドに戻すと復帰します。こちらの環境で正常に復帰するのは VLC for Android、Google フォト、アルバム(Sony Mobile Communications)などです。MX Player は、以前は正常に復帰していましたが、今は正常に復帰しません。
メールでいただいたバグ報告を元に、LUA の luacall animation がだいぶ前から機能していなかったバグを修正しました。
だいぶ前から、BTS(影舞)から送られてくるバグ報告のメールの本文が文字化けするようになっていました。長年放置していましたが、今回調べてみたところ、本文の文字コードは JIS ですが、メールヘッダに Content-Type: の指定がないため、メーラで正しく表示されないことが原因のようでした。そこで、応急処置として、BTS(影舞)を以下のように修正したところ、メーラで正しく表示されるようになりました。
--- mailer.rb.bak 2020-03-08 08:16:24.417151324 +0900 +++ mailer.rb 2020-03-08 08:47:41.344970850 +0900 @@ -75,7 +75,9 @@ STDOUT.reopen(pipe_cw) STDERR.reopen(pipe_cw) - exec(@mail_command.untaint, '-s', subject.untaint, to.dup.untaint) + #exec(@mail_command.untaint, '-s', subject.untaint, to.dup.untaint) + exec(@mail_command.untaint, '-a', 'Content-Type: text/plain; charset="ISO-2022-JP"', '-s', subject.untaint, to.dup.untaint) } pipe_cw.close
いつの間にか、BTS(影舞)の管理モードに入ろうとすると Internal Server Error が表示されるようになっていました。調べたところ、kagemai/project/_tmp に大量の一時ファイルが溜まっており、それを Dir.glob で列挙しようとして失敗していたようでした。手動で一時ファイルを削除したところ、管理モードに入れるようになりました。
バグ報告「自サーバーからのダウンロードが止まる・strspにrender-font-outlineが反映されない」を元に、文字列スプライトの描画のバグを修正しました。アルファブレンディング処理に間違いがあり、strsp 命令で影指定を 0 にしても文字の輪郭が描画されているように見えていました。
Debian の公式パッケージを管理していただいている Paul さんからのバグ報告を元に、文字コードが UTF-8 の場合に、clickWait と clickNewPage 内で clickstr 命令で指定された強制クリック文字が正しく処理されないバグを修正しました。また、メールで Paul さんに返信したのですが宛先エラーになってしまいました。
最新の環境でビルドした Android 版を実行すると、Lua で以下のエラーが発生するようになりました。
FORTIFY: strchr: prevented read past end of buffer
そこで、Android 版 SDK を更新して、Lua の Android.mk に FORTIFY を抑制する以下のオプションを追加しました。
LOCAL_CFLAGS := -D_FORTIFY_SOURCE=0
バグ報告「Windowsでのコンパイルの問題」を元に、ONScripter on Windows の関連ライブラリのソースを更新し、libpng と zlib をビルドする際に「警告をエラーとして扱う」を「いいえ」に設定(/WX- オプションを指定)するようにしました。