android-ndk チュートリアル
android-ndkを使い始める
サーチ…
備考
Android NDKとは何ですか?
Androidネイティブ開発キット(NDK)は、Android SDKのコンパニオンツールで、C / C ++でアプリケーションの一部を組み込むことができます。これは次の場合に便利です。
- プラットフォーム間でアプリケーションコンポーネントを共有する(Android、iOS、Linuxなど)
- 重要な部分のパフォーマンスを向上させる
- 既存のC / C ++ライブラリの再利用
NDKは、開発者がC / C ++でプログラミングをしながら、アクティビティを構築し、ユーザーの入力を処理し、ハードウェアセンサーを使用し、アプリケーションリソースにアクセスするなどのヘッダーとライブラリを提供します。
バージョン
簡単な例でのAndroid NDKの使い方
Android Studio 2.2以降のネイティブ開発キット(NDK)を使用すると、CおよびC ++コードをコンパイルすることができます。
手動でNDKをダウンロードしてビルドしたり、ビルドしたり、CMakeを使ってNDKを使用することができます。
ここでは、NDKとサンプルコードを手動でインストールするためのプロセスフローを示します。
システムのOSに基づいて、NDKをこの場所( https://developer.android.com/ndk/downloads/index.html)からダウンロードできます 。
ダウンロードした後、システム環境変数のパスを変数名 " NDK_PROJECT_PATH "と変数値 "NDK格納パスの場所"として指定します。
次に、NDKとAndroid Studioを統合するために、新しいAndroidプロジェクトを作成した後、
gradle - ローカルプロパティでは、sdkのようなパスの場所を追加する
sdk.dir=F\:\\gowtham\\Android\\sdkそして
android.useDeprecatedNdk = true
次に、Build - Make Project(Ctrl + f9)を押します。
あなたのプロジェクトは成功裏に構築され、以下に示すように、メッセージgradle buildでBUILD SUCCESFULを取得します。
その後、Terminalでは、最初にプロジェクトのパス
cd app/src/main追加する
パスはプロジェクトパスからメインパスに拡張されます。
次に、もう一度Build - Make Project(Ctrl + f9)をクリックします。
以下に示すように、 app-build-intermediates-classes-debugフォルダの下にあります。
ここで、app / src / main / javaの下に新しいJavaクラスファイルを作成します。ここではNativeClassという名前のJavaファイルを作成しました
関数名と関数のための入力を持つ単純な呼び出し関数を書くここで私は例として関数を書いて、それに2つの整数入力を与え、
再度プロジェクトをビルドします(Ctrl + f9) 。
ビルドすると、このようにビルドされたクラスファイルが見つかるでしょう。
Then,in terminal
`-Javah -d jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass
ここで、 - d - 出力ディレクトリ用 - jni - JNI形式のヘッダファイルを生成する(デフォルト) - classpath - クラスをロードする
今度はプロジェクト(Ctrl + f9)をビルドすると、 jniフォルダが作成され、以下に示すように、前にターミナルで指定した名前でヘッダファイルが作成されます
今度はヘッダファイルをコピーし、ヘッダファイルと同じ名前の.cppまたは.cファイルをjniフォルダに保存します。
私は以下のようにcppファイルを作成しました
Delete everything before **JNIEXPORT line** in this file and **add header file name** alone.
Here I am for simple example just adding two numbers and returning value to android java.
Application_com_ndkapplication_NativeClass.cpp
#include <application_com_ndkapplication_NativeClass.h>
JNIEXPORT jint JNICALL Java_application_com_ndkapplication_NativeClass_example
(JNIEnv *, jclass , jint as , jint bs){
return (as + bs);
}
この例では、ヘッダファイルに関数を追加する必要はありません。
JniフォルダにAndroid.mkとApplication.mkという名前の新しいファイルを作成する
Android.mkファイルは、ソースをビルドシステムに記述するためのファイルです。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := application_com_ndkapplication_NativeClass.cpp
LOCAL_LDLIBS += -llog
LOCAL_MODULE := exp-jni
include $(BUILD_SHARED_LIBRARY)
このファイルの詳細を知るにはこのリンクから読んでくださいhttps://developer.android.com/ndk/guides/android_mk.html
アプリケーションが必要とするネイティブモジュールを記述するApplication.mk。
Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti –fexceptions
APP_ABI := armeabi-v7a armeabi arm64-v8a mips mips64 x86 x86_64
APP_PLATFORM := android-16
このリンクから読むこのファイルの詳細を知るにはhttps://developer.android.com/ndk/guides/application_mk.html
Now build the project again **(Ctrl + f9)**, you will find the **armeabi-v7a, armeabi, arm64-v8a ,mips, mips64, x86 and x86_64** folder created inside jniLibs.
次に、メインアクティビティでは、ネイティブクラスファイルの入力と出力を渡します。
int a = 5, b = 5, res ;
res = NativeClass.example(((int) a),((int) b));
TextView textView = (TextView) this.findViewById(R.id.tv);
textView.setText(new Integer(res).toString());
ここでは、a、bで2つの整数を入力し、変数resから出力を得ました。
得られた出力は、TextViewに渡すことで画面に表示されます。
そして、あなたはこのようなLOCAL_MODULEとしてAndroid.mkファイルで指定されたライブラリを追加することを忘れないでください、
static {
System.loadLibrary("exp-jni");
}
最後にプロジェクトをもう一度ビルドすると(Ctrl + f9)、各armeabi-v7a、armeabi、arm64-v8a、mips、mips64、x86およびx86_64フォルダの下に作成された.soファイルが見つかります。
次にアプリケーションを実行すると、この例の出力は10になります。
これはNDKの初心者のための基本的なプログラムです、OpenCVライブラリはここにインポートすることができますまた、画像処理アプリケーションを行うことができます。










