2019年11月25日月曜日

近況

最近開発に没頭していたので、更新が滞ってます。
販売しているAndroidアプリに新機能を搭載することにしたので、そのための調査とコーディングが大変なのです。
XamarinのプロジェクトにJavaソースを加えて、C#からJavaをコールする方法(Managed Callable Wrapper、通称MCWが必要)や、C++ソースを加えてJNIで呼び出す方法など、色々勉強になりました。
C++のライブラリ(.SO)側でSignalを発行するような致命的エラーが発生した場合に、これをAndroidのVM側で検知する方法がまだわかりません(エラーと同時にアプリも落ちてしまう)。
C++側でSignalハンドラをフックして、Javaの例外に変換する方法があるようなのですが、JavaVM自体はSignalハンドラを利用して色々やっているらしく、ハンドラをフックするとハングアップするなど、うまくいきません。
平日は2時間くらいしか時間が取れず、土日も色々忙しいので…。

2019年11月9日土曜日

Xamarin デバッガーが動かなくなる

Xamarinのデバッガーが動かなくなった…。
メッセージは以下の通り。
デバッガーに接続できませんでした。詳細については Xamarin 診断出力を、例外の詳細についてはログをご覧ください。
色々ググってプロジェクトプロパティ→Androidオプション→共有ランタイムの使用のチェックを外したら動いた。
設定→アプリで、Mono Shared RuntimeとXamarin.Android API-28 Supportをアンインストールしたら、「共有ランタイムの使用」「Fast Deployment」を戻しても大丈夫になった。時間を1時間ほど浪費した。
最近Xamarinに悩まされることが減りましたが、久々にやられました。
疲れた。

2019年11月3日日曜日

自家製さんまの握り

魚屋さんで、「刺身用」と書いたサンマが売ってました。
最近はスーパーでも、「サンマを刺身用におろすことはできません」と書いてある所がほとんど。珍しいので4尾買ってみました。
息子がサンマの握りが大好物なので、先週試験結果のご褒美に回転寿司に連れて行った自のですが、不漁による価格高騰で仕入れをしてないそうで、食べられなかったのです。
帰宅後すぐに頭と内臓を除去。寄生虫は魚が死ぬと、内臓から筋肉に移動するため、できるだけ早く内臓を取り除くことが肝心なのだそうです。
その後は氷温室へ。こうしておくと寄生虫がいる場合は、表面に這い出てくるらしいです。そして3枚におろして皮を剥ぎ、念のため細かく切り込みを入れます。
完成です。美味しそう。

実際に食べてみると、新鮮なため臭みは全く無く脂が乗っていてかなり美味しい。
で、2個目を食べようとしたら、ネタの上にクネクネと動くものが。
!!!
いるんですね。アニサキス。既に2個食べた息子は、これを見て固まってました。
息子が超警戒していたので、ネタを剥がして醤油に漬けてしばらく置いて様子をみてみましたが、他にはいませんでした(たぶん)。
結局全部食べましたが、その後1週間以上経過した現在、異常はありません。
ちなみにアニサキスでお腹が痛くなるのは、胃を食い破る痛さではなく、アレルギー反応の痛みで、人体では生きられず1週間以内に死ぬそうです。



2019年11月2日土曜日

XamarinでTargetSdkVersion28対応


11月に入ったので、GooglePlayの要件で今後のバージョンアップ時はAndroid9対応(TargetSdkVersion=28)にしないとアップロードできなくなります。
ということで先送りし続けてきた対応作業に入ります。
ネットで検索した限りでは、9からはフォアグラウンドサービスを使用するアプリには、新たにパーミッションが必要とのこと。デンジャラスパーミッションではないので、マニフェストで宣言するだけで終了です。



まずはアプリケーションのターゲットフレームワークをAndroid9に変更。こちらはXamarinの設定になります。
これでAndroidマニフェスト設定画面に新しいパーミッションが表示されるようになります。ちなみにAndroidのTargetSdkVersionと同じにしないとXA1008のWarningが出ます。

こちらが本命の設定。
さっそく再コンパイルしてAndroid9のエミュレータでアプリを起動してみます。

…あっさり動きました。

あれっ。こんなに簡単に終わるんだっけ。Android8.0のXPERIA実機でも問題なく動きました。もうちょっとAndorid9の変更点を確認してみます。