アジョブジ星通信

日常系バンザイ。

dot42 - Xamarin じゃない C# for Android

明後日からテストです。今日から本気出す予定(現在 23 時)です。

今日は面白そうなものを見つけてきたので紹介。

Use .NET Framework API

The most common part of the .NET Framework API is supported.
.NET Framework types compile to a minimum amount of
DEX code that invokes the Android framework.

100% Android - No Runtime

Your C# code compiles to Android deployable code (DEX)
without requiring a runtime such as Mono.

https://www.dot42.com/

こいつは頭がイカれてやがるぜ

どういうことなの

上の紹介文の通りですが、 Mono みたいな JIT コンパイラによって実行するのではなく C# を dex(Android 向けバイトコード)に直接コンパイルして実行してしまおうなどという頭のおかしいプロジェクトです。

でも、お高いんでしょう?

個人利用・無料でのストア公開なら無料、それ以外なら 1 人 399USD がメジャーバージョンごとにかかります。

https://www.dot42.com/licensemodel.aspx

ダウンロード

https://www.dot42.com/download.aspx で名前とメールアドレスを入力すればダウンロードできます。その後メールが届くので、インストール中にメールをチェックしてアクティベーションキーを取得してください。

インストール






ご注意ください。

Hello, world

Visual Studio 2013 integration をインストールするとこんな感じのプロジェクトテンプレートができます
f:id:azyobuzin:20141203233527p:plain

プロジェクトを作成すると Android プロジェクトの設定を行います。この画面 Java っぽい。
f:id:azyobuzin:20141203233638p:plain
Certificate 欄に apk 署名用の秘密鍵をいれるみたいですが、 Eclipse でいつも使ってるファイルを入れてみても Incorrect password とか怒られたのでメダルみたいなボタンを押して新しく作りました。

で、生成される Hello, world コードがこちら。

using System;
using Android.App;
using Android.Os;
using Android.Widget;
using Dot42;
using Dot42.Manifest;

[assembly: Application("dot42Application2")]

namespace dot42Application2
{
    [Activity]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstance)
        {
            base.OnCreate(savedInstance);
            SetContentView(R.Layouts.MainLayout);
        }
    }
}

これをビルドすると、なんと驚きの 10KB の apk が生成されます。というのもこのコードではまったく .NET のライブラリに依存していないので、書いたコード以外に追加されるのは多少のヘルパーのみです。ついでに Xamarin.Android のプロジェクトをなにも弄らずビルドすると 3.3MB になります。

では、 .NET のライブラリを使えば一気にサイズ増えるだろ~などと考えつつ、 List<T>ArrayAdapter<T> みたいなものを作って ListView にぶち込んでみるか~とやってみた結果… 13KB 。。。やばいぞこれ。

デバッグ

f:id:azyobuzin:20141203235005p:plain
イミディエイトウィンドウ以外はイケる。強い。これをよく見ると List<T> も実態は Java のクラスなのがよくわかります。

他にも

デザイナーこそないですが、レイアウトの XML では IntelliSense が使えるし、メニューの XML ではデザイナーがあります。

あと、 Java のライブラリで実装されるものは極力そっちが使われる仕組みになっている上に、使われていないメンバーはコンパイルされないのでかなりサイズを削ることができます。

残念ポイント

普通の .NET ライブラリを参照に入れられない

試しに CoreTweet 入れようとしたら拒否られた。

abstract メンバーが virtual 扱い

実行時エラーになるまで気づかない。

サンプルのインストールが終わらない

まとめ

非営利利用なら Xamarin より制限少なくて、しかも apk サイズを縮小できて結構おいしいかも。ただ、 CLI 上で動いてるわけではないので、挙動の違いで躓く可能性は高いです。

ていうか日付変わってるんですけど!!