でぃするだいありー?

そんな気はないんだれど、でぃすっちゃってる。 でぃすでれ?

はじめてのXamarin.Android

Xamarin初めてだと思ってたが、以前試みてAndroidの仕様上の制限から断念したBLEアプリ作成時にXamarin.Formsを使用していた。Android Studio with Javaでやっていたつもりだったが、いろいろ試していたらしい。すっかり忘れていた。

さて、C# だから楽勝だと思っていたが、Flutter や Android Studio with Kotlin での使用感と大いに異なる部分でいろいろハマった印象。プロジェクト作成時にいらないフォルダは自動作成するのにいるフォルダは存在しないし、自作したxmlファイルはビルドしないとcsファイルでエラー扱いになる。
Visual Studioあるあるなあれこれでもハマり、空のプロジェクト作成時に自動作成される MainActivity.cs は AppCompatActivity を継承しているのに、追加で自動作成されるアクティビティの継承元は Activity で、この画面に遷移しようとするとToolbarが表示されない。解消するには AppCompatActivity を継承しなくてはならない。

実機デバッグの際は、「Android パッケージへの署名」を有効にしていると「msb6006 java.exe コード2」なカンジのエラーになる。アーカイブの作成時も同様で、「Android パッケージへの署名」を無効にし、アーカイブを作成したあと配布時に署名ファイルを適用する形でないと同じエラーになる。

しかしながら、手持ちのAndroid実機はNougatなのでこれをターゲットにビルドすると、 layout_marginHorizontalで怒られ、roundIcon で怒られ、挙句実機へインストール成功するものの起動しない。
結局、ターゲットは Oreo にしてデバッグ実行で実機にインストールされたものしか起動しなかった。ハマり具合があいわからずなMS万歳で、おなか一杯。リリースビルドの実機適用は諦めた。

f:id:CharlieXX:20190401112013p:plain
f:id:CharlieXX:20190401111956p:plain

言語とか作法とかではなく、Visual Studioを使ったときにいつもやられるアレコレに振り回された印象がある。さっきできてなんも変えてないのに今やったらビルドできねー、再起動したらビルドできるようになった、みたいな。

C#には慣れているが、それを差し引いても印象は悪い。Android開発環境を選択せよといわれたら、候補には乗せたくないカンジ。

2019/04/07追記:
node.js + expressでAPIを作成してみたのを機に、Xamarin.Android版のリリースビルド実機適用に再挑戦した。
一つの誤りと、一つの設定変更でうまくいったような気がする。
誤りとは、「android.permission.INTERNET」に相当する権限付与の設定である。「Android マニフェスト」「必要なアクセス許可」の項目をよく確認せず「ACCESS_NETWORK_STATE」にチェックをつけていた。この状態でエミュレータで動作してたもんだから、誤りに気付かなかった。デバック版のインストール時もこれで動いてたので、なんだかよくわからない。動きだけ見ていると、リリースビルド時のみ効くもののようだ。KotlinおよびFlutterではエミュレータ実行時も権限付与が必要だったはずなのだが。
設定変更とは、「Android オプション」の「選択したABIごとに1つのパッケージ(.apk)を生成します」にチェックをつけるというもの。これにチェックをつけても生成されるapkファイルは一つで、チェックをつけない場合と比べてもファイルサイズも変わりない。Xamarinの情報は錯綜していて、「インストールする実機のOSバージョンにあわせたビルドをしなくてはならない」とか書いてあったり、これが過去に真実だったのか、本操作に該当するものなのか判断できない。

f:id:CharlieXX:20190407101806p:plain

f:id:CharlieXX:20190407101815p:plain

f:id:CharlieXX:20190407101825p:plain

f:id:CharlieXX:20190407101835p:plain

やっとXamarin.Androidの実機適用ができた。