見出し画像

Android NDK の 使い方

「Android NDK」の 使い方をまとめました。

・Android Studio Koala | 2024.1.1
・Kotlin


1. Android NDK

「Android NDK」は、ネイティブ コードのアプリの一部に C や C++ などの言語を使用できるようにツールセットです。

2. NDKとCMAKEのインストール

(1) Androidプロジェクトの作成。

(2) 「Android Studio」のメニュー「Tools → SDK Manager」を選択し、「SDK Tools」タブを選択し、「NDK」と「CMAKE」をインストール。

3. C++コードの作成

(1) app/src/main/cppフォルダ (ない時は作成) に、「native-lib.cpp」を追加。

・native-lib.cpp

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_net_npaka_helloworld_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

JNIでネイティブメソッドを宣言する際には、以下のフォーマットに従います。

Java_パッケージ名_クラス名_メソッド名

(2) appフォルダに、「CMakeLists.txt」を追加。

・CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED src/main/cpp/native-lib.cpp)

find_library(log-lib log)

target_link_libraries(native-lib ${log-lib})

・cmake_minimum_required() : CMAKEの最小バージョンを指定
・add_library() : ライブラリを作成するコードを指定
・target_link_libraries() : ライブラリをリンク

(3) 「app/build.gradle」に以下の設定を追加。

android {
        :

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

4. Kotlinコードの編集

(1) 「MainActivity.kt」の編集。

・MainActivity.kt

package net.npaka.helloworld

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text

// メインアクティビティ
class MainActivity : ComponentActivity() {
    // ネイティブライブラリのロード
    companion object {
        init {
            System.loadLibrary("native-lib")
        }
    }

    // ネイティブメソッドの宣言
    private external fun stringFromJNI(): String

    // 初期化
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Text(stringFromJNI())
        }
    }
}

5. 実行

(1) コードを実行。
C++から返された文字列が表示されていることを確認します。



この記事が気に入ったらサポートをしてみませんか?