Xamarin.FormsがサポートしているAndroidのバージョンをおさらいしてみましょう。
https://developer.xamarin.com/guides/xamarin-forms/getting-started/installation/#android
公式ドキュメントによれば
- Android 4.0.3 (API 15) or higher
- iOS 6.1 or higher
- Windows Phone 8.1 (WinRT, using Visual Studio)
- Windows 8.1 Tablet/Desktop Apps (WinRT, using Visual Studio)
- Windows 10 Universal Apps (Phone/Tablet/Desktop, using Visual Studio)
- Windows Phone 8 Silverlight (using Visual Studio) DEPRECATED
Android 4.0.3、つまり、「Ice Creame Sandwitch」以降をサポートしています。4.0.3は2011年12月16日に提供開始されています。
4.0.3以降ということであれば、世の中にあるAndroidデバイスのほぼ100%(残念ながらそれ以前のバージョンも多少は存在する)をカバーできます。
日本でいえば、ドコモのGalaxy SII SC-02Cなどが4.0.3ですが、2016年時点でキャリア2年縛りはすでに超えていますから、ほぼカバーしていると言っていいでしょう。
ただし、素直に4.0.3かといえば、若干違和感があります。
その違和感はXamarin.FormsとXamarin.Android.SupportとAndroid SDKの関係を表にしてみるとはっきりしています。
Xamarin.Forms | Xamarin.Android.Support | Android SDK | |
プロジェクト作成時 | v1.3.3.6323 | v4.21.0.3 | 4.0.3 (API1 5) |
nuget最新 | v2.2.0.31 | v4.23.3.0 | 5.0 (API 21) |
このように最新のXamarin.Forms v2.2が要求するXamarin.Android.Supportはv4.23.3.0であり、v4.23.3.0が要求するAndroid SDKは5.0になるのです。
それではなぜ、公式ドキュメントには「4.0.3」以上となっているのでしょうか。
答えは同様に公式ドキュメントにあります。
つまり、ターゲットは最新(または少なくともXamarin.Android.Support.v4.23.3.0が要求する5.0以上)として、Minimum Android versionとして「4.0.3」を指定できることが、Xamarin.Formsの要求仕様がAndroid v4.0.3以上という意味だということです。
※Visual Studioならプロジェクトのプロパティの[Application]-[Application properties]
違和感の原因は、4.0.3以上ということで、では自分たちの作ったアプリも4.0.3以上としようとしたときにターゲットフレームワークを「4.0.3」ではなく「5.0」としてMinimum Android versionで「4.0.3」としていいのかという点にあります。Visual StudioならTarget frameworkが「Complie using Android version」となっているのでさらに不安を感じます。
これらのバージョンはどのような意味があるのでしょうか。
注意しないといけないのは、これは、Xamarin固有の話ではなく、Android開発の基本的な話となります。Android StudioでJavaで作成したときもbuild.grableに同じように描くことになります。
結論を先に書けばWindowsアプリに比べたらかなりおおざっぱというか、これでいいの?という感じがAndroidアプリ開発なんだなぁと。
Target framework (targetSdkVersion) |
|
Minimum Android version (minSdkVersion) |
指定したバージョン以上にインストールできる宣言 |
これ、トラディショナルジャパニーズカンパニーで開発やっていると、Target framework = Minimum Android versionとして、アプリの動作要件の○○以上とする一番古いバージョンに合わせてコンパイルして、それより上位のOSでも下位互換性確認の意味で動作チェックしてって感覚だと思うのです。
Target frameworkは最新にして、Minimum Android versionにアプリ動作要件の○○以上とするというのがAndroidスタイルだって納得して、きちんとシステムテストで4.0.3 (Ice Cream Sandwich)/4.3 (Jelly bean)/4.4 (KitKat)/5.1 (Lollipop)/6.0 (Marshmallow)とテストするしかないのでしょう。このあたり、Androidで業務アプリを作っていたり、それよりもGoogle Playで人気アプリ配信している個人開発者さんあたりにお話をお聞きしたいですね。ほんと、どうしていらっしゃるのだろうか。
まあ、そんなときに心強い味方と言ったら、Xamarin Test Cloudですよね。
例えば、月額249$のBUILDなら、こんな感じにテストができます。
- 同時に2つまでデバイスを選んでテスト可能 (2 concurrent devices)
- トータル10分かかるテストならば、2多重x10分で合計3時間(3 device hours/day)=毎日90分のテスト時間で18デバイスのテストが可能
4.0.3 (Ice Cream Sandwich)/4.3 (Jelly bean)/4.4 (KitKat)/5.1 (Lollipop)/6.0 (Marshmallow)の5バージョンでそれぞれ代表的なデバイスを1つづつテストするのであれば、もう一つ安いSTARTプラン=月額$99でもテストできそうですね。
- 同時に1つまでデバイスを選んでテスト可能 (1 concurrent devices)
- トータル10分かかるテストならば、1多重x10分で合計1時間(1 device hours/day)=毎日60分のテスト時間で6デバイスまでテスト可能
1日1回しかテストできないの?と思うかもしれませんが、手元の実機やエミュレータでテストしたあとの仕上げテストですから、毎日1回とかで十分と言えるでしょう。
そうそう、Visual Studio Enterpirse使っているなら上記の金額から25%引きで利用できますので、さらにお得ですね。