Android JNI和NDK学习(09)--JNI实例二 传递类对象
摘要:Android JNI和NDK学习(09)--JNI实例二 传递类对象1 应用层代码NdkParam.java是JNI函数的调用类,它的代码如下:package com.skywang.ndk;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class NdkParam extends Activity { public static final String TAG="skywang--NdkParam"; /** Called when the act
阅读全文
Android JNI和NDK学习(08)--JNI实例一 传递基本类型数据
摘要:Android JNI和NDK学习(08)--JNI实例一 传递基本类型数据本文介绍在Java和JNI之间相互传递基本数据类型的方法。由于前面已经详细介绍搭建和建立NDK工程的完整流程(参考“静态实现流程”或“动态实现流程”),这里就不再介绍流程;而是将重点放在说明如何实现Java和JNI之间相互传递基本数据。1 建立eclipse工程建立工程NdkBasicParam,NdkBasicParam.java的内容如下:package com.skywang.ndk;import android.app.Activity;import android.os.Bundle;import andro
阅读全文
Android JNI和NDK学习(07)--JNI的常用API
摘要:Android JNI和NDK学习(07)--JNI的常用API1 版本和类操作API2 对象域相关API2.1 GetFieldIDjfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);函数作用: 返回类的实例(非静态)域的域 ID。参数说明: env:JNI 接口指针。 clazz:Java 类对象。 name: 0 终结的 UTF-8 字符串中的域名。 sig:0 终结的 UTF-8 字符串中的域签名。2.2 Set<type>Fieldvoid...
阅读全文
Android JNI和NDK学习(06)--JNI的数据类型
摘要:Android JNI和NDK学习(06)--JNI的数据类型本文介绍JNI的数据类型。NDK中关于JNI数据类型的定义都在jni.h中,大家可以参考jni.h。jni.h在ndk中的路径参考:android-ndk-r7b/platforms/android-14/arch-arm/usr/include/jni.h1 基本数据类型为了使用方便,JNI还提供了以下定义:#define JNI_FALSE 0#define JNI_TRUE 1typedef jint jsize;2 引用类型3 数组类型4 Java虚拟机类型将JNI注册到Java时,会首先注册到Java虚拟机。Java虚拟.
阅读全文
Android JNI和NDK学习(05)--JNI真机调试
摘要:Android JNI和NDK学习(05)--JNI真机调试本文主要介绍如何将JNI导入到真机进行调试。下面以MyNdk工程来说明。1 将.so文件导入到手机中将MyNdk工程的libhello_jni.so文件导入到手机的/system/lib/目录下,通过以下命令:$ adb push libhello_jni.so /system/lib/liehello_jni.so2 安装apk到手机中$ adb install MyNdk.apk这样,就可以在手机上正常的运行MyNdk.apk了。
阅读全文
Android JNI和NDK学习(04)--NDK调试方法
摘要:Android JNI和NDK学习(04)--NDK调试方法本文主要介绍在ndk中添加log的方法。然后,我们就可以通过log去调试ndk。1 添加ndk对log支持若需要添加ndk对log的支持,只需要通过以下2步即可实现。1.1 修改Android.mk如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog如生成的库文件是“.a文件”,则在Android.mk中添加如下内容:LOCAL_LDLIBS:=-llog1.2 在.c或.cpp文件中引用log头文件添加如下内容:// 引入log头文件
阅读全文
Android JNI和NDK学习(03)--动态方式实现JNI
摘要:Android JNI和NDK学习(03)--动态方式实现JNI前面总结了静态实现JNI的方法,本文介绍如何动态实现JNI:JNI在加载时,会调用JNI_OnLoad,而卸载时会调用JNI_UnLoad,所以我们可以通过在JNI_OnLoad里面注册我们的native函数来实现JNI。下面就介绍该方法。1 Android应用层代码在eclipse中新建工程NdkLoad,工程文件NdkLoad.java的代码如下:package com.skywang.ndk;import android.app.Activity;import android.os.Bundle;import android
阅读全文
Android JNI和NDK学习(02)--静态方式实现JNI
摘要:Android JNI和NDK学习(02)--静态方式实现JNIJNI包括两种实现方法:静态和动态。两种方法的区别如下:静态:先由Java得到本地方法的声明,然后再通过JNI实现该声明方法。动态:先通过JNI重载JNI_OnLoad()实现本地方法,然后直接在Java中调用本地方法。本文介绍静态实现方式,下一篇会介绍动态实现方式。1 首先,在Eclipse下新建一个工程myndkMyndk.java的代码如下: 1 package com.skywang.ndk; 2 3 import android.app.Activity; 4 import android.os.Bundle; ...
阅读全文
Android JNI和NDK学习(01)--搭建NDK开发环境
摘要:Android JNI和NDK学习(01)--搭建NDK开发环境本文主要介绍“JNI”、“Android NDK”以及“如何搭建Android NDK开发环境”1 JNI介绍JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。2 NDK介绍Android NDK,即Native Development
阅读全文