JNI之数组简单操作

NDK  代码片段  2023年7月26日 am8:08发布1年前 (2023)更新 91es.com站长
61 0 0

前言

简单记录一下JNI数组操作。

正文

public class Hello {
    static {
        System.loadLibrary("Hello");
    }
    // JNI中对数组排序
    public static native int[] sortInt(int [] buffer);
    // JNI创建数组
    public static native int [] newIntArray();
}

还在在之前的基础改,这里只附上部分代码

JNINativeMethod method_table[] = {
        {"sortInt", "([I)[I", (void *) native_sort_int},
        {"newIntArray", "()[I", (void *) native_new_Int_Array},
};

sortInt

JNIEXPORT jintArray
JNICALL native_sort_int(JNIEnv *env, jclass jclazz, jintArray buffer) {
    //获取Java数组长度
    int length = env->GetArrayLength(buffer);
    LOGD("native_sort_int length : %d", length);
    //转换为指针
    int *arrayP = env->GetIntArrayElements(buffer, NULL);
    int i = 0;
    int j = 0;
    int temp = 0;
    //排序从大到小
    for (i = 0; i < length - 1; i++) {
        for (j = i + 1; j < length; j++) {
            if (arrayP[i] < arrayP[j]) {
                temp = arrayP[i];
                arrayP[i] = arrayP[j];
                arrayP[j] = temp;
            }
        }
    }
    //转化为jintArray
    //env->SetIntArrayRegion(buffer, 0, length, arrayP);
    //把修改写回原数组并且释放本地数组
    env->ReleaseIntArrayElements(buffer, arrayP, 0);
    return buffer;
}

newIntArray

JNIEXPORT jintArray
JNICALL native_new_Int_Array(JNIEnv *env, jclass jclazz) {
    int num = 10;
    // 1. 创建一个Java的int数组
    jintArray array = env->NewIntArray(num);
    // 2. 获取数组指针
    jint *arrayP = env->GetIntArrayElements(array, NULL);
    // 3. 初始化
    int i = 0;
    for (; i < num; i++) {
        arrayP[i] = i;
    }
    // 4. 把修改写回原数组并且释放本地数组
    env->ReleaseIntArrayElements(array, arrayP, 0);
    return array;
}

参考文章

  1. NDK/JNI 中Java和C/C++互相传递数组

  2. JNI基本类型数组操作

  3. JNI之函数介绍四之数组操作

 历史上的今天

  1. 2021: 刘年:写给儿子刘云帆(0条评论)
  2. 2019: 刘瑜:适应孤独,就像适应一种残疾(0条评论)
  3. 2018: Android的5个进程等级(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

Android新增开关安装apk选项

前言记录一下,Android中设置一个开关进行判断是否允许用户自己安装apk。记录于此,方便自己查阅。正文frameworks/base/services/core/java/com/android/server/pm/PackageInstallerService.java@Overr...

删除开机动画bootanimation

推荐使用 读书导航 极客导航 :125啦极客导航(http://www.91es.com/jike.html)Android开机动画有2种模式,一种是使用两张图片利用某种效果来造成动态,另一种则是用一个图包循环显示的方式来形成动态。当然,这时因为mediaplayer已经起来,播放开机动...

[摘]Android ANR日志分析指南

当你的项目越做越复杂,或者你的用户达到某个数量级的时候,你的代码不小心出现细小的问题,你会收到各种各样的bug,其中ANR的问题你一定不会陌生。本文将详细讲解ANR的类型、出现的原因、ANR案例详细分析、经典的案例。定义ANR(Application Not Responding) 应用程序无...

Only the original thread that created

在service中回调时通知界面刷新了数据,就提示了如下异常:Only the original thread that created a view hierarchy can touch its views.翻译了一下:只有创建了视图层次结构的原始线程才能访问它的视图意思就是只有在主U...

Android单编译时出现ninja no work to do

前言记录一下正编译Android后使用ninja出现如下提示:ninja: no work to do.记录于此,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥2 ¥4多个隐藏块只需支付一次付费阅读参考文章无

陈忠实:马罗大叔

星期六回到家中,刚落坐,母亲说:“你马罗儿叔不在了。”“什么时候?”我问。“昨日夜里,还弄不清辰时卯时咽的气。”母亲叹了口气,“今日清早人才发觉。”这也许不奇怪。一个老光棍儿,夜里独自一个人睡在窑里,死一百次,大约也不会被谁及时发现的。尽管这样想,我的心里仍然禁不住悲哀起来了。“啥病也没添,...