web-dev-qa-db-ja.com

C#開発者として、Java Androidを開発するためにJava $ ===を学ぶか、代わりにMonoDroidを使用しますか?

私はC#にかなり精通していると思います。それは私の現時点での選択の言語であり、基本的にall私の専門的な経験がある場所です。

それでも、 MonoDroid プロジェクトの存在に戸惑っています。私の理解では、C#とJavaはvery近いです。知っているなら、学ぶことができます。最初のAndroidアプリの開発を検討してきたので、私はJavaそれから、私が行くにつれてただ学ぶのです。

これは、Java Android SDKよりも機能が少ない可能性が高く、独自のAPIを学習する必要があるMonoDroidを使用するよりも意味がありません。 (.NET APIですが)とにかく、私は新しい言語(およびその中で非常に人気のある言語)を学び、それを何らかの形で体験する方がいいと思います。貴重なスキルを習得せずに、経験豊富なテクノロジーを使い続けるよりも。

たぶん私は、MonoDroidの平均的なユーザーの潜在的な可能性をひどく誤って伝えているのかもしれません。たぶんJavaと.NETで.NETを好み、.NETを好む人向けです。あるいは、おそらく(実際にはそうです)考えていない他の要因があるかもしれません。私はただ疑問に思って、なぜJavaを使用してAndroidのために開発するのではなく、MonoDroidを使用するのですか?

46
Dan Tao

有能なC#プログラマであれば、すぐに十分な数のJava Androidプログラムを書くことができますが、ではありません) point。これはコードの再利用の問題です。

Androidプログラムが人気で、ユーザーがiPhoneおよびWindows Phone 7のバージョンを求めている場合)から約6か月を考えてください。MonoDroidを使用したことがある場合は、アプリケーションのほとんどを再利用できます。 MonoTouch(Mono for iOS)とWindows Phone SDKを使用したロジック。Webベースのバージョンが必要なので、同じクラスライブラリをASP.Netプロジェクトに含めます。デスクトップバージョンですか?問題ありません。同じクラスライブラリがで動作します。 LinuxまたはOS X上のWindowsまたはMonoでのネット。

CまたはC++以外では、これらすべてのターゲットで同じコードを再利用できる他の言語は考えられません。

コメント内のいくつかの懸念に対処するための編集: .NetおよびMonoはできません完全なプログラムを記述して同じように使用できますどこでもプログラム。それらはあなたがsomeコードを共有することを可能にします、そしてすべてのクロスプラットフォームプログラミングのように共有されたコードの量はあなたが書いているプログラムのタイプと方法に依存しますUIとハードウェアコードをアプリケーションロジックから分離します。

ただし、AndroidアプリをJavaで記述した場合、どれだけiOSまたはWindows Phoneで再利用できますか?それが私が作ろうとしていたポイントです。私は既存のC#ライブラリに取り組んでいましたMono Android再実装するのにかかる時間よりもはるかに短い時間でJavaを知っていたとしても。 Monoのおかげで、2つの異なるモバイルプラットフォーム上のWebサイト、デスクトッププログラム、およびモバイルアプリ間で、変更されていない共有コードがいくつかあります。

私は、たとえ間接的であっても、Monoがすべてのモバイル開発状況に最適なツールであることを示唆するつもりはありませんでした。これはトレードオフですが、Monoの方がはるかに良い選択である状況があると私は固く信じています。

別の視点については、Jason Sの回答を参照してください(そして賛成票を投じてください)。

55
Kevin

これは一種の補足的な回答です。これまで回答で見落とされていたように思われるのは、実際にクロスプラットフォームであるものに関係しているためです。基本的にビジネスロジックであるXamarin自体によると、not UIまたはGPS、オーディオ、アドレス帳などのハードウェアコントロール。これらは、プラットフォームごとに具体的に記述する必要があります。 FAQエントリを参照してください MonoTouchまたはWindowsPhone 7アプリケーションを持っています。AndroidのMonoを使用して再ビルドして、Androidをターゲットにできますか?

Monoを使用すると、C#を使用してUIおよび電話制御コードを記述できますが、どのプラットフォームにも移植できません。 C#で記述できる場合でも、プラットフォームごとにUIと電話コントロールを記述する必要があります。どちらの方法でも、AndroidのUIコントロールの詳細と、Androidが電話リソースを処理する方法を学ぶ必要があります。

Monoを使用するには、Android APIを呼び出すMono APIを学ぶ必要があります。また、Monoが新しいAndroid機能を実装し、Androidのすべての機能が実装されることを期待する必要もあります。 C#がJavaより強力であっても、Android SDKを直接(Javaで)使用する場合よりも多くのことはできません。

C#からAndroidに直接移行する場合、C#は構文的にJavaに非常に類似しているため、Androidに関するC#開発者の学習のほとんどはAndroid APIの学習になります。

いくつかの考慮事項...

C#からAndroid

学習する必要がある

  • Android API
  • Java API:文字列、カレンダー、イベント処理など。

学ぶ必要はありません

  • Java構文:C#は非常によく似た構文です。

その他の考慮事項

  • プラットフォーム間でコードを再利用することはできません。
  • あなたとAndroid SDKの間に依存関係はありません。リリースされると、新しいAndroid機能を利用できます。
  • おそらくMonoよりもAndroidコードのサポートと例が多いでしょう。

C#からMono

学習する必要がある

  • Android:AndroidのUIとハードウェア制御機能を学ぶ必要があります。
  • Mono API:AndroidのUIとハードウェアで何かを行うには、MonoのAPIを呼び出す方法を学ぶ必要があります。

学ぶ必要はありません

  • Java APIと構文:C#で開発できます

その他の考慮事項

  • コードの再利用:UIまたはハードウェア制御コードがなく、純粋な「ビジネスロジック」であるC#コードを再利用できます。理想的ではありますが、このようにきれいに分離することは必ずしも容易ではありません。 UIまたはハードウェアコントロールを持たないコードの量を評価する必要があります。
  • 依存関係:Android APIを実装するMonoに依存しています。 Android APIリリースからの遅延がある場合や、一部のAndroid機能が実装されない場合があります。
  • 選択するドキュメントや例が少ない場合があります。
18
Jason S

私はそれの多くが利用可能なリソースに関係していると思います。

C#のsyntaxとJavaは似ているかもしれませんが、まったく異なるものを提供します。たとえば、標準のJava =ライブラリーは悪夢ですが、C#では非常に快適です。

13
Corey

新しい言語を学ぶ絶好の機会のようです。

C#からJavaは同じ概念に基づいているため、簡単です。JavaはC#のサブセットのようなものなので、学習する必要がありますいくつかのもの(プロパティやアセンブリなど)といくつかの新しい規則に慣れていますが、ほとんどの場合、それは非常に簡単です。

9
Martin Wickman

簡単な歴史の教訓-MonoDroidはMonoTouchから育った。当時はたくさんの意味がありました。残念ながら、Novellは売却され、Monoチーム全体が解雇されました。良い知らせは、ミゲルデイカザが資金を確保し、MonoTouch/MonoDroidを再構築するための新しい衣装を始めたことです。ですから、実際にローンチするまで、あなたは一種のリンボです。

2011年7月更新:Miguelの衣装がMono *スタック全体の権利を取り戻しました。それがイケながらそれを入手してください。

3
Wyatt Barnett