92

更新(明確にするため、およびあいまいさを減らすため):

私はAndroidアプリをいじり始めるつもりです。私は NDK を使用して C++ で書くことを計画していました (私は C++ の経験が豊富で、Java よりも C++ を好むため) が、Android NDK ページで次のことに遭遇しました。

アプリに不可欠な場合にのみ NDK を使用してください。<strong>単純に C/C++ でプログラミングすることを好むからではありません。

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


オリジナル:

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

いくつかの背景として、私はコンピューターサイエンス専攻で、3 つの C++ コース (入門、中級、OOP、および春に STL コースを受講中) を受講し、Java コース (中級) は 1 つだけです。このため、私は C++ に慣れており、Java よりも C++ の方が好きです。Android NDKページで次のことに遭遇しました:

通常、Android でネイティブ コードを使用してもパフォーマンスが大幅に向上することはありませんが、常にアプリの複雑さが増します。一般に、アプリに不可欠な場合にのみ NDK を使用する必要があります。<strong>単純に C/C++ でプログラミングすることを好むからではありません。

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

アドバイスをいただければ幸いです。

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

4

7 に答える 7

115

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

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

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

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

于 2012-12-08T02:51:01.657 に答える
25

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

一生のうちに複数のアプリケーションを開発するつもりで Android 開発の学習を目指していて、それらすべてを適切にサポートできるようになりたい場合は、Java と代わりに Android の Java SDK を使用してください。

于 2012-12-08T02:03:28.487 に答える
8

King のプログラマーは、ゲーム ロジックに C++ を使用しています。そして、売上高から判断すると、彼らはうまくやっているようです。

私の経験では、C++ は問題解決者向けであり、Java は問題回避者向けです。私はどちらの言語も好きですが、C++ は良いコードを書くと非常にやりがいがあります。ただし、そこにたどり着くまでに魔法のような時間がかかる場合があります。

通常は Python や R で仕事をこなすデータ サイエンティストにも C++ をお勧めできます。そのため、C++ を使用したい人には決して C++ をお勧めしません。

于 2015-08-10T14:17:38.013 に答える
4

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

Java と Android の両方の一般的な意図は、すべてではないにしても大部分のアプリを Java で作成し、他に選択肢がない場合にのみネイティブのものを使用することです。

Java で作成することにより、ネイティブの世界と Java の世界を橋渡しする際の煩わしさから解放されます。

同様に、思い切って Java を学べば、大きな恩恵を受けることができます。あなたの Android アプリがより優れたものになるだけでなく、OO へのまったく異なるアプローチに身を置くことで、OO のより優れたプログラマーになることができます。

それに加えて、Java で作成することにより、多数のセキュリティ リスクを回避できるという事実を付け加えてください。

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

于 2012-12-08T02:12:09.687 に答える
3

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

于 2013-10-26T10:48:18.667 に答える