web-dev-qa-db-ja.com

「C / C ++でプログラムすることを単に好む」ので、なぜAndroidアプリをC / C ++で書かないのですか?

Updated(明確にするため、あいまいさを減らすため):

Androidアプリをいじくりまわします。私はNDKを使用してC++で書くことを計画していました(私はC++でより多くの経験があり、Javaを好むので) Android NDKページ で以下に出くわしました:

アプリに不可欠な場合にのみNDKを使用してください。C/ C++でプログラミングすることを好むため、決して使用しないでください。

仕事に合っている限り、好きな言語を使うべきだという印象を受けました。誰かがAndroid開発にC/C++を使用しないことが非常に推奨される理由を説明できますか?


オリジナル:

モバイルアプリ、特に現在の携帯電話のOSであるAndroidをいじり始めます。アプリをC++(または少なくともコアで作成してからJavaでラップするかどうか) )は許容可能なオプションでした。

ある程度の経歴はありますが、私はコンピューターサイエンスを専攻しており、3つのC++コース(イントロ、インターミディエイト、OOP、春にSTLコース)と1つのJavaコース(中級)のみを受講しています。このため、私はC++に慣れており、JavaよりもC++を好みます。 Android NDKページ で以下に出くわしました:

Androidでネイティブコードを使用しても、通常、顕著なパフォーマンスの改善は得られませんが、常にアプリの複雑さが増します。一般に、アプリに不可欠なNDKのみを使用する必要があります。C/ C++でのプログラミングを好むため、決して使用しないでください。

  • 私はあなたが仕事に合った言語とあなたがよく知っている言語を使うべきだという印象を受けていました
  • JavaなどではなくC++をサポートするiOSなどの別のモバイルプラットフォームにアプリケーションを移植したい場合があります。
  • Javaは高レベル言語であるため、開発を高速化する必要がありますが、ほとんどすべてを再学習する必要があるため、開発が遅くなると感じています(言語のクラスを1つしか取っていないため)

どんなアドバイスでも大歓迎です。

追伸:このテーマに関する回答の多くは数年前のものであり、Android 2.3以降で完全なネイティブアプリの開発を可能にするNDKについて言及しているフォローアップ回答はほとんどありません。

79
Logan Besecker

このように考えてください。 Java SDKを使用して、開発者が利用できるAPIの100%を活用する完全に機能するアプリケーションを構築できます。 (APIの観点から)SDKで実行できないNDKでできることは何もありません。NDKはより高いパフォーマンスを提供するだけです。

今度は逆に見てください。 NDKでアプリケーションを100%作成することを選択した場合でも、完全に機能するアプリケーションを作成できますが、アクセスできるフレームワークAPIの数には制限があります。 Androidフレームワークのすべてがネイティブレイヤーでアクセスできるわけではありません。ほとんどのAPIはJavaのみです。それは、すべてのAPI YOUがNDKで利用可能ではないかもしれないということではありませんが、APIが公開されているALLの近くではありません。

これを超えて、NDKはプラットフォーム固有のコードを導入し、ディストリビューションのサイズを拡大します。サポートするデバイスアーキテクチャごとに、ネイティブコードを.soファイル(armv5、armv7、およびx86用の1つ)に組み込み、すべて同じAPKにパッケージ化する必要があります。この実行可能コードの重複により、アプリケーションを配布するときにアーキテクチャごとに個別のAPKを構築するタスクを引き受けない限り、アプリは3倍のサイズ(つまり「ファットバイナリ」)になります。そのため、APKのサイズを大幅に大きくしたくない場合、展開プロセスはもう少し作業になります。

繰り返しになりますが、これはあなたが選択したことを行うことを禁止するものではありませんが、GoogleがJavaをコードの大部分と最も抵抗の少ないパスの「推奨」方法と説明する理由を指摘しています。ドキュメンテーションがそのように表現されている理由を明らかにすることを願っています。

98
Devunwired

人生で1つのアプリのみを開発する場合は、NDKを使用してください。

あなたの生涯に複数のアプリケーションを開発するつもりでAndroid開発を学ぶことを目指している場合-そしてそれらすべてを適切にサポートできるようにしたい場合-あなたは長い間良くなる可能性が非常に高いですJavaを学習し、代わりにAndroidのJava SDKを使用する場合に実行します。

23
Isaac

Kingのプログラマーは、ゲームロジックにC++を使用しています。そして、彼らは離職率でうまく判断しているようです。

私の経験では、C++は問題解決者用であり、Javaは問題回避者用です。私はどちらの言語も大好きですが、C++は、優れたコードを作成するときに非常に有益です。ただし、そこにたどり着くまでに少し時間がかかる場合があります。

データサイエンティストにもC++をお勧めします。通常は、たとえばPythonまたはRで仕事をやります。言語の天才。それが、私が決してしたく​​ない理由ですnotそれをしたい人にC++を勧めます-私は彼らがそうしている御treat走に頭を上げます。

8
JAkerblom

メインアプリにはJavaを使用します。ただし、移植が必要なC++コードまたはC++で効率的に実装される必要なライブラリがある場合は、それらのビットにndkを使用します

3
Dan

最も重要な考慮事項は、コンパイルされたJavaコードがすべてのAndroidデバイスで変更なしで実行されるのに対して、ネイティブコードはすべてのターゲットプラットフォーム用にコンパイルされる必要があることです。

JavaとAndroidの両方の一般的な目的は、すべてではないにしても大部分をJavaで記述し、他のオプションがない場合にのみネイティブのものを使用することです...したがって、アプリの作成に関するすべては、Javaで行うのに役立ちます。

Javaで記述することにより、ネイティブとJavaの世界を橋渡しすることに多くの煩わしさを免れます。

同様に、あなたが思い切ってJavaを学ぶなら、あなたは自分自身に大きな恩恵をもたらすでしょう。 Androidアプリが優れているだけでなく、OOへの大幅に異なるアプローチにさらされ、より優れたプログラマーになります。

さらに、Javaで記述することにより、セキュリティリスクの全体を回避するという事実を追加します。

私の考えでは、これは非常に簡単です-Javaを使用してください。

3
Lawrence Dol

この興味深い記事を見つけました: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

C++は、プラットフォームに依存しないために特別に構築されたものであり、存在するすべてのオペレーティングシステムで使用されています。典型的なモバイルユーザーは、Objective-CでAndroidアプリとJavaおよびiOSアプリが作成されていることを知っているかもしれませんが、多くの人が知らないのはメモリにC/C++コードがあることです何よりもデバイス上で。 C/C++は、小さなデバイス(ハードウェアと相互作用するカーネルや、一般的なランタイムライブラリなど)およびこれらのデバイスを有効にする通信ネットワークの技術の多くを駆動します。開発チームにとってより重要なことは、どのデバイスやプラットフォームでも実行する必要のあるもののためのC/C++インターフェイスとライブラリがあることです。 Android NDKツールセットは、元々ゲーム開発チームがJavaを避けることでデバイスから可能な限り最高のパフォーマンスを得るために追加された完全なC/C++サポートの優れた例です。 Android JavaランタイムDalvik、Android Javaコードが実行される仮想マシン。すべてのAndroidサービスを有効にするために定期的に改善されています。

3
Moussa D.

通常のAndroid開発にC++を使用しない理由はありません。C++およびWindowsなどの複雑なOSでの豊富な経験がある場合は、Android迅速かつ他のOSほど複雑ではありません。 Javaを学習しているとき、または学習せずに作業しているときは、よりイライラして複雑になります。

2
shaarang