学习一门新的编程语言,数据类型是最基本的东西,这里我们讲述下jni中的数据类型。
在JNI中把数据类型分为3类:
primitive type:int float char
reference type:class instances arrays
string type
在上一篇HelloWorld中我们打印出HelloWorld等字样,我们没有传入任何参数,这里先给出一个例子,我们在java端传入字符串,然后看在jni中时如何做处理的。
这个例子跟之前的Helloworld差不多,稍作修改,我们在java端传入参数,
新建一个类,专门用来封转jni的method:
在主activity中调用:
我们调用了Prompt中的getLine方法。
然后看下C中的代码:
getLine函数呼叫了JNI的功能函数GetStringUFTChars来读取我们传入的prompt字符串(java端)。GetStringUFTChars函数进入JNIEnv 结构指针,把java中的UTF-8字符类型转变成C中的Unicode sequence,转换成jstring 参考来使用。
最后在释放str的时候不要忘记检查str是否为空,因为GetStringUFTChars函数可能会调用失败(outofmenory)。
当原生代码把传进来的UTF-8类型字符串之后应该立即释放内存调用ReleaseStringUTFChars。
调用NewStringUTF函数来构建新的字符串return给java代码。
在模拟器中运行,当我们点击按钮的时候会出现字符串,“From C + 。。。”
调用成功。
---------------------------------------------------------------------------------
下面我们来进入数组,先看下面的数组定义:
int[] iarr;
float[] farr;
Object oarr;
int[][] arr2;
iarr和farr是数据数组,但是oarr和arr2是对象数组。
下面举个例子进入数据数组:
先看下我们要实现的,在java代码中:
封装动态库function:
定义一个数组,然后调用jni中的function来对数组进行操作,这边在java代码中传进去的是一个整形的数组。
-----------------------------------------------------------------------------------------------
我们来看下在jni中是如何处理的:
这里调用了GetIntArrayRegion函数来把传进来的arr数组中的数据都拷贝进C,该函数第三个参数是索引的开始值,第四个参数是被拷贝的数。
JNI也可以使用Get/Release<Type>ArrayElements 函数来使原生代码直接拥有数组的指针。
运行模拟器:
----------------------------------------------------------------------------------------
下面我们来看下jni中对对象数组的处理。
看下原生函数的声明
下面是jni中的实现
------------------------------------------------------------------------------------------
ok,我们的基本数据类型就介绍到这,这里数据类型还有很多,大家可以参考user guide,一般我遇到新类型就去翻资料。
下面我们会介绍jni是如何调用java中的成员函数和成员变量的。
分享到:
相关推荐
jni4net-0.8.8.0,比较新的版本,里面有proxygen.exe可以编译,以及jni4net.j-0.8.8.0.jar,32位和64位皆可
赠送jar包:zstd-jni-1.3.8-1.jar; 赠送原API文档:zstd-jni-1.3.8-1-javadoc.jar; 赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-...
赠送jar包:zstd-jni-1.4.3-1.jar; 赠送原API文档:zstd-jni-1.4.3-1-javadoc.jar; 赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-...
赠送jar包:zstd-jni-1.4.4-3.jar; 赠送原API文档:zstd-jni-1.4.4-3-javadoc.jar; 赠送源代码:zstd-jni-1.4.4-3-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.4-3.pom; 包含翻译后的API文档:zstd-jni-...
赠送jar包:zstd-jni-1.4.4-3.jar; 赠送原API文档:zstd-jni-1.4.4-3-javadoc.jar; 赠送源代码:zstd-jni-1.4.4-3-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.4-3.pom; 包含翻译后的API文档:zstd-jni-...
赠送jar包:zstd-jni-1.4.3-1.jar; 赠送原API文档:zstd-jni-1.4.3-1-javadoc.jar; 赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-...
赠送jar包:zstd-jni-1.3.8-1.jar; 赠送原API文档:zstd-jni-1.3.8-1-javadoc.jar; 赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-...
META-INF/MANIFEST.MF com.ice.jni.registry.HexNumberFormat.class com.ice.jni.registry.NoSuchKeyException.class com.ice.jni.registry.NoSuchValueException.class com.ice.jni.registry.RegBinaryValue.class ...
com.ice.jni.registry.RegMultiStringValue.class com.ice.jni.registry.RegBinaryValue.class com.ice.jni.registry.RegistryException.class com.ice.jni.registry.NoSuchValueException.class ...
libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-...
赠送jar包:zstd-jni-1.3.2-2.jar; 赠送原API文档:zstd-jni-1.3.2-2-javadoc.jar; 赠送源代码:zstd-jni-1.3.2-2-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.2-2.pom; 包含翻译后的API文档:zstd-jni-...
面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so
赠送jar包:zstd-jni-1.3.2-2.jar; 赠送原API文档:zstd-jni-1.3.2-2-javadoc.jar; 赠送源代码:zstd-jni-1.3.2-2-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.2-2.pom; 包含翻译后的API文档:zstd-jni-...
Android 的核心控件JNL 和 HAL,非常有助于Android的开发
android jni helloworld DEMO
zstd-jni-1.4.0-1.jar zstd-jni-1.4.0-1-javadoc.jar zstd-jni-1.4.0-1-sources.jar
webrtc-android-jni
zstd的jni接口代码,可以使得zstd为facebook c语言编写.该资源包用于java使用zstd编程
Jnidemo-master.3.17.final.ok(20200813.final.ok).zip
Android 通过JNI调用驱动代码实例