NDKプログラム
ディレクトリ作成
C++のソースを置く場所を設定します、なぜ「JNI」なのかは別なサイトで調べてみてください
「app」から右クリックで「New」「Folder」「JNI Folder」を選択していきます。
ダイアログで確認画面が出ますので「Finish」を押して作成します。
このように「JNI」ホルダーが作成されます。
ソース作成
実際のC++ソースを作成します。
ダイアログが現れますので、今回は「NativeMain.cpp」と「NativeMain.h」を作成します。
「OK」を押すと、ファイルが出来上がります。
ソース
せっかくなのでソースを作成
NativeMain.cpp
#include <jni.h> extern "C" { void Java_sample01_example_com_myapplication_MainActivity_mainTest( JNIEnv* env, jobject thiz ) { int a; a= 10; } }
なんで、NDKだと、こんな関数名なのかは、NDKを勉強してください。
Javaの方から呼び出すので「MainActivity.java」を編集します。
MainActivity.java
package sample01.example.com.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { mainTest(); return true; } return super.onOptionsItemSelected(item); } //----------------------------------- public native void mainTest(); static { System.loadLibrary("MainNative"); } }
public native void mainTest(); static { System.loadLibrary("MainNative"); }
を追加し、Javaの中から mainTest()が呼び出せるようにしています。
ライブラリの名前が「MainNative」なのかは build.gradle(Module: app)で設定しています。
android.ndk { moduleName = "MainNative" }
実行
「app-native」になってることを確認後、デバッグ実行します。
ブレイクがかかるようになるまで、数秒かかりますが。「Debugger attached to process xxx」とDebugログにでればブレイクがかかるようになります。
(将来はすぐにかかるようになるといいなー)
結果、となり、無事ブレイクがかかりました。