【IDEA教程】详解 IDEA 在 Gradle 项目中设置 JNI 开发

IntelliJ IDEA 支持Gradle项目中的 JNI 开发。
本教程基于 Java 1.8 和 Gradle 4.0 版本。本教程使用软件模型和gcj示例项目。
如果要使用替换插件,可以查看JNI 示例项目。
添加 JNI 支持
您可以从 VCS 克隆并检查我们的整个JNI 项目,以了解一切是如何工作的。或者,您可以从build.gradle文件中复制代码并将其添加到您的项目中。
- 创建一个新的或打开一个现有的Gradle 项目。
- 打开build.gradle文件。
将以下代码添加到build.gradle:
apply plugin: 'java' apply plugin: 'application' apply plugin: 'c' mainClassName = 'HelloWorld' repositories { mavenCentral() } dependencies { testCompile('junit:junit:4.12') } sourceCompatibility = 1.8 targetCompatibility = 1.8 test { systemProperty "java.library.path", file("${buildDir}/libs/hello/shared").absolutePath } model { platforms { x64 { architecture "x64" } } components { hello(NativeLibrarySpec) { binaries.all { if (targetPlatform.operatingSystem.macOsX) { cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/darwin" cCompiler.args '-mmacosx-version-min=10.4' linker.args '-mmacosx-version-min=10.4' } else if (targetPlatform.operatingSystem.linux) { cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/linux" cCompiler.args '-D_FILE_OFFSET_BITS=64' } else if (targetPlatform.operatingSystem.windows) { cCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32" linker.args "Shlwapi.lib", "Advapi32.lib" } else if (targetPlatform.operatingSystem.freeBSD) { cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/freebsd" } } } } } test.dependsOn 'helloSharedLibrary'
为了使您的设置顺利进行,请记住以下详细信息:
- IntelliJ IDEA 使用Gradle 设置中的 Gradle JVM 版本。
- 根据您的操作系统,编译器参数可能会有所不同,请在更改时和 build.gradle 中记住
cCompiler.args
这一点。linker.args
- 当使用现有系统属性运行测试
test {systemProperty "java.library.path", file("${buildDir}/libs/hello/shared").absolutePath}
并且这些测试依赖于 时test.dependsOn 'helloSharedLibrary'
,IntelliJ IDEA会在项目工具窗口中为共享库生成二进制libhello.dylib文件。
- 在项目工具窗口中,选择src | java目录。
- 右键单击java目录并选择新建 | Java Class创建
HelloWorld
将使用C
代码的 Java 类。 在编辑器中打开创建的
HelloWorld
类,输入以下代码:class HelloWorld { public native void print(); static { System.loadLibrary("hello"); } }
文件中指定的代码将加载生成的系统库。
- 在Project工具窗口中,在src目录下,创建hello目录和c子目录。
- 在c子目录中,创建hello.c文件,该文件是您的
C
程序的文件。
在编辑器中打开hello.c文件并指定以下代码:
#include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }
此时,您可以根据需要使用本机代码进一步开发您的应用程序。