SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

最新バージョン「Visual Studio 2017(Visual Studio "15")」特集(AD)

使う言語はC#のみ! Macアプリケーションはもちろん、Webアプリやスマホアプリも開発可能な「Visual Studio for Mac」登場

最新バージョン「Visual Studio 2017(Visual Studio "15")」特集 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

スマートフォンアプリケーション開発(2)

Androidアプリ

 続いてAndroidアプリを見てみましょう。XamApp1.DroidプロジェクトのMainActivity.csをダブルクリックしソースコードを表示します。

using Android.App;
using Android.OS;
using Android.Widget;

namespace XamApp1.Droid
{
    [Activity(Label = "XamApp1", MainLauncher = true, Icon = "@mipmap/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.Main);

            Button button = FindViewById<Button>(Resource.Id.myButton);
            
        (略)

 こちらもiOSと同じく、Javaを使ってAndroidアプリのコードを書いたことがある方であれば、ほとんどそのままであることがわかると思います。

  • Android.AppやAndroid.OSを使用することを宣言する
  • Activityクラスを継承してMainActivityを作成する
  • アクティビティ作成時に呼ばれるOnCreateメソッドを実装する
  • OnCreateメソッドの内容として、まず親クラスのOnCreateを呼び、SetContentViewでレイアウトリソースをセット、ボタンのインスタンスをIDから検索する

 特にJavaとC#は構文自体が似ているので、ぱっと見ではJavaのコードかと勘違いしてしまうほどです。ただ、C#らしく名前空間名やメソッド名の1文字目が大文字になっている、FindViewByIdメソッドがジェネリックを使用して型キャストを不要にしている、といった違いがあります。

 Javaでのイベントはリスナーを使って書きますが、Xamarin.Androidではイベントハンドラーメソッド(もしくはラムダ式)で記述します。MainActivity.csにも以下のようなラムダ式を使ったイベントハンドラーが記述されています。

button.Click += (sender, e) =>
{
    button.Text = $"{count++} clicks!";
};

 もちろん、Androidのレイアウトファイル(.axml)の編集にも対応しています。これもソリューションエクスプローラーの.axmlファイルをダブルクリックすればデザイナーが表示されます。

axmlファイルのデザイナー
axmlファイルのデザイナー

 インテリセンスやコードスニペットといったコーディング支援機能も、もちろんiOSと同様に使用できます。

ポータブルクラスライブラリ(PCL)

 さて、ポータブルクラスライブラリ(PCL)は非常に強力な機能であるとすでに述べましたが、そのPCLについて紹介しましょう。

 テンプレートで自動作成されたXamApp1プロジェクトはPCLプロジェクトです。PCLは文字通りポータブル(移植可能)なクラスライブラリのことで、PCLプロジェクトに含まれるクラスはXamarin.iOSとXamarin.Androidの両方から呼び出し可能となります。そのため、iOSとAndroidの両方で使用する機能をPCL内に実装すれば、iOS用とAndroid用に同じコードを書く必要がなくなります。

Xamarinのポータブルクラスライブラリ
Xamarinのポータブルクラスライブラリ

 特にMVVM構成(Model-View-ViewModel)と組み合わせると非常に強力で、iOS、Androidプロジェクトにはデバイスに依存するビューを実装し、それ以外の部分(モデル・ビューモデル)はPCLプロジェクトに格納するようにすると、多くの部分を共通化することができます。MVVM Light ToolkitやMVVMCrossなどのMVVM支援ライブラリはすでにXamarinに対応しているので、これらを利用することも可能です。iOS版とAndroid版両方のアプリを作成する際、PCLは非常に大きなメリットとなります。

アプリの実行・デバッグ

 iOSもAndroidも実機、もしくは、シミュレーターでアプリケーションを実行することができます。

 画面上部で実行するプロジェクトやデバイスを選択し、実行ボタンをクリックすれば対象のデバイスでアプリが起動します。

デバッグ実行
デバッグ実行

 iOSの場合、Xcode付属のiOSシミュレーターが使用されます。Xcodeでシミュレーターを追加すると、Visual Studio for Macでも使用できるようになります。実機のiOSデバイスもXcodeで認識できていれば、Visual Studio for Macでも選択できるようになります。

 Androidの場合、Android SDK付属のAndroidエミュレーターが使用されます。Android SDKのAVD Managerでエミュレーターを追加しておくと、Visual Studio for Macでも使用できるようになります。実機のAndroidデバイスも接続方法はAndroid SDKを使用した場合と同じです。Windowsの場合は機種ごとにADB USBドライバーをインストールする必要がありますが、Macの場合はUSBで接続するだけでデバッグ可能になるようです(機種によって例外もあるかもしれません)。もちろん、Androidデバイス側の[設定]-[開発者向けオプション]をオンにし、USBデバッグを許可、[セキュリティ]の提供元不明のアプリケーションのインストールを許可といった設定は必要です。

 デバッグ中はブレークポイントの設定や変数値の確認・変更など、デバッグ作業に必要なさまざまな操作をおこなうことができます。

デバッグ
デバッグ

 上図はボタンのクリックイベントの中にブレークポイントをセットし、ローカル変数やプライベート変数の値を表示しているところです。表示だけでなく値の変更も可能です。イミディエイトウィンドウでは「count += 5」のようなC#の式を使って変数の値を変更したり、「count.ToString("x")」のようにメソッド呼び出しを実行したりすることも可能です(ToString("x")は16進数表記で文字列化です)。

 なお、Xamarinアプリケーションは基本的にネイティブアプリケーションです。Xamarin.iOSではデプロイ前にコンパイルされて完全なネイティブアプリケーションになります。Xamarin.AndroidではAndroid OS上に.NETランタイムとJavaランタイムが横並びの関係で動作しています。

Xamarin.iOSとXamarin.Androidの構造
Xamarin.iOSとXamarin.Androidの構造

次のページ
WebアプリケーションとMacアプリケーション

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
最新バージョン「Visual Studio 2017(Visual Studio "15")」特集連載記事一覧

もっと読む

この記事の著者

青柳 臣一(アオヤギ シンイチ)

Twiter: https://twitter.com/ShinichiAoyagi中学生のころにプログラミングの楽しさを知り、それ以来趣味として仕事としてプログラミングに関わるようになる。23才のときに株式会社ディーバを設立。CADソフトウエア、給水設備監視システムなどのオリジナルソフトの開発、また、さま...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9956 2017/05/09 22:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング