C#を使ってAndoridでHello World する

今回はC#を用いて、Android アプリを作成していきます。
（似たようなことが書かれた記事が既にあるため、今更感はありますが…）
Androidアプリで Hello Worldするだけならプロジェクトを作ってそのまま実行するだけで済むため、今回はもう少し動きを付けようかと思います。

##開発環境
window10
Visual Studio
android7端末（android10端末を使用したら実行できなかった…）

##フレームワークのインストール
一から説明するとなるとVisual Studioのインストールからということになりますが、インストールの手順は以前に書いた記事があるため、今回は省きます。
androidアプリ用プロジェクトを作成するとなると、それ用のフレームワークが必要になるため、Visual Studioインストーラーを起動してダウンロードします。
「ツール」「ツールと機能を取得」を押下して、Visual Studioインストーラーを起動し、「.NETによるモバイル開発」をダウンロード、インストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/dfda0562-fa88-3344-37c7-069ead859e2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/2f7274ee-8cd5-7640-1bf3-27065f2a0ce8.png)

##プロジェクトの作成
フレームワークのインストールが終わったら、プロジェクトを作成します。
今回作成するのは「Androidアプリ(Xamarin)」です。
androidのバージョンに関して、実機を使用する場合は、実機に合わせたバージョンを使用しましょう。（バージョンの縛りがいろいろあったかと思うので、うまくデバッグできない場合はいろいろ試してみると良いかと思います。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/cb706613-ab79-dd9b-b42e-0149361a15d3.png)

プロジェクトを作成したら、その時点でHello Worldができる状態になっています。
ファイル構成に関しては、「/Resource/layout/」下に .xmlファイルがあり、デザインを見ながら編集することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/8fae9ce4-c398-736d-84e6-533988dc0df5.png)

アプリに動きを付けたい場合は「MainActivity.cs」ファイルを編集するか、別の.csファイルを作成してロジックを作成します。

##デバッグ時の設定
デバッグの方法に関しては、エミュレータを使用する方法と実機を使用する方法があり、今回は実機を使用します。
エミュレータを使用する場合は、デバッグ時に上部の「Android Emulator」を選ぶと、PC内にandroidのエミュレータを作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/6ef09ccb-56f2-e447-82ac-66d1204a54fb.png)

実機でデバッグする場合には「開発者オプション」と「USBデバッグ」を有効にする必要があります。
調べるとすぐわかるため、細かく書きませんが、設定画面のビルド番号を複数回押下すると開発者オプションが変更可能になり、開発者オプション内のUSBデバッグをONにすると準備が整います。
個人的には、エミュレータを使用しようとすると1GBぐらいダウンロードする必要があり、動きも重い印象があるため、実機でデバッグする方が楽かと思います。

##動作の設定
今回はコーディングでボタン押下時のイベントを追加しようかと思います。
既存の状態ではボタンがないため、「content_main.xml」のデザイン画面を開き、下記の様にRelativeLayout内にボタンを作成します。

```content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout>
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />
</RelativeLayout>
```
作成したボタンに動きを付けたいため、「MainActivity.cs」に書き込みを行います。
`OnCreate()`がアプリ起動時に走るため、その中にボタンのClickイベントを設定します。
表示画面上のボタンオブジェクトを取得するには`FindViewById()`でボタンのidを指定してオブジェクトを取得し、.Clickイベントを設定します。
コードは下記の通りです。

```MainActivity.cs
    public class MainActivity : AppCompatActivity
    {
        /// <summary>起動時のイベント </summary>
        protected override void OnCreate(Bundle savedInstanceState)
        {
            //ボタンを取得し、イベントを設定する（ボタンのidとして設定されているbutton1を指定）
            Button button1 = FindViewById<Button>(Resource.Id.button1);
            button1.Click += Button1_Click;
            button1.Text = "ボタン";
        }

        /// <summary>"ボタン"クリック時</summary>
        private void Button1_Click(object sender, EventArgs e)
        {
            //通知出力
            Toast.MakeText(Application.Context, "click " + DateTime.Now.ToString(), ToastLength.Long).Show();
        }
    }
```

##実行
デバッグを実行すると、USBで接続しているandroid端末で今回作成したアプリが立ち上がり、動作を確認できます。実行結果は下記の画像の様になります。
<img width="200" atl="IMG_20210505_150537.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/3bb49443-5bfb-1b22-6c4d-9bbefe0adb2a.jpeg">

下記はボタン押下時です。
<img width="200" atl="IMG_20210505_150540.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/e6bbcf8a-cc69-7322-9b1f-bd7230e1fd39.jpeg">

因みに、スマートフォン上のアプリのロゴは下記の様な表示になります。
<img width="200" atl="IMG_20210505_150558.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/b55883ad-2b34-0fda-87d1-58d33a403e04.jpeg">

##おわりに
今回は自身で初めてスマートフォンアプリを作成しました。
androidアプリの作成ということならandroid studioでjavaを使えば良いという話になるのですが、筆者が所属している会社では、支給されているデバイスはiosで、社内でもandroidは使用されていないため、今回学習した内容を生かすということを考えるとjavaだと都合が悪いと思い、iosアプリもandroidアプリも作成できるC#について学び、記事にしました。
（筆者自身はandroid端末を四台も持っていますが、ios端末は会社支給の一台しか持っていません（笑））
Visual Studioを使用すればiosアプリも作成できるはずなので、いずれiosでも試そうかと思います。
また、せっかくスマートフォンアプリの作成方法について学んだので、今度はもっと複雑なロジックを作ってみようかと思います。

あと、android10 の端末でデバッグ実行しようとしたら、エラーが出て実行できなかったので、いずれこの問題は解決しようかと思います。