Dot42プロジェクトが新しい形式に移行(C#2 Java)

プロジェクトdot42



画像

dot42プロジェクトの主な目標は、Microsoft Visual StudioまたはSharpDevelopを使用してMonoインタープリターをインストールすることなく、C#言語を使用してAndroidアプリケーションを作成することです。 このプロジェクトは、2013年1月の技術プレビューの公開以来、モバイルソフトウェアの開発者から大きな関心を集めています。





主な機能であると同時にプロジェクトの基本的な問題は、コンパイルされたC#コード(ILコード)のJavaバイトコードへの変換です。これは、DavlikまたはART仮想マシン上のAndroidで実行されます。 このようなプロジェクトの開発とサポートには、コンパイルされたバイトコード形式の深い専門知識と、コンパイラとクロスコンパイラの作成とサポートの分野の強力な知識が必要です。 この分野の専門家の数は現在少ないです。



DEXに変換


DexでのILコードのトランスコーディングには多くの欠点がありますが、dot42プロジェクトの開発中に徐々に解消されます。 現在、Javaを追加して.Net SDKを拡張することが決定されました。 dot42チームは、プロジェクトの現在のステータスを分析するために、クロスコンパイルとソフトウェア変換の博士号のスペシャリストを募集しました。 彼の最初の仕事は、C#コードをJavaコードに変換する方法を決定することです。



基本的に、2つのアプローチがあります。



画像



バイトコードの変換とソースコードの変換



デバッグの問題


バイトコードをILからDexに変換する際にエラーが発生すると、Java仮想マシンがjava.lang.VerifyError例外をスローすることがよくあります 。 Javaインタープリターが、以前に検証フェーズに合格していないクラスをロードしようとしていることに気付いた場合、この例外がスローされます。 このコードでエラーを見つけることは、レストランのトイレでピッキングしながら夕食で台無しにされたものを判断しようとするようなものです。 この場合の典型的な例は、DEXコードはDavlik仮想マシンで正常に実行されますが、ART内でクラッシュすることです。

ソースコードの変換にはこの欠点はありません。Javaコンパイラはアプリケーションバイトコードの正しい位置を処理します。



実装実験


dot42チームがプロジェクトに新しい機能を追加する必要があると想像してください。たとえば、C#からの非同期/待機をサポートします。 この場合のバイトコードでのPoCでの作業は、ソースコードをC#からJavaに変換するときの同様の改善よりもはるかに困難で高価です。



コンパイラーを使用する


さまざまな仮想マシンおよびCPUアーキテクチャ用のコンパイラは、さまざまなコード最適化メカニズムを使用します。 C#コンパイラによって生成されたILコードは、スタックアーキテクチャを使用します。 一方、DavlikおよびART仮想マシンはレジスタモデルを使用します。 C#コンパイラによってコンパイルされたILコードには、Javaコンパイラに役立つ情報が含まれなくなりました。 対照的に、ソースコードを変換する場合、Javaコンパイラがより効率的なバイトコードを生成できるようにします。



ロズリン


MicrosoftがRoslynオープンソースC#コンパイラに豊富なコード分析APIを提供している今、dot42にはソースコードをC#からJavaに変換するための強力なツールがあります。



透明性のある開発


最終的に、dot42を使用する開発者にとって、ソースコードをC#からJavaに変換すると、プロセスがより透過的で保守可能になります。 このプロセスにより、一般的なEclipse IDEまたはAndroid Studioで既製のJavaコードを開くことができます。



プロジェクトのさらなる発展


dot42チームは、GPLv2ライセンスの下でコンパイラユーティリティをリリースする予定です。 GPLはdot42を使用して作成されたソフトウェアには適用されないことに注意してください。 したがって、プロジェクトのおかげで、開発者はC#を使用してネイティブのAndroidアプリケーションを作成できます。

ライブラリー実行コードは、Apache License 2.0の下でGitに既に投稿されています。 誰でもdot42プロジェクトの分岐を作成し、ILコードをDEXに変換するアプローチを拡張できます。

dot42を使用して商用アプリケーションを作成するために、ユーザーはProfessionalライセンスを必要としなくなりました。 次のアップデートでは、アクティベーションを削除する予定です。



dot42チームは、バイトコードコンバーターをソースコンバーターに置き換えようとしています。 開発中のすべてのユーティリティもGPLv2ライセンスを使用し、ライブラリ実行コードはApache License 2.0を使用します。



最後まで読んでくれてありがとう!




All Articles