一万年来谁著史,三千里外欲封侯。这篇文章主要讲述Android jni 二维数组 传递相关的知识,希望能为你提供帮助。
【Android jni 二维数组 传递】学习android Jni时,一个二维 整数 数组的传递花了我好长时间,在网上查的资料都不全,当然最后是成功了,写在这里是为了自己记住,当然有人搜索到并利用了我会很高兴。
in Android java file
public native boolean
add(int[][]
qizidata,.....)
用JDK工具生产jni 的*.h文件
your project path>
..Javajdk1.6.0_10binjavah -classpath ./bin JAVA Class name
//**************************************************************************//二维数组java -》JniJNIEXPORT jint JNICALL Java_com_Jung_add
(JNIEnv * env, jobject
obj, jobjectArray qizidata,jint value1, jint
value2)
{
jint
i,j;
jint
qizi[1024][1024];
//固定数组,测试用
jarray
myarray;
int
size = (*env)->
GetArrayLength(env, qizidata);
for (i
= 0;
i <
size &
&
i<
1024 ;
i++)
{
myarray =
((*env)->
GetObjectArrayElement(env, qizidata,
i));
int col =
(*env)->
GetArrayLength(env,
myarray);
jint *coldata =
https://www.songbingjia.com/android/(*env)->
GetIntArrayElements(env, (jintArray)myarray,
0 );
for (j=0;
j<
col
&
&
j <
1024;
j++)
{
qizi[i][j]
= coldata[j];
}
(*env)->
ReleaseIntArrayElements(env,
(jintArray)myarray, coldata,0 );
}
return
(qizi[0][0]+qizi[9][0]);
}
//**************************************************************************//二维数组Jni -》Java
JNIEXPORT jobjectArray JNICALL
Java_com_marakana_NativeLib_GetIntArray
(JNIEnv *env, jobject obj, jint
x, jint y)
{
jobjectArray ret;
int i =
0;
int j =
0;
jclass
intArrCls = (*env)->
FindClass(env, "[I");
if (
NULL== intArrCls)
return NULL;
ret =
(*env)->
NewObjectArray(env, x * y, intArrCls,
NULL);
jint
tmp[1024];
//固定数组,测试用,注意别溢出
for (i
= 0;
i <
x;
i++) {
jintArray intArr =
(*env)->
NewIntArray(env,y);
for (j = 0;
j <
y;
j++) {
tmp[j] = i + j;
}
(*env)->
SetIntArrayRegion(env,intArr, 0, y,
tmp);
(*env)->
SetObjectArrayElement(env,ret, i,
intArr);
(*env)->
DeleteLocalRef(env,intArr);
}
return
ret;
}//**************************************************************************
//下面代码是网上搜的,没验证,忘记出处了,请原作者见谅
// 二维String数组 JNI 提取
c_languge syntax
JNIEXPORT void JNICALL Java_TestArray_PrintArrays
(JNIEnv *env, jclass class, jobjectArray array)
{
int
size = (*env)->
GetArrayLength(env, array);
for
(int i = 0;
i <
size;
i++)
{
jarray myarray =
((*env)->
GetObjectArrayElement(env, array,
i));
int leng =
(*env)->
GetArrayLength(env, myarray);
printf("length: %dn",
leng);
for (int j = 0;
j
<
leng;
j++)
{
jstring string =
((*env)->
GetObjectArrayElement(env, myarray,
i));
const char * chars =
(*env)->
GetStringUTFChars(env, string, 0);
printf("%s n", chars);
(*env)->
ReleaseStringUTFChars(env,
string, chars);
}
}
}
推荐阅读
- ashx比较完美的权限处理(适合页面,不适合安卓远程读取接口)
- 安卓4.3以上版本已经完美支持BLE(英文版)
- Android开发学习——简单类图
- 理解Angular中的$apply()以及$digest()
- Android JNI 传递对象
- Android Studio Gradle优化方法
- Android-性能优化之布局优化
- elasticsearch index 之 Mapping
- 如何在Ubuntu 20.04上安装和使用Docker(分步指南)