Gradle プロジェクトで JNI 開発をセットアップする
IntelliJ IDEA は Gradle の JNI 開発(英語)プロジェクトをサポートします。
このチュートリアルでは、Java 1.8 および Gradle 7.4 バージョンを使用します。 チュートリアルでは、 ソフトウェアモデル(英語)を使用します。
代替プラグイン(英語)を使用する場合は、 JNI サンプル(英語)プロジェクトを確認できます。
JNI サポートを追加するには
build.gradle ファイルを開きます。
次のコードを build.gradle に追加します。
import org.gradle.internal.jvm.Jvm plugins { id 'java' id 'application' id 'c' } mainClassName = 'HelloWorld' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.12' } sourceCompatibility = 1.8 targetCompatibility = 1.8 application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] } model { platforms { x64 { architecture "x86_64" } } components { hello(NativeLibrarySpec) { targetPlatform "x64" binaries.all { def jvmHome = Jvm.current().javaHome if (targetPlatform.operatingSystem.macOsX) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/darwin" cCompiler.args '-mmacosx-version-min=10.4' linker.args '-mmacosx-version-min=10.4' } else if (targetPlatform.operatingSystem.linux) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/linux" cCompiler.args '-D_FILE_OFFSET_BITS=64' } else if (targetPlatform.operatingSystem.windows) { cCompiler.args "-I${jvmHome}/include" cCompiler.args "-I${jvmHome}/include/win32" } else if (targetPlatform.operatingSystem.freeBSD) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/freebsd" } } } } } classes.dependsOn 'helloSharedLibrary'import org.gradle.internal.jvm.Jvm plugins { id 'java' id 'application' id 'c' } mainClassName = 'HelloWorld' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.12' } sourceCompatibility = 1.8 targetCompatibility = 1.8 application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] } model { platforms { x64 { architecture "x86_64" } } components { hello(NativeLibrarySpec) { targetPlatform "x64" binaries.all { def jvmHome = Jvm.current().javaHome if (targetPlatform.operatingSystem.macOsX) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/darwin" cCompiler.args '-mmacosx-version-min=10.9' linker.args '-mmacosx-version-min=10.9' linker.args '-stdlib=libc++' } else if (targetPlatform.operatingSystem.linux) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/linux" cCompiler.args '-D_FILE_OFFSET_BITS=64' } else if (targetPlatform.operatingSystem.windows) { cCompiler.args "-I${jvmHome}/include" cCompiler.args "-I${jvmHome}/include/win32" } else if (targetPlatform.operatingSystem.freeBSD) { cCompiler.args '-I', "${jvmHome}/include" cCompiler.args '-I', "${jvmHome}/include/freebsd" } } } } } classes.dependsOn 'helloSharedLibrary'セットアップをスムーズに行うには、次の詳細に注意してください。
IntelliJ IDEA は、 Gradle 設定にある Gradle JVM のバージョンを使用します。
OS によってコンパイラー パラメーターが異なる場合があります。
cCompiler.argsとlinker.argsを build.gradle で変更する際はご注意ください。アプリケーションが次の既存のシステムプロパティで実行される場合:
application { applicationDefaultJvmArgs = ["-Djava.library.path=" + file("${buildDir}/libs/hello/shared").absolutePath] }このアプリケーションは
classes.dependsOn 'helloSharedLibrary'に依存し、IntelliJ IDEA は プロジェクト ツールウィンドウで共有ライブラリのバイナリ libhello.dylib ファイルを生成します。
プロジェクト ツールウィンドウで、 src | java ディレクトリを選択します。
java ディレクトリを右クリックし、 を選択して、
Cコードを使用する Java クラスHelloWorldを作成します。作成された
HelloWorldクラスをエディターで開き、次のコードを入力します。class HelloWorld { public native void print(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().print(); } }ファイルで指定されたコードは、生成された システムライブラリをロードします。
プロジェクト ツールウィンドウの src ディレクトリで、
Cプログラム用のファイルである hello/c/hello.c ファイルを作成します。エディターで hello.c ファイルを開き、次のコードを指定します。
#include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello From C++ World!\n"); return; }
この時点で、必要に応じてネイティブコードを使用してさらにアプリケーションを開発することができます。
アプリケーションを実行する
実行構成ダイアログを開きます。
オペレーティングシステムとして macOS を使用している場合は、次のコードを VM オプション フィールドに追加します。

VM オプションフィールドは、 オプションを変更 リストから追加できます。
OK をクリックして変更を保存します。
メインツールバーの
をクリックします。