Android_NDK_开发环境搭建及HelloC

来源:互联网 发布:dz论坛整站源码 编辑:程序博客网 时间:2024/05/15 15:17
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/12916311

1.NDK开发环境搭建

(1).下载对应版本的NDK

android-ndk-r9-windows-x86.zip下载

(2).cygwin下载安装

首先下载cygwin,只需要安装其中的Devel和Shells即可,找到刚下载的ndk-build所在的目录文件,为了像在cmd中自由使用java命令那样,自由使用ndk-build命令,需要为cygwin配置path环境变量,需要配置profile文件,添加path路径,可参考如下。

PATH="/usr/local/bin:/cygdrive/d/zf/Android-ndk-r7b:/usr/bin:${PATH}"

在新版本的NDK已经支持windows下的编译,提供了一个ndk-build.cmd,故该步骤可以忽略。

2.简单的helloC

 (1).在Activity中声明方法

//注意:不要在helloFromC()后面加上{}public native String helloFromC();

(2).定义c文件

需要在android项目中新建一个jni文件夹,在jni中新建一个Hello.c文件,代码如下

/* * 函数的命名需要遵循一定的规范,Java_完整的包名(以_隔开)_函数名 */JNIEXPORT jstring JNICALL Java_com_example_ndk_MainActivity_helloFromC  (JNIEnv * env, jobject obj){return (*env)->NewStringUTF(env, "form helloFromC");}

(3).新建Android.mk文件

LOCAL_PATH := $(call my-dir)#调用命令,找到路径include $(CLEAR_VARS)#清空变量LOCAL_MODULE    := Hello #将会以该名字,在libs/armeabi/libHello.so,即lib<LOCAL_MODULE>.soLOCAL_SRC_FILES := Hello.c #使用的c文件include $(BUILD_SHARED_LIBRARY)

(4). 使用ndk-build编译

可以使用cygwin或者在windows cmd下的ndk-build.cmd,首先cd进入当前android项目所在的目录,然后调用ndk-build命令编译

(5).引入libs

在完成编译后,会产生libs/armeabi/libHello.so,为引入该so可执行文件,需要在activity中使用静态代码库引入

static{/* * libs/armeabi/libHello.so,loadLibrary()的name为lib<name>.so指定 * 即在Android.mk指定的LOCAL_MODULE后面值 */System.loadLibrary("Hello");}

3.得到native的签名文件

自己手写该方法可能会出错,尤其是native的方法很复杂,比如hello_from_c();有下划线,为此正确的做法应该使用jdk下的javah命令,让其帮助我们生成对应的头文件。

(1).进入Android目录

在windows下,使用cmd进入android项目中,然后进入src目录,键入如下

javah com.baidu.MainActivity //完整路径(含包名) 

(2). 拷贝并引入头文件,实现相应方法

在调用了javah命令后,会在当前目录下生成一个com_baidu_MainActivity.h文件,将其拷贝至jni目录下,引入并实现

#include <stdio.h>#include "com_baidu_MainActivity.h"JNIEXPORT jstring JNICALL Java_com_example_ndk_MainActivity_helloFromC  (JNIEnv * env, jobject obj){return (*env)->NewStringUTF(env, "form helloFromC");}

4.其它

(1).c返回中文字符串

可以修改c文件的编码为utf-8