使用IntelliJ IDEA和CLion开发JNI环境搭建

背景

无论在开发Android项目还是Java项目时,为了复用现有的C/C++代码,或者添加破解的难度,会使用C/C++开发一部分核心的功能。

JVM与C的接口使用JNI,不再多述。后面会有文章进行详细的说明。本文中枫竹梦只说明环境的搭建,以及一个Hello JNI的demo。

IntelliJ IDEA设置

新建一个项目
新建项目
命名为HelloJNI
项目名字

  • 新建目录jni,用于存储生成的头文件。
  • 新建目录lib,用于存放C/C++编译的动态库文件。

并在src新建Hello类
目录结构

public class Hello {
    static {
        System.loadLibrary("hello");
    }

    public native void sayHello();

    public static void main(String[] args) {
        new Hello().sayHello();
    }
}

下一步需要生成C语言头文件。为了方便后面的生成或者更新,这里添加将生成过程添加为一个快捷工具。在PreferencesToolsExternal Tools下新建。
Name和Description随意,Name会在下面用到。重要的的下面三个:

  • Program内容$JDKPath$/bin/javah
  • Arguments内容-classpath $OutputPath$ -d ./jni $FileClass$
  • Working directory内容$ProjectFileDir$
    设置工具
    在类Hello上点击鼠标右键—External ToolsGenerateHeader生成头文件,在jni目录就生成Hello.h的文件了。

CLion设置

在CLion同样新建项目,命名为hello,Language standard选择哪个都可以,Library type选择shared
CLion新建项目
PreferencesBuild, Execution, DeploymentCMake中将Build directory修改为build/debug,同样添加Release并进行类似的设置。
CLion项目设置
设置目录结构如下:

  • build是编译过程生成目录
  • jni为在IntelliJ IDEA下生成的,需要复制过来
  • src目录是源码目录

CLion目录结构

根目录下的CMakeLists.txt的内容为:

cmake_minimum_required(VERSION 3.17)
project(hello)

set(CMAKE_CXX_STANDARD 20)

find_package(JNI REQUIRED)

include_directories(${JNI_INCLUDE_DIRS})

include_directories(jni)

add_subdirectory(src)

src/CMakeLists.txt内容为:

add_library(hello SHARED hello.c)

src/hello.c的内容为:

#include "Hello.h"
#include <jni.h>
#include <stdio.h>

JNIEXPORT void JNICALL Java_Hello_sayHello (JNIEnv *env, jobject obj) {
  printf("Hello JNI!\n");
}

在编译之前需要确保已经设置好了JAVA_HOME环境变量。

编译Debug版本,正常会生成文件build/debug/src/libhello.dylib。枫竹梦是在Mac下编译,如果在Linux编译生成的是libhello.so。

此时CLion的工作已经完成。

编译与运行

将上面生成的libhello.dylib或者libhello.so复制到IntelliJ IDEA下的lib目录。

在编辑运行配置,选择右上角的Modify optionsAdd VM options,添加-Djava.library.path=$ProjectFileDir$/lib

运行配置
最后运行Java项目,会打印Hello JNI。至此,配置已经完成。

后面更新native接口进需要重新生成头文件,并将jni目录复制到CLion中。
如果只是更新native的实现,需要将动态库从CLion项目中复制到IntelliJ IDEA中。

祝使用愉快,如果有遇到问题请留言,有更好的使用方式也欢迎讨论。

vx搜:极客Furzoom,关注获取第一手资料。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫竹梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值