环境准备
本文描述在windows下使用Eclipse进行NDK开发环境的搭建,后续环境设置均为在windows下有效(linux下设置有差异);
在进行NDK开发之前,需要安装以下软件:
native code build
环境变量设置;
设置系统环境变量
ANDROID_NDK = d:\Users\username\AppData\Local\Android\android-ndk-r10e\build sample in NDK;
- 启动cygwin;
- cd到$ANDROID_NDK\samples\hello-jni目录下
- 执行
ndk-build
如果正常compile,并生成libhello-jni.so,说明ndk的环境已经可以正常工作;
ndk build in android app project;
- 创建一个Android APP project,名字为MyProject;
- open MyActivity.java, 声明一个native method:
public class MyActivity extends Activity { public native String getMyData(); }
- 使用静态初始化的方式来加载这个native方法的实现library
static { System.loadLibrary( "mylib" ); }
在project目录下创建目录
jni
;在jni目录下创建
Android.mk
文件,文件内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODLUE := mylib LOCAL_SRC_FILES := com_myproject_MyActivity.c include $(BUILD_SHARED_LIBRARY)
手动创建对应的native method的header file和method implementation;
运行cygwin,在project目录下运行
ndk-build
来compile native code;
使用javah生成头文件
上述进行手动创建header file的步骤会比较繁琐,非常容易出错,比较常用的方式是使用javah来辅助header file的创建;
具体步骤如下:
open Run | External Tools | External Tools Configurations
创建一个新的program configuration,名字为
MyProject javah
; 具体设置如下图:
- Location是javah所在的目录(安装jdk时,有创建JAVA_HOME,javah在JAVA_HOME\bin目录下;
- Working Directory是声明native method的java file的目录;
- Arguments中,使用
-d
来指定生成header file的目录, org.libsdl.app.SDLActivity是包含native method声明的class name,如果有多个class中都有native method declare,则用空格分隔; - 在
Refresh
tab中,勾选”Refresh resource upon completion”;
配置好以后,click
Run
来生成header file;此时在Project Explorer中,应该可以看到新生成的header file,如果没有,可以使用右键菜单的Refresh试试;
使用IDE进行ndk-build
每次build native code,都需要打开cygwin,在project目录下运行ndk-build
是比较麻烦的,Eclipse中可以执行这样的操作是最方便的,具体方式如下:
convert to a C/C++ project;
- Open Menu File | New | Other;
- Under C/C++, select Convert to a C/C++ project and click Next;
- Check MyProject, choose MakeFile project and Other Toolchain and finish click on Finish;
进行如此convert以后,后续的右键菜单才有C/C++ build的item可以进行设置。
在MyProject上右键菜单,选择Properties;
在C/C++ Build section, uncheck Use default build command and enter
bash ${env_var:ANDROID_NDK}/ndk-build
在C/C++ Settings的Behavior tab下,把Build on resource save进行选中;这样在执行save动作时,就会自动执行
ndk-build
;
这样设置以后,ndk-build已经可以成功了,不过在editor中,还会有部分code因为找不到定义,会有黄色的底线,可以通过引入ndk的包含目录来解决此问题
in project properties, C/C++ Geleral/Paths and Symbols -> Includes;
click “Add…”, enter the path to the directory containing the include file which is located inside NDK’s “platforms” directory, like:
${env_var:ANDROID_NDK}/platforms/android-9/arch-arm/usr/include
also add path
${env_var:ANDROID_NDK}/toolchains/arm-linuxandroideabi-4.4.3/prebuilt/<your OS>/lib/gcc/armlinuxandroideabi/4.4.3/include
添加好include 目录后,code中的黄色底线也消失了。
至此,Eclipse下的NDK开发环境就已经搭建好了。