美文网首页
使用IntelliJ IDEA和CLion开发Jni?

使用IntelliJ IDEA和CLion开发Jni?

作者: 时心 | 来源:发表于2018-07-01 10:30 被阅读322次

本人是Android开发者,因为想学习NDK,然后开始倒腾学习一下JNI的语法。

PC环境: Mac
软件: IntelliJ IDEA 2018.1.3 + CLion2018.1.5

一、创建一个Java项目TestJniExample

创建一个Java命令行项目,然后写个简单的本地测试方法。

public class TestJni {
    static {
        System.loadLibrary("test");
    }
    public native String getStringFromNative();
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

二、得到字节码文件

直接点击绿色小按钮运行一下,可以在out/production/TestJniExample目录下得到TestJni.class文件。
cdout/production/TestJniExample目录下,然后执行命令javah TestJni,就会得到一个TestJni.h文件。

三、新建CLion项目

新建一个CLion项目,将前面生成的TestJni.h拷贝到项目中,
然后将Java目录下的jni.hjni_md.h文件拷贝至CLion项目里。

Mac平台下,点击Finder应用,快捷键Command + Shift + G输入/Library/java点击回车键就能找到Java的Home目录了,前提是你没有人工修改Java的默认安装路径。


拷贝后将TestJni.h文件中的#include <jni.h>改成#include "jni.h"

四、实现jni方法

创建TestJni.c文件,将TestJni.h中的函数头拷贝进来,函数中添加具体的参数名称,写一个简单的返回值,这样子我们本地文件就创建好了。

#include "TestJni.h"
#include "jni.h"

JNIEXPORT jstring JNICALL Java_TestJni_getStringFromNative
        (JNIEnv *env, jobject object){
    return (*env) ->NewStringUTF(env,"我来自本地");
}

如果出现Clion this file does not belong to any project target可以参考
https://blog.csdn.net/appleyuchi/article/details/77804114处理一下。

五、打包一个so文件

我这边是用Xcode上的gcc,如果没有装Xcode,那么下载安装配置一下gcc。

命令行中输入
gcc TestJni.c -fPIC -shared -o libtest.so
或者
gcc -dynamiclib -I . TestJni.c -o libtest2.so
都能够生成libtest.so文件

六、将生成的so文件加载进java

这边我遇到点麻烦,就是System.loadLibrary("test")会报错


所以我采取的是写了绝对路径,加载这个库。如果有朋友有什么好方法可以告诉我一下,谢谢。
   static {
 //       System.loadLibrary("test");
          System.load("/Users/****/code/java/jni/JniExample/libtest.so");
    }

然后Run一下,在IntellJ IDEA的控制台中就出现了本地方法返回的结果了。


参考:https://blog.csdn.net/liangjiu2009/article/details/77063704

相关文章

网友评论

      本文标题:使用IntelliJ IDEA和CLion开发Jni?

      本文链接:https://www.haomeiwen.com/subject/dthcuftx.html