Android開発用のC / C ++を知ることは重要ですか?


8

Java(C ++ / NDKなし)のみを使用して、高速で美しいAndroidアプリ(3D開発を含む)を構築することはできますか?

Android開発者の職位要件(求人)を探すと、C / C ++ / NDKの知識が非常に重要であることがわかりました。一部の企業では、C ++(OpenGL)のみを使用してテストタスクを構築する必要があります。


なぜあなた何かを知りたくないのですか?少なくとも便利なので、数日かけて学習することをお勧めします。
SK-logic

JavaでOpenGLを使用しようとしたことがありますか?それは本当に大変なことです。
スルタン

回答:


6

ほとんどの場合、Android用に開発するためにc / c ++は必要ありません。

Android NDKの概要によると

II。Android NDKの非目標:

NDKは、Androidデバイスで実行される一般的なネイティブコードを記述するための良い方法ではありません。特に、アプリケーションは引き続きJavaプログラミング言語で記述し、Androidシステムイベントを適切に処理して、「アプリケーションが応答しない」ダイアログを回避するか、Androidアプリケーションのライフサイクルを処理する必要があります。

ただし、既存のc / c ++ライブラリを使用する場合は、c / c ++が重要です。

例:Androidには組み込みのmp3エンコーダーはありませんが、オープンソースのlameライブラリを使用できます。

同じことが3D画像処理にも当てはまるかもしれません


4
それはグーグルからの誇大宣伝です- 私の電話で私が持っているすべての高速で派手なゲームはNDKで構築されています-自分を探し、アドオン検出器(元々は危険な広告ネットワークを表示するため)を入手し、開発者ツールキットのセクションを見てください。すべての優れたものがNDKで構築されていることがわかります。それがjavaが悪いからなのか、それとも最高の開発者がC / C ++を使用するためなのかは議論の余地があります。
gbjbaanb

2
@gbjbaanb:ゲームは(デスクトップとモバイルプラットフォームの両方で)多少特殊なケースです。確かに、モバイルプラットフォームでは、これらはより広範な特殊なケースです;-)
Joachim Sauer

@gbjbaanb:ほとんどの高速ゲームがc / c ++で開発されていると聞いて興味をそそる。これらのゲームはクロスプラットフォームですか?(つまり、AndroidとiPhoneに存在しますか?)
k3b

1
移植可能なアプリケーションを作成できる唯一の言語は、まだC ++です。それは単に事実です。一部のモバイルプラットフォームはJavaを使用していますが、CLRを備えているものもありますが、すべてが合理的に利用できるわけではありません。したがって、複雑なアプリケーションにはC ++コアが含まれます。その上、それはAndroid用のJava UIを持っているかもしれません。
Jan Hudec

3

Javaには多くのアプリケーションがあります。Javaでの開発はより速く、最近のデバイスは非常に強力であるため、アプリケーションが主にクールなユーザーインターフェイスであり、ネットから取り出された一部のデータに対して効率は問題になりません。世の中にあるアプリケーションの大半はこれです。したがって、C ++の知識がなくても、Androidアプリケーション開発の仕事を確実に得ることができます。

ただし、より複雑なアプリケーションにC ++を選択するのには、いくつかの非常に良い理由があります。

  1. 今日まで、C ++はすべてのプラットフォームに移植可能な唯一の言語です。一部のモバイルプラットフォームにはJavaがあり、一部にはCLI / CLR(.NET)がありますが、それらすべてで利用できるものはありません。C ++で移植可能なアプリケーションを作成することは多くの作業ですが、実行可能であり、多くの例で実証されています。
  2. Javaには、言語に組み込まれたメモリの非効率性があります。さまざまな比較を見ると、Javaでは、C ++の場合よりも同様のタスクに通常3〜10倍のメモリが必要です。したがって、メモリ内に大量のデータを必要とする処理を実行している場合、Javaは適切な選択ではありません(CLI / CLRを使用すると状況が改善されることに注意してください)。
  3. Android上のJVMであるDalvikは、HotSpotのような最高のJVMにかなり遅れています。したがって、実際のコンピューティングパワーを本当に必要とする何かをしている場合、JavaはAndroidには適していません。ただし、実際にはそれだけの電力を必要とするアプリケーションはほとんどありません。ほとんどのアプリケーションは、そこに座って親指をいじるだけで、ユーザーが何かをクリックするのを99%の時間待機します。そのようなアプリケーションでは、Javaで問題ありません(ほとんどの場合、Pythonでも問題ありません)。

最初の理由は断然最も重要だと思います。


1
私が間違っている場合は修正してください。ただし、NDKアプリでさえも、Androidデバイスで実行するためにDalvikにコンパイルする必要はありませんか?
Michael K

@MichaelK:ええ、そうです。ネイティブコードはネイティブマシンコードであり、Dalvikではありません。しかし、Javaの接着剤が少し必要で、Dalvikがそのためにロードされ、その接着剤を実行します(ネイティブパーツが共有ライブラリとしてロードされます)。最新のNDKは接着剤の必要性を大幅に減らしましたが、完全にかどうかはわかりません。
Jan Hudec

2

それはあなたのアプリがどの程度「ネイティブ」であると期待されるかに依存します。現時点では、エンドユーザーが要求する完全なUx / UIを提供するために、多くのアプリがネイティブである必要があるようです。HTML5とJavaベースのAPIの抽象化は、これを今後必要としないほど十分になるでしょうか?知るか :-)


1

C / C ++コード用に変更すると完全に機能しますが、Javaコードが変更されても自動的に再構築されません。Javaの変更は、エミュレーターまたはデバイスに送信されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.