Visual Studio Community 2015 で Xamarin.Forms を使う

//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 をダウンロードしてインストール

image

最初のオプションで「C#/.NET (Xamarin)」を入れてもいいのですが、今回は既定のままインストールした後に Xamarin を入れます。

image

Xamarin をインストールしていない状態でプロジェクトを作ろうとすると

新しいプロジェクトで「Visual C#」→「Android」あるいは「iOS」の下にひとつだけプロジェクトがあります。この状態は、まだ Xamarin がインストールしていない状態です。

 

image

試しにプロジェクトを作って開くと、Xamarin のサイトからダウンロードせよ、というプロジェクトが開かれます。

image

Download ボタンを押して xamarin.com からダウンロードしてもよいのですが、ここは再び Visual Studio のインストーラ(vs_community_JPN)を起動して、改めてスイッチを設定します。

image

Xamarin をインストールする

「C#/.NET (Xamarin)」をチェック。UWP も作りたい場合は「ユニバーサル Windows アプリ開発ツール」もチェックしておきます。

image

Android が入るので Java も入りますね。Hyper-V の Android エミュレータも込みです。
この時点で「共通ツールおよびソフトウェア開発キット」を開いて

  • 「Android SDK セットアップ(API レベル22)」
  • 「Android SDK セットアップ(API レベル23)」

もチェックしておくと、後ろのほうにある Xamarin.Forms をビルドするときの不可思議なエラーがなくなります。ここではあえてチェックせずに進んで、わざと「ハマり」ますw

image

Xamarin がインストールできるとこんな状態になる。

image

「Cross-Platform」を選ぶと Xamarin.Forms を使える。

image

PCL でプロジェクトを作った直後

image

最初の Xamarin.Forms を動かしてみる

このままの状態で Xamarin.Forms をビルドして動かそうとするとビルドエラーになります。最初のテンプレートをダウンロードしてビルドしようとしただけなのに「何で動かないのこれ!?」と思うぐらい変な感じです。

image

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 の依存関係は以下のようになっています。

image

最新の 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 が入っていないので、これを入れます。

image

Visual Studio のインストーラーのほうに Android 6.0/5.1 がないのが問題じゃないかな…というか、良く見直せば「Android SDK セットアップ(API レベル22)」と「Android SDK セットアップ(API レベル23)」があるので、これにチェックを入れれば Android 5.1/6.0 が入りそうです。

image

この状態で、ひとまずエラーがなくなります。

Visual Studio Emulator for Android を使う

Android のエミュレータは、Hyper-V を有効にして Windows Phone と同じ感じで動くものをツあくとよいです。

どうせなので Android SDK 6.0 のものを選択してダウンロード。

image

実行すると、結構なスピードで動きます。

image

Google Play が入っていないこと以外は、だいたい実機と同じように動きます。逆に言えば、Google Play からダウンロードして試してみる、ってことをやる場合には実機か別のエミュレータを使います。

image

XAML はどのように書くのか?

Xamarin.Forms の売りは2つあります。

  • Android/iOS/UWP等の複数のプラットフォームの UI を一気に書けます。
  • XAML + MVVM で書けます。

複数プラットフォームの UI を共通化するのであれば、適当なコンバータを作れば UI の同時生成ぐらいはできるのですが、もうひとつの要素があわさっていることが重要です。UI の記述(この場合は XAML のコード)が「共通化」されたのであれば、それを内部的に動作さえるロジックも「共通化」できるだろう、という発想です。具体的には Model だったり ViewModel だったりするわけですが、現実問題としてはプラットフォームに依存した UI は共通化できないし、それぞれのプラットフォームごとに記述するしかないですよね。そのあたりも含めて、大まかなところは XAML で共通化させてしまって(ついでにロジックも共通になる)、別々なところはできるだけ小さくなるように設計をします。

で、もともとの Xamarin.Forms の UI コードが、コードに記述になっているので、どうせだから PCL に XAML を含めて書いてみようってのが次のステップです(これ自体がテンプレートで含まれてもいいと思うんだけど、含まれてない)。

image

これを使った例を後日。

カテゴリー: Xamarin パーマリンク