★ The Tsuchinoko News 2 (つちのこ通信2) ★

重要な話から、どうでもいいことまで。ほとんど役に立たないことを書き連ねています。

【PC】MONO for Android

f:id:tsuchinoko118:20120924100208p:image:left:w320以前から Linux で .NET Frameworkが動くという MONO が気になって仕方がなかったのだが、そういう仕事もないし(笑)超多忙だったので、触れることなく今まで来ている。
そんな昨今、Eclipse の遅さというかクセに、なかなか馴染めず他に何か良いIDE(開発統合環境)はないのかと探していると、Visual Studio 2010 で Android アプリが開発できて、.NET と C# が利用できるという何ともアクロバティックな「MONO」があると聞いて驚いた。
さっそく無料お試し版をインストールしてみると、なるほど確かに新規プロジェクトに「MONO For Android Application」が現れて、Visual Studio ライクなスタートが可能になった。
.NET と C# で開発可能ということではあるが、Android アプリなので、Android SDKを使うことには変わりがなく、インストール時に Java も同梱だったりするので、いったいどんな感じなのか一抹の不安を感じつつ、まったく想像不能だったが、テストコードを書いてみて「なるほど!」と笑えた(笑)

以下のような JavaコードをEclipse で書いて実行すると「押す」ボタンが出てきてタップする(押す)と、押したとトーストが表示される。

package AndroidApplication1;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class Activity1 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Test
        LinearLayout layout = new LinearLayout( this );
        layout.setOrientation( LinearLayout.VERTICAL );
        setContentView( layout );
        
        Button button2 = new Button( this );
        button2.setBackgroundColor( Color.argb( 0xff,0xff,0xff,0xff ) );
        button2.setTextColor( Color.argb( 0xff,0,0,0xff ) );
        button2.setText( "押す" );
        layout.addView( button2 );

        button2.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				testToast();
			}	
		});

    }
    private void testToast(){
    	
    	Toast.makeText( this,"押した",Toast.LENGTH_LONG ).show();
    }
}


これと全く同じものを MONO for Android = Visual Studio 2010 で書いてみると

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Graphics;

namespace AndroidApplication1 {
    [Activity( Label = "AndroidApplication1",
     MainLauncher = true,Icon = "@drawable/icon" )]

    public class Activity1: Activity {

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


            //Test
            LinearLayout layout = new LinearLayout( this );
            layout.Orientation = Orientation.Vertical;
            SetContentView( layout );
            
            Button button2 = new Button( this );
            button2.SetBackgroundColor( 
                              Color.Argb( 0xff,0xff,0xff,0xff ) );
            button2.SetTextColor( Color.Argb( 0xff,0,0,0xff ) );
            button2.SetText( "押す",TextView.BufferType.Normal );
            layout.AddView( button2 );


            button2.Click += delegate {
                testToast();
            };

        }
        public void testToast() {

            Toast.MakeText( this,"押した",ToastLength.Long ).Show();

        }

    
    }

}

となる(笑)

.NET で C# だからメソッドやプロパティの先頭が大文字になっていたりイベントの追加がいかにも .NET と C#っぽい(笑) ものすごく微妙だが構文に差がある(笑)
ただ .NET なコードなのかというと、見てわかる通り、そこは Android SDKなので、お作法はJava+AndroidSDK のままなのであったりする(笑)
ものすごく微妙だ。

筆者は Eclipse の画面エディタがイマイチしっくり来ないから、と、いつもレイアウトはコードに直接書き込んでいる。Visual Studio の画面エディタが(優れているとは言わないが)Android アプリ作成時に使えればと、期待していたが、それはなかった(笑)
MONO for Android には画面エディタがついていないのだった。

XMLを書くときもどうするのかイマイチよくわからなかったが ある特殊な書き方のクラスで書けるようだ。

はてさて、この違い。
イマイチ便利なのかどうかがよくわからない(笑)

ただエディタとして考えたときに Eclipse だと画面が狭いと感じていたり、アシスト機能がイマイチで、重くて遅いと思っていたりするので、手慣れた Visual Studio で Android アプリが開発できるメリットはある。
また Eclipse+Java よりも、C# で書いた 既存のソース群が共用できるのは大きいかも知れない。

はたまた、このときはVisual Studio で C#やBASIC。あのときは Eclipse で Java と、切り替えしまくるよりも統一された環境で C# を書けるというメリットは大きい。
あまり詳しく調べていないが Windows Phone や iPhone/iPad なんかもつくれるそうで、このあたりは大きいかも知れない。

f:id:tsuchinoko118:20120924100256j:image:right:w260企業向けだと 999USドル。実際に当社のような弱小零細ソフト屋だと Professional版でいいのだが、それでも 399USドルする。高いか安いか非常に微妙なところだったりもする(笑)

筆者的には、どうせ Androidの作法で書かねばならないので Android に関しては Eclipse+Java というスタンスでも十分な気もするが、将来的には(どうなるのかわからないが)、統一環境で使い回しもできて、ソース管理も一括で行えるとなると、MONO for Android の価値は十分にあるようにも思う。微妙だ(笑)

短気な筆者は、異様に遅いエミュレーターも気にならない。Eclipse+ADBでも遅いと思っていて、どうせ実機テストしかしないのだ(笑)
また、Android SDK に対しなんというかしょっちゅう仕様変更されたり、書いてあるのにまともに動かないことも多く、どうもソース的に洗練さが足りないように感じていることもあり、きれいにC# で書けるならこっちの方がいいなと思っていたりもする(笑)
ただ最近 Visual Studio 2012 が出てきたことと、Android の今後の動向について少し懐疑的に思っている(これはAppleとの訴訟対決の他にも Windows Phone 8 の台頭を気に掛けていることによる)筆者なので、はてさて買うかどうか、となると、これまた微妙(笑)