2010-12-07 16 views
10

Android NDKは、ネイティブC/C++コードで完全にAndroidアプリケーションを作成するためのサポートを含むように大幅に拡張されました。ネイティブコードを使用してキーボードとタッチスクリーンで入力イベントをキャプチャし、新しいNativeActivityクラスを使用してC/C++でアプリケーションライフサイクルを実装することもできます。Android NativeActivity

すべての拡張ネイティブ機能を使用すると、Javaを完全にバイパスし、Androidアプリケーションをネイティブコードで記述することは価値がありますか?

答えて

8

NDKはネイティブではありません。これは、Android SDKを中心としたJNIラッパーです。 NativeActivityを使用すると、特定のアプリライフサイクルイベントを扱う便利な方法が得られ、独自のネイティブコードを上に追加できます。 ALooper、AInputQueueなどはすべてJava SDKのJNIラッパーであり、一部には実際のアプリではプライベートでアクセス不可能なコードが追加されています。

Android開発について言えば、ネイティブC++でアプリケーションを作成することはありません。あなたは(すべての実際のAppケースでは)常にAndroid APIを使用する必要があります。巨大な純粋なJavaに。あなたは自分自身で作成したラッパーやNDKによって提供されるラッパーを介してこれらを使用しても、実際にこれを変更することはありません。

あなたの質問に答えるには:いいえ、それは価値がありません。なぜなら、JNIラッパーを同じコードを使用する独自のJavaメソッドに書くのではなく、SDKコール用のJNIラッパーを書くことになるからです、シンプルなコードと高速なコード。たとえば、 "pure C++"を使ってダイアログを表示すると、非常に多くのJNI呼び出しが発生します。同じことをするJNIを通じてJavaメソッドを呼び出すだけで、より速いコード(1つのJNI呼び出し)と、おそらくより保守しやすいコードが得られます。

あなたができることを完全に理解するには、本当にAndroidのソースコードを調べる必要があります。 NDKで利用可能なnative_app_glue.cから始め、次にAActivity、ALooper、AInputQueueなどのOS実装を続行します.Google Code Searchはこの点で大きな助けとなります。 :-)

Javaで簡単に実行でき、多くの呼び出しが含まれている場合は、複数のJNI呼び出しを行うためのすべての追加コードを記述するのではなく、JNIを通じてメソッドを呼び出します。既存のC++コードをそのままと同じように残してください。です。

+6

ダイアログを必要とせず、UIを100%OpenGLで描画したOpenGLゲームを作成している場合はどうなりますか? NativeActivityの使用がより理にかなっていますか? – Bram

+6

このシナリオでは、それは完璧な意味があります。 –

4

標準アプリケーションを作成しているだけではありません。 Java SDKは現在のところネイティブ対応のものよりも完全なので、あなたはまだ自分自身では難しいものになっています。

NDKを必要とするもの(読んでいないもの:リアルタイムパフォーマンスに敏感なもの)を実行していない場合は、Javaを使用してください。

2

ちょっとした食べ物がありますが、iOSとAndroidでアプリを使用している場合は、一部のC/C++コードが共有可能かもしれません。明らかに、iOSのObj-Cとプラットフォーム固有のコードは、他の場所では動作しません。 (Android固有のものについてはDitto)。しかし、プラットフォームに中立なコードを共有することができます。

3

可能であれば、ネイティブアクティビティをサポートするAndroidのバージョンがインストールされたベースのかなりの部分を占めるまで、Javaスタイルのアプリを使用してください。

以前はやっていなかったこと - 特に既存のコードのポート - については、おそらく大きな助けになるでしょう。

あなたの薄いJavaラッパーを作成するだけでは何が変わったのかは完全にはっきりしていません。たとえば、dalvik VMのコピーがまだありますか?

+3

はいプロセスにはまだDalvik VMがあります。 – hackbod

+1

これは、あなた自身の薄いJavaラッパーを作成する上で何を得ますか?実際のニュースがある場合は、それはもう少し公開されたネイティブapisだろうか? –

関連する問題