1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

androidでkotlinからCを呼び出す

Posted at

AndroidStudioにndkをインストール

  1. ツール>SDK Manager を開く。

  2. 外観&振る舞い>システム設定>Android SDKから、SDK Toolsタブを開く。

  3. 任意のNDKをインストールする。
    001.png

  4. インストールしたndkにパスを通す。
    windowsの設定→システム→詳細情報>システムの詳細設定
    002.png
    環境変数→システム環境変数>Pathを選択し、編集→新規
    003.png

ndkを使えるようにするための設定

1.build.gradleにsourceSetsを追記する

build.gradle
android {
   /* (中略)*/

    defaultConfig {
       /* (中略) */

        sourceSets {
            main {
                jni.srcDirs = []
                jniLibs.srcDir "src/main/libs"
            }
        }
    }
}

2. AndroidStudioのプロジェクトビューから、mainフォルダ配下に「jni」ディレクトリを新規作成。
004.png
3. 作成したjniフォルダ内に、Android.mkファイルを作成する。

Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := jni_main
LOCAL_SRC_FILES := jni_test.c

include $(BUILD_SHARED_LIBRARY)

kotlinからjniを呼び出す

  1. 呼び出される側のソースを、jniフォルダに新規作成
jni_test.c
#include <string.h> 
#include <jni.h> 
// 「jp_co_jnipkg」=パッケージ名
// 「MainActivity」=呼出し元
// 「TestJNI」   =メソッド名
jstring Java_jp_co_jnipkg_MainActivity_TestJNI( JNIEnv* env, jobject thiz ) {
    return (*env)->NewStringUTF(env, "JNIを呼び出しました!");
}

2.MainActivityにjni呼出し処理を記述

MainActivity.kt
public class MainActivity extends AppCompatActivity {
    //JNI
    public native String TestJNI();
    static {
        System.loadLibrary("jni_test");
    }

    @Override 
    protected void onCreate(Bundle savedInstanceState{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //JNIの呼び出し
        val result = TestJNI(); //"JNIを呼び出しました!"
    }
}

3. jniフォルダ右クリック→パス/参照のコピー→絶対パス で、jniフォルダの絶対パスをコピー。
AndroidStudio下部のターミナルウィンドウを開き、コピーしたパスにcdコマンドで移動し、
ndk-buildを実行する。
005.png

4. 通常どおりビルドして、実行

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?