对于Jni(Ndk) 很多人应该都有印象,Android的ndk接触到的机会相对会比较多,本例子以android平台为例,pc端的话就以简单的windows为例, 编码完用vs 或是 gcc进行编译成dll文件,扔到系统system32 , 就是环境变量配置的文件夹底下,linux 可能也差不多是这个意思,剩下的代码就跟android一样,进行加载这个动态链接库即可.

这里就不做赘述,直接进入android平台的ndk开发,这里就主要讲下,Java层如何持久化c c++ 对象,场景可以是这样,假设你在c/c++层创建了一个对象(结构体),你下次还想继续使用怎么办,当然是要保存它了,那要怎么保存,这就要考虑怎么进行持久化它了,翻翻java或是android 很多源代码里面总会对一个long对象进行放置play.

例如:

没错,看似没什么特别的一个字段,其实就是底层的一个c/c++对象,比如图片里的mNativeBitmap 其实是c/c++里面的一个Bitmap对象,需要它时会在底层进行转型,可能说起来大家有点不明白  这里我就用代码来说明下.

首先新建个 native 类:

接着用工具生成头文件声明,这个自行百度解决,这里不做赘述,现在来展示下最主要的c/c++代码, 这里我使用c++编码.

首先我创建了一个类,c里面就是结构体啦,用c++的语法创建对象就是用new了,那c就是malloc了,这个就不多做说明, 这里比较主要的两段代码时

(jlong)person; 和  (Person *)nativeId;

这两段代码分别都是转型,一个是转换成jlong(也就是java里的long类型),从java层调用c++层接着返回jlong给java层的一个long对象进行持久化.使用时,在将这个long传到c++层进行强转成Person * , 这样就可以继续使用了. 这是一段很简单的代码, 但是确实很实用 ~

源代码地址:http://download.csdn.net/detail/jue_dui_zhen_li/9570118

出自:http://blog.csdn.net/jue_dui_zhen_li/article/details/51852438

(转)java 层调用Jni(Ndk) 持久化c c++ 对象的更多相关文章

  1. Java层与Jni层的数组传递(转)

    源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的S ...

  2. Android开发实践:Java层与Jni层的数组传递

    转载:http://www.linuxidc.com/Linux/2014-03/97561.htm Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是 ...

  3. android java层通过jni加载使用第三方的so库

    1.例如我们自己编译一个so库,我们的其他模块要加载如何操作了 首先在c盘新建立一个文件夹sb,在sb下面新建立一个文件夹jni,如果你要使用ndk编译so库,必须需要有jni目录 2.在jni目录下 ...

  4. Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI

    准备工作:Eclipse ADT IDE 开发工具,NDK .Java 环境,博主的配置是:Windows x86 , ADT Build: v22.3.0-887826 , JAVA 1.7, ND ...

  5. JNI/NDK开发指南(2)

    1.生成动态库.so,存放于手机的system/lib/中(APP怎样将.so存入该文件夹,奇怪?????),Java层调用JNI的类会运行静态代码System.loadLibrary("* ...

  6. JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程

    JNI/NDK Java调用C/C++前言  通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...

  7. Android JNI之C/C++层调用JAVA

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930032.html 从C/C++层调用JAVA层代码步骤: 1. 在JAVA类中创建java方法和本地方法 ...

  8. cocos2d-x 通过JNI实现c/c++和Android的java层函数互调

    文章摘要: 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数. (2)通过c++函数调用Android的java层函 ...

  9. Android jni/ndk编程三:native访问java

    一.访问静态字段 Java层的field和method,不管它是public,还是package.private和protected,从 JNI都可以访问到,Java面向语言的封装性不见了. 静态字段 ...

随机推荐

  1. 项目冲刺Forth

    Forth Sprint 1.各个成员今日完成的任务 蔡振翼:修改部分博客 谢孟轩:续借功能和编辑资料功能的实现 林凯:初步实现登录功能 肖志豪:帮助其他人解决一些问题 吴文清:编写完善管理员个人界面 ...

  2. crm——stark组件核心原理

    关于stark组件的简要介绍: 启动后.路由加载前定制一段代码.         a. 创建一个 stark  app 组件                  b. 编写ready方法 from dj ...

  3. centos 6 秘钥分发

    http://www.cnblogs.com/chensiqiqi/p/6554055.html

  4. oracle data integrator与大数据平台的集成

    在最新版本的ODI中,通过使用各种知识模块,可在统一的界面上实现对传统数据库.hive, pig, spark, hdfs等的ETL操作,满足在同一系统或采用相同的方式实现ETL功能. 详细的内容可参 ...

  5. Ansible修改自定义端口和登录用户

    如下所示: [servers] host1 ansible_ssh_host=192.0.2.1 ansible_ssh_port=5555 ansible_ssh_user="user&q ...

  6. RxJava2学习笔记(2)

    上一篇已经熟悉了Observable的基本用法,但是如果仅仅只是“生产-消费”的模型,这就体现不出优势了,java有100种办法可以玩这个:) 一.更简单的多线程 正常情况下,生产者与消费者都在同一个 ...

  7. ActiveX学习笔记二 ActiveX在IE中安全级别问题-实现IObjectSafety接口

    http://blog.csdn.net/freedomqx/article/details/4955512 使用MFC开发ActiveX控件,在IE中会提示安全问题,这个可以通过实现IObjectS ...

  8. jquery操作radio,checkbox

    1. 获取radio选中的value. $('input:radio[name=sex]:checked').val(); 2. 选择 radio 按钮 (Male). $('input:radio[ ...

  9. Openstack配置文件管理的变迁之路

    在管理一个Openstack集群时,如何维护配置文件无疑是其中最艰难和繁琐的任务之一.因为你不仅要面对众多的核心服务(nova,keystone,glance,cinder,etc)的配置文件,还需要 ...

  10. 【ZH奶酪】如何用sklearn计算中文文本TF-IDF?

    1. 什么是TF-IDF tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术.tf-idf是一种统计方法 ...