Android NDK开发介绍

一、JNI基础介绍

JNI is the Java Native Interface. It defines a way for managed code (written in the Java programming language) to interact with native code (written in C/C++).
JNI(Java本地接口):定义一种方式,使得Java代码能与C代码或者Dynamic Shared Libraries(动态共享库)进行交互。
调用方式:
C代码通过编译生成一个.so动态共享库,供java代码调用。
 

二、NDK开发介绍

NDK 是 Google为Android提供做C/C++代码开发的工具包,包含GCC的编译器以及各个平台(arm,X86,MIPS)的相关头文件,交叉编译的一些平台相关文件等。可在google官网上下载。

1、Eclipse配置下载的NDK资源包位置

解压下载的NDK包,android-ndk-r9b-windows-x86.zip
Preferences——>Android——>NDK,配置ndk所在位置

2、开发使用Demo

new一个普通Android工程TestJni;
右键项目,Android Tools——>Add Native Support,输入想要生成动态库名字:TestJni;
此时,会多出一个jni文件夹,包括一个TestJni.c和Android.mk文件。
Android.mk 配置编译相关动作,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := TestJni
LOCAL_SRC_FILES := TestJni.c
include $(BUILD_SHARED_LIBRARY) 

 

 

注:

BUILD_SHARED_LIBRARY:表示编译目标为动态共享库,即生成.so文件

LOCAL_MODULE:编译目标名

LOCAL_SRC_FILES:编译源文件

 

TestJni.c即本地C代码,本例中只加了一个Hello字串的返回,此方法名的定义,为了使得Java代码能够找到相应的native代码,其规范为:Java+包名+class+Method,否则找不到。
当然可以有另外一种方法映射的途径,可以实现java到C方法的映射,在此不详细介绍了。

 

[java]  view plain  copy
 
  1. jstring Java_com_pingtech_testjni_TestJni_sayHello( JNIEnv* env,  
  2.         jobject thiz )  
  3. {  
  4.     return (*env)->NewStringUTF(env, "Hello from JNI !");  
  5. }  

3、JNI java代码

[java]  view plain  copy
 
  1. public class TestJni{  
  2.         public static native String sayHello();  
  3.         static{  
  4.             System.loadLibrary("TestJni");  
  5.         }  
  6. }  
使用静态代码块,首先加载TestJni.so 动态共享库,sayHello为C中本地方法,前面加一个native修饰符即可。这个我们直接可以通过TestJni.sayHello();在Java代码中调用C代码了。

4、编译运行

Project build all,可检测本地代码错误,生成.so库(lib/armeabi下,这个对于arm平台,当然可以通过配置编译出其他平台的)。
转: http://blog.csdn.net/zuolongsnail/article/details/46518915

猜你喜欢

转载自lishuaishuai.iteye.com/blog/2296838