11

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

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

4

4 に答える 4

8

NDK自体はネイティブではありません。これは、大部分がAndroidSDKのJNIラッパーです。NativeActivityを使用すると、特定のアプリライフサイクルイベントを処理し、独自のネイティブコードを追加する便利な方法が提供されます。ALooper、AInputQueueなどはすべてJava SDKの対応するJNIラッパーであり、一部のコードにはプライベートで実際のアプリではアクセスできない追加のコードが含まれています。

Android開発に関しては、完全にネイティブC ++でアプリケーションを作成するようなことはありません。(私が考えることができるすべての実際のアプリの場合)常にAndroidAPIを使用する必要があります。純粋なJava。NDKが提供するラッパーを使用する場合でも、自分で作成するラッパーを使用する場合でも、実際には変更されません。

だから、あなたの質問に答える:いいえ、それは価値がありません。なぜなら、同じことを行う独自のJavaメソッドにJNIラッパーを書く代わりに、SDK呼び出し用のJNIラッパーを書くことになり、コードが少なく、コードが単純で、より高速なコード。たとえば、「pure c ++」を使用してダイアログを表示するには、非常に多くのJNI呼び出しが必要です。同じことを行うJNIを介してJavaメソッドを呼び出すだけで、より高速なコード(1回のJNI呼び出し)が得られ、間違いなく、保守が容易なコードが得られます。

何ができるかを完全に理解するには、Androidのソースコードを実際に調べる必要があります。NDKで利用可能なnative_app_glue.cから始めて、AActivity、ALooper、AInputQueueなどのOS実装を続行します。Googleコード検索はこれに非常に役立ちます。:-)

Javaで実行するのが簡単で、多くの呼び出しが含まれている場合は、複数のJNI呼び出しで実行するための余分なコードをすべて記述するのではなく、すべてを実行するJNIを介してメソッドを呼び出します。妥当な範囲で既存のC++コードをできるだけ多く保存します。

于 2011-02-15T00:07:50.720 に答える
4

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

NDKを必要とすることをしていない場合(リアルタイムのパフォーマンスに敏感)、Javaを使い続けてください。

于 2010-12-07T02:40:30.910 に答える
3

参考までに、iOS と Android でアプリを開発している場合、一部の C/C++ コードは共有できる可能性があります。明らかに、iOS Obj-C とプラットフォーム固有のコードは他の場所では機能しません。(Android固有のものについては同上)。ただし、プラットフォームに依存しない共有コードを使用できる場合があります。

于 2010-12-07T03:36:42.320 に答える
3

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

以前は実行が困難だったこと、特に既存のコードの移植については、これはおそらく大きな助けになるでしょう。

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

于 2010-12-07T04:42:33.787 に答える