2011-12-06 10 views
9

私は現在Androidアプリケーションを開発するためにMonodroidを使用しています。私は携帯電話のアプリにかなり新しいですので、カップルの事の上に混乱しています:定義によってアンドロイドライブラリですAndroidアプリのC#.dllライブラリ

  1. 何?私はMonoテンプレートを使ってアンドロイドライブラリを作成します:Android Class LibraryのMonoを作成する=>コードを書いて.dllにビルドする=> Visual Studioのエミュレータで実行するとエミュレータで正常に動作します。しかし、.dllファイルはアンドロイドライブラリですか?または、エミュレータで作業する前にモノで変換され、 'REAL'アンドロイドライブラリがJARである必要がありますか?

  2. このアプリケーションを作成するためにC#で書かれた定義済み.dllを直接使用できますか?私はMonoでそれを自分のアンドロイドアプリで直接参照して試してみました。それはビルドされていますが、エラーはありません。しかし、エミュレータがこのアプリケーションを実行すると、(まだエラーはありません)固まってしまいます - C#.dllをAndroidアプリケーションプロジェクトに使用する正しい方法は何ですか?

私は誰もが任意のヒントを提供することができますので、もし問題を参照して、このライブラリを動き回ることができないC#とアンドロイドの間とモノに関するそれでも私を読んだ後、リンクを議論かなりカップルのトピックがあります実現/思考は以下のようになり、ほとんどの

答えて

3
  1. ムーンライト(シルバーのMonoの実装)に基づいているMono for Android profileに対してコンパイルされた生成DLL、理解。実行時に、.NETコードはpart of your applicationとして実行されるMonoランタイムに対して直接実行されます。 .NETコードがJava側(Java.Lang.Objectなど)から何かをサブクラス化する場合、Android用のMonoはランタイム間の通信を処理するためにcallable wrappersを生成します。
  2. 技術的には、通常の.NET DLLをMono for Androidアプリケーションで使用できますが、お勧めしません。 Android用のMonoによって公開されるプロファイルは、完全な.NETフレームワークのプロファイルよりもずっと小さく(Silverlightのプロファイルと完全に同等でもありません)、DLLがAndroid用Monoにはないメソッドを参照する場合、アプリケーションがクラッシュします。代わりに、アプリケーション用の別のクラスライブラリを作成し、ファイルリンクを使用してプロジェクト間でソースファイルを共有することをお勧めします。私のblog post hereにはそれを行う方法の例が含まれています。
+0

ここであなたの答えをありがとう!したがって、.NETコードはMonoランタイムに対して実行されるので、dllはAndroidアプリケーションにのみ使用でき、Monodroid SDKがインストールされていることを意味します。私の主な目的はアプリケーションではなく、いくつかのC#ライブラリをアンドロイドライブラリに移植してアンドロイドの開発者に提供することです。その場合、アンドロイドと互換性のあるdllを作成したとしても、Monodroidにはランタイムラッピング? – lynnyilu

+0

これは間違いありません - Android用MonoでコンパイルされたDLLは、Android用Monoで構築されたアプリケーションにのみ役立ちます。 –

+0

ライブラリを開発者に提供したい場合は、そのプラットフォーム用にdllをコンパイルする必要があります。あなたがサポートしているクラスのみを使用する限り、複数のプラットフォームをサポートすることができます。理論的には** Math.Round **はすべてのプラットフォームで全く同じように動作します。これは、Mono実装がすべての入力に対してMicrosoft .NET実装と一致することを前提としています(単体テストを行ったためテストされる可能性が高い)。 –

関連する問題