(转)java 层调用Jni(Ndk) 持久化c c++ 对象

对于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

时间: 2024-10-20 23:24:30

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

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

源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层.我简单地总结了一下,从Java层到Jni层,从Jni层到JAVA层,各有3种传递方式,下面用代码示例简单地介绍一下. 示例代码的主要文件有两个,一个是Native.java,是Java层的类:另一个是Nati

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

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层.我简单地总结了一下,从Java层到Jni层,从Jni层到JAVA层,各有3种传递方式,下面用代码示例简单地介绍一下. 示例代码的主要文件有两个,一个是Native.java,是Java层的类:另一个是Native.c,是JNI层的文件,关键的地

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

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层.我简单地总结了一下,从Java层到Jni层,从Jni层到JAVA层,各有3种传递方式,下面用代码示例简单地介绍一下. 示例代码的主要文件有两个,一个是Native.java,是Java层的类:另一个是Native.c,是JNI层的文件,关键的地

在java层调用C++函数时,挂掉了!!!!!!!!!!!!

今天在项目在测试的时候,支付完成,java层调用C++的购买成功回调函数,在函数里把数据存到文件里的时候就挂了,回调函数如下:void CoinDialog::addCoin(int coinNum){ CCLOG("CoinDialog::addCoin()"); GameScene::prop_coin_nub += coinNum;                   CCUserDefault::sharedUserDefault()->setIntegerForKey

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

准备工作:Eclipse ADT IDE 开发工具,NDK ,Java 环境,博主的配置是:Windows x86 , ADT Build: v22.3.0-887826 , JAVA 1.7, NDK  android-ndk-r9 首先我们需要知道在 Linux 下编译 Project 生成 so 可以用 make ,但是在 WINDOWS 就不行了,这个就不多说了,大伙都明 白,然而今天写的这篇博客就是教大家怎么在Windows 配置自己的ADT开发插件也具备这样的功能,方便快速高效的开发

JNI/NDK开发指南(2)

1.生成动态库.so,存放于手机的system/lib/中(APP如何将.so存入该目录,奇怪?????),Java层调用JNI的类会执行静态代码System.loadLibrary("***")将手机的system/lib目录中的动态库加载到VM. 2..so动态库里,C组件开发者通过JNI_OnUnload()函数进行初始化.当然,老版的JNI是没有JNI_OnUnload()函数的,从而VM也能根据有无该函数判断JNI是新版or老版. 3.JNI_OnUnload()函数还能将.

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

摘要: 摘要: 转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930032.html 从C/C++层调用JAVA层代码步骤: 1. 在JAVA类中创建java方法和本地方法 public class TestNdk{ int a;//本示例中将被修改的JAVA变量 Handler handler; public TestNdk(Handler handler){ this.handler = handler; setUp(); } public nati

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

一.访问静态字段 Java层的field和method,不管它是public,还是package.private和protected,从 JNI都可以访问到,Java面向语言的封装性不见了. 静态字段和非静态的字段访问方式不同,jni规范提供了一系列带static标示的访问静态字段的函数: jobject (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID); jboolean (*GetStaticBooleanField)(JNIEnv*, j

Andrdoid中对应用程序的行为拦截实现方式之----从Java层进行拦截

致谢: 感谢 简行之旅的这篇blog:http://blog.csdn.net/l173864930/article/details/38455951,这篇文章是参考这篇blog的进行一步一步操作的,如果没有这篇好文章的话,貌似我这篇文章的诞生可能就有点难度了. 今天周日,昨天花了一天的时间总算是搞定了,问题还是想对应用程序的行为进行拦截的操作,就是像小米手机一样,哪些应用在获取你什么权限的信息.在之前写过对应用程序的行为进行拦截的方式(C层)实现的博客,在写完这篇之后,本来想是尽快的把Java