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");
    }
}

JAVAからNDK(C++)を呼び出すのに

    public native void  mainTest();

    static {
        System.loadLibrary("MainNative");
    }

を追加し、Javaの中から mainTest()が呼び出せるようにしています。
ライブラリの名前が「MainNative」なのかは build.gradle(Module: app)で設定しています。

    android.ndk {
        moduleName = "MainNative"
    }

デバッグ実行

虫みたいな緑のアイコンを押し、デバッグ実行をします。

しかし、Javaのソースにはブレークがかかりますが、C++のソースにはブレークがかかりません。

NDKのCソースデバッグ環境設定

まずは「Edit Configuration」を選択し

Android Native」を追加してから、以下のような設定をし「OK」を押します。

実行

「app-native」になってることを確認後、デバッグ実行します。

ブレイクがかかるようになるまで、数秒かかりますが。「Debugger attached to process xxx」とDebugログにでればブレイクがかかるようになります。
(将来はすぐにかかるようになるといいなー)

結果、となり、無事ブレイクがかかりました。