//Build/ 2016 で Xamarin が Visual Studio で無償で利用できるようになりました。ということで、一応、素の環境から Visual Studio Community を使って入れます。
Windows で Xamarin 開発をしたい方はインストールする前に読んでほしい – Xamarin 日本語情報
http://ytabuchi.hatenablog.com/entry/2016/04/05/142525
田淵さんがスタート向けを書いてくれたので、私のほうは既存の Visual Studio に追加というスタイルで話を進めます。
Visual Studio Community 2015 をダウンロード
https://www.visualstudio.com/ja-jp/products/visual-studio-community-vs.aspx から Visual Studio Community をダウンロードしてインストール
最初のオプションで「C#/.NET (Xamarin)」を入れてもいいのですが、今回は既定のままインストールした後に Xamarin を入れます。
Xamarin をインストールしていない状態でプロジェクトを作ろうとすると
新しいプロジェクトで「Visual C#」→「Android」あるいは「iOS」の下にひとつだけプロジェクトがあります。この状態は、まだ Xamarin がインストールしていない状態です。
試しにプロジェクトを作って開くと、Xamarin のサイトからダウンロードせよ、というプロジェクトが開かれます。
Download ボタンを押して xamarin.com からダウンロードしてもよいのですが、ここは再び Visual Studio のインストーラ(vs_community_JPN)を起動して、改めてスイッチを設定します。
Xamarin をインストールする
「C#/.NET (Xamarin)」をチェック。UWP も作りたい場合は「ユニバーサル Windows アプリ開発ツール」もチェックしておきます。
Android が入るので Java も入りますね。Hyper-V の Android エミュレータも込みです。
この時点で「共通ツールおよびソフトウェア開発キット」を開いて
- 「Android SDK セットアップ(API レベル22)」
- 「Android SDK セットアップ(API レベル23)」
もチェックしておくと、後ろのほうにある Xamarin.Forms をビルドするときの不可思議なエラーがなくなります。ここではあえてチェックせずに進んで、わざと「ハマり」ますw
Xamarin がインストールできるとこんな状態になる。
「Cross-Platform」を選ぶと Xamarin.Forms を使える。
PCL でプロジェクトを作った直後
最初の Xamarin.Forms を動かしてみる
このままの状態で Xamarin.Forms をビルドして動かそうとするとビルドエラーになります。最初のテンプレートをダウンロードしてビルドしようとしただけなのに「何で動かないのこれ!?」と思うぐらい変な感じです。
Xamarin.Forms のバージョンは「2.0.06482」というちょっと古いものが使われています。
これ、ちょっと事情があって、
- Xamarin.Android は、下位の Android に対応するためにいくつかの Xamarin.Android.Support.* を用意している。
- Android SDK のバージョンは Xamarin とは別に更新される。
- Xamarin.Android 本体と Xamarin.Forms ライブラリは、別口で更新される。
NuGet Gallery | Xamarin.Forms 2.1.0.6529
という微妙な関係があって、タイミング的に Xamarin.Forms のビルドがうまく通らないことが多いのです。NuGet から取得すると Xamarin.Forms の依存関係は以下のようになっています。
最新の Xamarin.Forms 2.1.xx は、Xamarin.Android.Support.* の v23.0.1.3 に依存しているのですが、現時点で Xamarin.Android.Support.* の最新バージョンは v23.2.1 なのが厄介なところです。さらに、Android SDK のバージョンが絡んでくるので、それぞれの最新版を利用しようとするとうまくいかないことが多いのです。
このあたりは、Xamarin.Forms 自体が OSS 化されるということなので、最悪は自前で Xamarin.Forms のビルドをして最新の Android.SDK に合わせる(正確には Xamarin.Android の最新にあわせる)スタイルになるでしょう。まあ、今後も Xamarin.Android のバージョンアップとタイムラグが出るのは仕方ないところです。
エラーのほうは、values-v23 と出ているので、Android SDK 6.0 が由来っぽいです。「ツール」→「Android」→「Android SDK Manager」を見ると、Android SDK 6.0/5.1 が入っていないので、これを入れます。
Visual Studio のインストーラーのほうに Android 6.0/5.1 がないのが問題じゃないかな…というか、良く見直せば「Android SDK セットアップ(API レベル22)」と「Android SDK セットアップ(API レベル23)」があるので、これにチェックを入れれば Android 5.1/6.0 が入りそうです。
この状態で、ひとまずエラーがなくなります。
Visual Studio Emulator for Android を使う
Android のエミュレータは、Hyper-V を有効にして Windows Phone と同じ感じで動くものをツあくとよいです。
どうせなので Android SDK 6.0 のものを選択してダウンロード。
実行すると、結構なスピードで動きます。
Google Play が入っていないこと以外は、だいたい実機と同じように動きます。逆に言えば、Google Play からダウンロードして試してみる、ってことをやる場合には実機か別のエミュレータを使います。
XAML はどのように書くのか?
Xamarin.Forms の売りは2つあります。
- Android/iOS/UWP等の複数のプラットフォームの UI を一気に書けます。
- XAML + MVVM で書けます。
複数プラットフォームの UI を共通化するのであれば、適当なコンバータを作れば UI の同時生成ぐらいはできるのですが、もうひとつの要素があわさっていることが重要です。UI の記述(この場合は XAML のコード)が「共通化」されたのであれば、それを内部的に動作さえるロジックも「共通化」できるだろう、という発想です。具体的には Model だったり ViewModel だったりするわけですが、現実問題としてはプラットフォームに依存した UI は共通化できないし、それぞれのプラットフォームごとに記述するしかないですよね。そのあたりも含めて、大まかなところは XAML で共通化させてしまって(ついでにロジックも共通になる)、別々なところはできるだけ小さくなるように設計をします。
で、もともとの Xamarin.Forms の UI コードが、コードに記述になっているので、どうせだから PCL に XAML を含めて書いてみようってのが次のステップです(これ自体がテンプレートで含まれてもいいと思うんだけど、含まれてない)。
これを使った例を後日。