Fetch the repository succeeded.
@jnitool version 1.0
这是一个代码生成工具是为了方便,自定义的Java结构体转成C++结构体方便C++的调用,通过对JNI的封装了方便C++和Java结构体之间的交互.
对自定义java结构体访问的封装,避免到处调用jni去访问该结构体,集中式管理。 比如在修改java结构体的命名或字段名时,如果不修改所有C++对应的调用部分(如果这种调用到外都是),编译并不会出错,运行时会出现莫名其妙的错误。但如果改成访问相应的C++结构体,在修改java结构体时,使用工具更新一下C++的结构体就可以了(如果有非基本类型或数组要做一点相应的修改),在编译的时候其它地方就会因为访问错误的字段名而出错。
运行需要安装jdk. 为了方便在命令行中使用 ,可以把工具所在的路配置到环境变量中。
用法 jnitool [选项] [包名]类名
此程序会调用javap命令,请确保在命令行中可以执行javap命令。此命令类似于javap命令
-classpath <目录> 指定类文件路径中间不能有空格,不指定则默认是当前目录
-out <目录> 指定输出路径中间不能有空格,不指定则默认是当前目录
-help 输出帮助提示
例子:jnitool -classpath e:\\my_project\\bin\\com\\cn -out e:\\my_project\\src Data
jnitool -classpath e:\\my_project\\bin com.cn.Data
jnitool -help
输出的文件是以java的类名来命名的,如上面的则是Data.h和Data.cpp文件
jstr = (*env)->GetObjectField( obj, fid);
str = (*env)->GetStringUTFChars(jstr, NULL);
if (str == NULL) {
return; /* out of memory */
}
(*env)->ReleaseStringUTFChars(jstr, str);
/* Create a new string and overwrite the instance field */
jstr = (*env)->NewStringUTF("123");
if (jstr == NULL) {
return; /* out of memory */
}
(*env)->SetObjectField(obj, fid, jstr);
在配置好环境变量之后 用命令行进入到example目录下(win7可以打开到example目录下后,按住shift+右键,在此处打开命令行窗口),运行jnitool com.Point就可以看到输出了point.h和point.cpp文件。
Sign in for post a comment
Activity
Community
Health
Trend
Influence
:Code submit frequency
:React/respond to issue & PR etc.
:Well-balanced team members and collaboration
:Recent popularity of project
:Star counts, download counts etc.
Comments ( 0 )