Android 版 EBt の開発で困った点
今日は Android 版 EBt の開発でしんどかった点を紹介していきます
なんというか、Android って独特のルールがあって、Windows と同じ考え方だとどうにもならないケースがいっぱいあるんですよ…
というわけで、今日はその辺を紹介していきたいと思います。
なんというか、アプリによってはこんなこと気にする必要すら無いってケースもありますが、やっぱり知っているということは大事ですから。
前提条件:Visual Studio + MAUI で開発しました
MAUI つかって開発している人がどんだけ居るのかな?って気もしないでもないですが、私の開発環境はこれでした。
というわけで、以降、MAUI つかって踏んだ地雷の山です。ただ、MAUI 固有の問題はほとんど無いんじゃないかなーって思います。
なお、私が MAUI を使ったのは、C# で書かれている Win版EBt とライブラリを共有するためです。
複数の種類のOSを横断するのはとってもしんどいので…
トラブル1:Ryzen だと Android のエミュレータが動かない
最初のトラブルはこれでした。いや、起動はするんですよ、起動は。でも、再起動するとフリーズ。もしかすると、再起動しなくてもフリーズしたかもしれない。でも、正直詳細はもうわかりません。
ただ、Android のエミュレータがフリーズするので、いきなり実機開発をしないといけないという問題になったのは正直しんどかったです。Core i5 の PC だとうまく動いたんですけどね…それ、もう引退直前の奴でね…
トラブル2:Debug の接続が途中で切れる
なんか、Debug 中に Visual Studio との接続が切れるんですよ、頻繁に。これも原因不明。
だから、Android でテストするときに Visual Studio のデバッグ機能がほぼ使えない。これがとってもしんどいのです。
でもまぁ、切れないときもあるので、もう実機でないとわかんない!というときだけデバッガ使いました。
一応、MAUI は Windows アプリも作れるので、基本的なところは Windows で確認して、あとは Android ってタイミングで Android に持っていきました。
トラブル3:メモリ不足(っぽい)でいきなり落ちる
ちょっとばかりメモリをルーズに使うような機能があったんですよ。もう、サクサク落ちる。悲しいぐらいに落ちる。特にらしいメッセージも出さずに…
結局は、使用メモリが原因っぽいってことを何とか頑張って突き止め、アルゴリズムを改修して何とかなりました。
これがまたしんどかった。
トラブル4:自分のIPが獲得できない
これは、Android の制限らしいです。自分のIPちょうだいってやると 127.0.0.1 が取れるんですが、そんなIPはほしくない。対外的なIPがほしいんですよ。でも、Android はそう言うのダメって事になったみたいで。
仕方が無いので、受信したときに相手の情報がもらえるのでそれで代用しています。
トラブル5:Application の終了タイミングで長い処理をしてはいけない
あんまりも処理が長いと Android が kill してくるんですよ…だから、メモリ上に展開されている DB を書き込んでいる途中で kill されちゃって DB が壊れると言うね。
もしかしたら、別のアプリとしてDBサービス動かす(=GUIアプリ止めてもだいじょうぶ)という対応すれば大丈夫なのかもしれない。でも、なぁ…DBとの通信は Intent とか使う?でも、大量のDBアクセスがあるからそれじゃしんどいよね。
というわけで、こまめにDBをストレージに書き出すという対応をしました。
トラブル6:一部の Android は UDP や TCP の受信(listen)が出来ないみたい
うそぉ…って思ったんですが、どうやら本当に受信できないみたいで…その Android では、他のアプリでも同じような症状が出るので、多分 Android の製品によってはそういうケースがあるんでしょうね。
まぁ、基本サービスを受けるだけなんだから自分からつなぎにいければ大丈夫でしょ?ってことだと思うんですが、そうでないアプリは困るのだよ…まぁ、listen しなくても良いような仕組みも追加したんだけど、こういう制限は勘弁してほしいのですよ…
というわけで
Android はスマホという条件が結構シビアなので、こうなるのも仕方がないといえば仕方が無い。でも、こういう問題がいっぱい起きると、正直しんどい。
これで iPhone に移植とかいったら、次はどんな問題が出てくるんだか。しかも、ライブラリは共有したいから、修正内容も気をつけないといけないし。うん、どうせ持っていないから、iPhone 対応はしばらく無いな…
この手の問題はどうにもならないんですが、将来、もうちょっと何とかなってくれると開発する人としては嬉しいんですけどね…