Xamarin.Android 基本プロジェクトからみるAndroid Studio(Java)との比較

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

前記事、「Xamarin.Android テンプレート(Blank App)」で紹介したとおり、Xamarin.Androidはプラットフォームライブラリを「薄くラッパー」したものになっています。 今回は、殆どの場合、最初の入り口となるであろうシンプルなプロジェクトで、VisualStudio(Xamarin/C#)とAndroid Studio(Java)の比較をしてみました。

2 プロジェクトの新規作成

(1)Android Studio

「Quick Start」の「Start new Android Studio Project」から新しいプロジェクトを作成し、「Add an activuty to Moble」で「Blank Activity」を選択すると、レイアウトファイル(xml)を使用した単一ビューのプロジェクトが作成されます。

CompAndroid001

プロジェクトのファイルツリーを見ると、主要な3種類のファイルが確認できます。 CompAndroid002

(2)Xamarin

新規作成から「Blank App(Android)」を選択すると、上記と同じくレイアウトファイル(axml)を使用した単一ビューのプロジェクトが作成されます。

CompAndroid003

ソリューションエクスプローラーで確認すると、主要なファイルは、Android Studioで見たものと殆ど同じになっています。

※名前は、C#らしく「アッパーキャメルケース」になっています。

CompAndroid004

それぞれのIDEのファイルツリーにおいて、主要ファイルに赤字で①〜③のナンバーリングをしましたが、以降、この3つのファイルについて比較してみることにします。

3 AndroidManifest.xml(①)

(1)Android Studio

AndroidManifest.xmlには、アプリケーションの各種情報が記述されており、apprication-activityには、最初に起動するActivityとして「MainActivity」が設定されています。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sin.app1" >
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

(2)Xamarin

XamarinのAndroidManifest.xmlでは、Activityについては何も記述されていません。 (起動Activityの指定は、次のMainActivity.csに定義されています。)

AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App1.App1" android:versionCode="1" android:versionName="1.0">
    <uses-sdk />
    <application android:label="App1" android:icon="@drawable/Icon">
    </application>
</manifest>

4 MainActivity(②)

(1)Android Studio

Activityクラスです。onCreate()が起動時に実行されるメソッドで、その中で、setContentView()を使用して、レイアウトとして「R.layout.activity_main」を使用するように指定しています。

MainActivity.java

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //・・・略・・・
}

(2)Xamarin

先のAndroidManifest.xmlで設定されていなかった、最初に起動するActivityは、ここの「Activity」属性で指定されています。「MainLauncher = true」が、その設定です。 なお、Xamarinでも、OnCreate()の中で、SetContentView()を使用して、レイアウトとして「Resource.Layout.Main」を使用するように指定しています。

MainActivity.cs

[Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity {
    int count = 1;

    protected override void OnCreate(Bundle bundle) {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);
        Button button = FindViewById<Button>(Resource.Id.MyButton);
        button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };
    }
}

5 activity_main.xml/Main.axml(③) レイアウトファイル

(1)Android Studio

レイアウトは、コードでもGUIでも編集できます。 CompAndroid005

(2)Xamarin

VisualStudioからも、GUIによる操作は可能です。 Xamarinでは、レイアウトファイルがaxmlになっていますが、中身はAndroidStudioのxmlとまったく同じ構造です。 (まったく同じより、XAMLの方が嬉しかったのですが・・・) CompAndroid006

6 まとめ

今回は、シンプルなプロジェクトを作成した際に生成されるファイルについて、2種類のIDEで比較してみました。 こちらも、iOSと同様にある種の法則を見つければ、簡単に変換可能だと思います。

Xamarin.Andoridを始めるにあたっても、日本語のドキュメントは殆ど無いのですが、Androidの入門書が十分活用できたりします。

7 参考リンク


Xamarin Developers (Android Getting Started Hello, Android)
初めての Xamarin.Android アプリケーション開発 - 入門ガイド
[Part1]Androidアプリの開発環境(前編)
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
Xamarin記事一覧(SAPPOROWORKSの覚書)