JNI包的封装与编译
发布时间:2024.06.20
1、拷贝C++类到目录soctqobjsppsrcmaincppsoctqobjs目录下
修改cpp文件,把#include "stdafx.h"注释掉
2、在soctqobjsppsrcmaincpp下增加C++文件jXXXXX.cpp
XXXXX为类名,该文件用来实现JNI的封装,注意j要小写。加上#include 、#include "encodeChanger.h",以及对应的C++类的头文件。
3、在ppjavacom.diante.soctqobjs目录下增加Java类JXXXXX.cpp
XXXXX为类名,该文件用来实现对JNI的调用,注意J要大写。
类中增加如下必须的代码:
private long p = -1;
private native long NewInstance();
private native void DelInstance(long p);
private native void SetServer(long p, long serverP);
private native byte[] GetErrorStr(long p);
public XXXXX() { p = NewInstance(); }//XXXXX()为构造函数。
public void setServer(JCSocServer jCSocServer) { SetServer(p, jCSocServer.getPointer()); }
public void delInstance() { DelInstance(p); }
public String getErrorStr() { return StringUtil.getGB18030Str(GetErrorStr(p)); }
4、通过内部开发的工具软件生成相关函数
如果C++类的公有成员变量较多,则JAVA类中的native函数的参数较多,手工书写比较费时,该工具可以帮助一键生成。
打开codegen软件,点击【生成JNI】按钮,如下图:
5、修改CMakeLists.txt,增加两行代码:
把第一步和第二步增加的Cpp文件加入到该文件。
6、编译
编译要在Gradle的task里进行:
在other里找到makeReleaseJar,双击即可编译,结束后jar包就输出到目录soctqobjsppuildlibs中。
使用该JNI包时,不但需要提供JAR包,里面有JAVA类,还要提供SO库,对应于C++库,如下两个目录下的文件夹根据需要二选一拷贝到SocMobClientpplibs中:
soctqobjsppuildintermediatescmake eleaseobj:DEBUG版本
soctqobjsppuildintermediatescmake eleaseobj:RELEASE版本
上一篇:JNI封装操作说明书
下一篇:CItemData数据结构