码迷,mamicode.com
首页 > 移动开发 > 详细

Android NDK开发介绍

时间:2015-06-16 16:54:48      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:android   java   jni   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方法的映射,在此不详细介绍了。

jstring Java_com_pingtech_testjni_TestJni_sayHello( JNIEnv* env,
        jobject thiz )
{
	return (*env)->NewStringUTF(env, "Hello from JNI !");
}

3、JNI java代码

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

4、编译运行

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


Android NDK开发介绍

标签:android   java   jni   ndk   

原文地址:http://blog.csdn.net/zuolongsnail/article/details/46518915

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!