一、NDK
二、安装cygwin
三、配置NDK环境变量
NDK=/cygdrive/e/android-ndk-r5
export NDK
NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存
四:用NDK来编译程序
1、现在用安装好的NDK来编译一个简单的程序。在NDK的安装目录下新建一个apps目录存放工程。在apps目录下新建一个myjni目录。打开eclipse,新建一个android工程,新建工程时需要取消复选框“Use default location”,并指定预先建立的myjni文件夹作为工程文件夹。
2、在eclipse里编写Jnitest.java文件:
package minQ.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Jnitest extends Activity {
private TextView tvTextView;
public native String speak();//声明共享库的函数,不需要在java里实现
String string;
static{
System.loadLibrary("myjni");//动态加载共享库
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
string = speak();
tvTextView = (TextView)findViewById(R.id.myTextView01);
tvTextView.setText(string);
}}
3、应用此java文件生成.h文件。使用windows cmd控制台进入到工程目录下的bin目录,输入命令:
-d jni表示生成的文件存放的路径
minQ.Android.Jnitest表示类的完整路径。
生成的.h头文件将会放在bin\jni目录下
4、在工程目录下建立Application.mk文件:
APP_PROJECT_PATH:=$(call my-dir)
APP_MODULES :=myjni
说明:在进行NDK开发时,在应用程序目录中一定要有Application.mk文件。用来声明Android工程需要调用的非托管模块(如静态库或共享库)。第一行变量APP_PROJECT_PATH表示Android工程所在的目录。在生产共享库文件后,apk将自动将共享库文件拷贝到Android工程\libs\armeabi目录中。第二行变量APP_MODULES表示Android工程需要调用的非托管模块。5、接下来在工程目录下新建jni目录,把bin\jni目录下的.h头文件移动到此目录下,并且在目录下编写minQ_android_Jnitest.c文件和Android.mk文件。
minQ_android_Jnitest.c文件内容:
#include<stdlib.h>
#include<stdio.h>
#include"minQ_android_Jnitest.h"//include刚才生成的头文件
jstring Java_minQ_android_Jnitest_speak(JNIEnv* env, jobject this){
}
说明:jstring表示Java字符串,Java_minQ_android_Jnitest_speak的构成为Java_<包名称>_<类>_<函数>,其中<函数>的名称和参数要与Jnitest.java文件定义的函数一致。
Android.mk文件内容:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=myjni
LOCAL_SRC_FILES :=minQ_android_Jnitest.c
include $(BUILD_SHARED_LIBRARY)
说明:LOCAL_PATH
include
LOCAL_MODULE
注意:编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'myjni'的共享库模块,将会生成'libmyjni.so'文件。
重要注意事项:
如果你把库命名为‘libmyjni’,编译系统将不会添加任何的lib前缀,也会生成
LOCAL_SRC_FILES
注意,默认的C++源码文件的扩展名是’.cpp’.
include
完成到这里,jni目录下就有三个文件:
6、此时我们可以启动cygwin编译我们的工程。myjni是apps目录下的应用程序目录名称。在指定应用程序(目录)名称后,NKD编译系统会首先找到目录中的Application.mk文件,根据Application.mk文件的信息,确定该Android共享需要使用的APP_MODULES模块;然后在jni目录中搜索所有Android.mk文件,在找到与APP_MODULES模块匹配的Android.mk文件后,根据Android.mk文件提供的信息编译指定的C/C++源代码文件,形成共享库文件;最后将生产的共享库文件拷贝到Android工程的指定目录中。
说明:启动cygwin后,直接输入命令cd $NDK可以进入ndk安装目录,然后进入myjni工程目录,输入命令$NDK/ndk-build (以上说用的$NDK对应于你在安装cygwin时操作bash_profile文件在后面添加的名称一样,见三.2步)。
7、打开工程myjni目录,会发现在该目录下自动生成两个文件:libs和obj。生成的.so文件在libs\armeabi目录下。在eclipse下刷新工程,重新编译生成apk,libhello-jni.so共享库会一起打包在apk文件内。然后可以顺利地运行你的第一个NDK程序了!