技術顧問の増田です。システムエンジニアの会社にプログラミングを定着する役目を担っていますが、さて、プログラミングの初歩から学んでも面白くないし、実践的ではない。程よく、プログラム言語(PHPでもJavaでもC#でも)を扱えるのであれば、もうちょっと「習うより慣れろ」方式がいいんじゃないかと思って、社内研修を始めています。
その社内研修の御裾分けを皆様へ…というわけで、「C#で自作Androidアプリを作ろう」目標にして、何回か技術ブログを書いていきます。
バックナンバー
- 第1回 C#で自作Android アプリを作ろう:出帆準備編
- 第2回 C#で自作Android アプリを作ろう:試験運用編
- 第3回 C#で自作Android アプリを作ろう:時計アプリを作る
- 第4回 C#で自作Android アプリを作ろう:RSSを取得してリスト表示
- 第5回 C#で自作Android アプリを作ろう:Web APIで路線情報を表示
- 第6回 C#で自作Android アプリを作ろう:Twitter APIでファボリストを取得
- 第7回 C#で自作Android アプリを作ろう:簡易アンケートを作ろう
- 第8回 C#で自作Android アプリを作ろう:カメラ機能を使おう
Xamarin とは何か
スマートフォンの Android アプリと言えば、Android IDE を思い浮かべる方も多いでしょうが、今回は Xamarin という C# で Android アプリを書ける開発環境を使っていきます。Microsoft が Xamarin 社を買収して流行りといえば流行りなのですが、私自身が Microsoft MVP なのと Xamarin 本を書いている関係上、ええ、強引にでも Xamarin です 🙂
でもって、Xamarin とは何か…というのは、エクセルソフト社の田淵さん(この方も Microsoft MVP ですね)が、10分間で分かった気になれるXamarin概要 – Build Insider という記事を書いているので、詳しくはそちらを参考にしてください。
大まかに言えば、「C# で Android アプリが作れる」というそれだけです。ネイティブの Java を呼び出せるとか、API をそのまま使うからスピードが速いとか、中身が Mono の .NET Framework だから非同期処理(async/await)とかリスト関係のクラスライブラリが豊富だとか、そういうものもありますが、まあ、それは実際に Android アプリを作っていく中で解説していきましょう。
Xamarin.Android を使う
Xamarin では、Android と iPhone(iOS)のアプリを共通で作れる「Xamarin.Forms」があります。画面の作成を XAML で作って、内部ロジックを MVVM パターンで作って、Android と iOS の動作を共有できる PCL で同時リリースできるよというのがウリなのですが、ここでは、Xamarin.Android を使います。
というのも、当面の目標として、
- 社内で使えるようなスマホのアプリを自作する
- 業務に影響ない程度にさっくり覚えられる
ぐらいに留めておきたいので、Android/iOS の同時作成というよりも、Android アプリをさっくりと作れる、ところに重きを置きます。まあ、Xamarin.Forms のほうのサンプルも並行に用意していきたいのですが。
幸いにして…というか、利便性を考えてわざとそうしてあるのですが、Xamarin.Android には Android を Java で作るときと変わらないクラス名やメソッド名が用意されています。このため、別途 Xamarin.Android 本を読まなくても、Android の本を買ってきて提供されている Java のクラスを参考にしながら、C# で Android アプリを書くことも可能になります。実際、私も Android の本を何冊か持っています(Java では書いたことがないんだけど)。
開発環境を整える
開発環境としては、Windows 10(たぶん、Windows 7 などでも可能です)と Visual Studio 2015 があれば大丈夫です。Visual Studio 2015 Community Edition でも使えます。
弊社の優さんが、インストールと日本語化の記事 Visual Studio 2015のインストール 日本語化 を書いているので、参考にしてください。
Visual Studio をインストールするときに「クロスプラットフォーム モバイル開発」→「C#/.NET( Xamarin 5.1.1)」にチェックを入れてインストールすると、Xamarin を一緒にインストールすることができます。
Community Edition のほうは、プロジェクトを作るときに Xamarin をインストールする(ハズ)なので、それに従ってください。
Android SDK のあれやこれやをインストールするので結構時間がかかりますが、正常にインストールができると、
「ファイル」→「新規作成」→「プロジェクト」で、新しいプロジェクトを作成するときに、「Visual C#」→「Android」という項目が出てきて、「Blank App (Android)」が選べるようになります。
Android アプリのひな型が作成されるので、ソリューションエクスプローラーから「Resources」→「layout」→「Main.axml」を開けば、Android IDE ではおなじみなデザイナが表示されます。
デザイナの下のほうにある「Source」タブをクリックすると、Main.axml を直接編集できるようになります。
プロパティのほうは、あまり使いやすい形にはなっていないので、直接 axml ファイルを編集するか、プロパティをアルファベット順に並べ直して各コントロールの設定をチェックすることをお勧めします。このあたりは、Xamarin Studio で作ったほうがやりやすいのですが、今回は Visual Studio のほうに統一しておきます。
同じように形で、iOSアプリ(iPhone/iPad)も作れるのですが、それは別の機会に譲ります。
実行/実験環境を整える
Android アプリを開発環境として、Visual Studio + Xamarin.Android の組み合わせができあがったので、今度は実行/実験環境を整えていきましょう。
Android アプリを試験するには、実機を使うか、エミュレータを使います。実機の場合は、今、使っている(あるいは余っている?)Android スマートフォンを使うのも良いでしょうし、無い場合は、Amazon の Fire タブレット を使ってもよいでしょう。OS が若干古い(Android 5.1.1 相当)のですが、Bluetooth 4.0 も使えて非常に安く手に入ります。
エミュレータは、いくつか選択肢があります。
- Android SDK の標準 Android エミュレータ
- Xamarin Android Player
- Hyper-V 上の Android エミュレータ
標準の Android エミュレータは、Android SDK と一緒にリリースされるのでバージョンが上がったときに即使えます。即使えるのですが、若干動作が鈍く、コーディングをして実験、コーディングをして実験、を繰り返そうと思うとかなり大変です。以前のよりもだいぶん早くなった感じはあるのですが、スピードに不満がでてきます。
これを改善しているのが、Xamarin Android Player なのですが、何故か私の環境では途中で立ち上がらなくなることが多く、以前は使っていたのですが、現在は Hyper-V のエミュレータを使っています。ちなみに Xamarin Android Player のほうは、Xamarin Android Playerを使うには? – Build Insider を参考にしてください。
Hyper-V の Android エミュレータは、その名の通り Hyper-V 上で動くので、VMWare などの仮想環境と競合してしまいます。私自身も仮想環境を使っていますが、このために Hyper-V のほうに揃えてしまいました。
Hyper-V 版のほうは、
- 標準エミュレータよりも若干リリースが遅い
- Google Play が使えない
という欠点がありますが、標準エミュレータよりも高速で安定して動いているので、これを使っています。Google Play が使えないので、(たしか)マップ系のものは動きません。そのような場合は、標準エミュレータを使うか、実機を使うようにしています。
当然のことながら、実機のほうが非常に早く動きます。ゲームアプリやグラフィックを多用する場合には、Android 実機で動かしたほうがよいでしょう。
Hyper-V 版の Android エミュレータをインストールする
Windows で Hyper-V の設定をした後に(Hyper-V の設定自体は、Hyper-V をインストールして仮想マシンを作成する を参考にしてください)、Visual Studio で「ツール」→「Visual Studio Emulator for Android」を選択すると、Android のエミュレータを選択する画面がでてきます。
この中から、これから開発するための Android のバージョンや機器を選択してください。
私の場合は、Amazon Fire で動かすために 4.7インチの Lolipop(5.1.1) をインストールして使っています。これをインストールすると自動的に Visual Studio のツールバーに実行先が選択できるようになります。
Android 実機で動かすための準備
実機で動かすための準備もしておきましょう。詳細は、Xamarin から Android の実機を動かす | Moonmile Solutions Blog を参考にして貰うことにして、簡単に手順だけを示しておきます。
- Android 実機を USB 接続する。
- 「ツール」→「Android」→「Android Adb Command Prompt」でコマンドラインを開く
- adb start-server で、サーバーを起動する
- adb devices で、接続している Android 実機を確認する
ここで、Android 実機に接続できていれば大丈夫です。でてこない場合は、
- Android 実機が「開発者向けオプション」になっていることを確認
Android端末を「デバッグモード」(USBデバッグ)に設定する | AndMem あたりを参考にしてください。 - Android SDK Manager で、Google USB Driver が入っていることを確認
(今の Xamarin だと自動でインストールされるはずです) - デバイスマネージャで、実機が認識されていることを確認
このあたりは、ノウハウがいくつかネット上に散らばっているので調べてみてください。ひと昔前の Android スマートフォンだと、結構接続が大変だったのですが(ドライバーを自分でインストールしないといけないなど)、最近のものは大分楽になっています。
サンプルを動かす
本連載で使っているサンプルコードは、全て GitHub moonmile/sg-xamarin-sample からダウンロードができます。
その中にある、sgClock のプロジェクトを実際に動かしてみましょう。
Xamarin などの準備はできているはずなので、Visual Studio 2015 で sgClock.sln を開いて、
エミュレータを実行させれば ok です。初回は、
- C# コードのビルド
- エミュレーターの起動
- Xamarin.Android のアセンブリをエミュレーターに転送
のようになかなか時間が掛かるのですが、こんな風に Hyper-V 版の Android エミュレーターで動けば成功です。
同じように、USB ケーブルで接続している Android 実機にも転送&実行することもできます。
実機に転送したものは、Google Play などからインストールしたときと同じようにホームに sgClock のアイコンが作られるので、それをタップすると起動できるようになります。
そう、つまりは
自作のアプリを、自分の実機にインストールして、自分専用のガジェットとして使う。
ことが可能になるのです。勿論、誰かが作ったコードを Visual Studio でビルドしてインストールしてもよいし、ちょっとだけ自分用にカスタムしてインストールしてもよいのです。
ここで紹介した sgClock は単純に、時刻と画像を貼り付けただけの Android アプリですが、この時刻のフォントや画像を変えてみましょう…ってのは次回になります。ので、時間のある方は引き続き 🙂
第2回 C#で自作Android アプリを作ろう:試験運用編