前面文章介紹了 Ubuntu 安裝 GNU Toolchain for ARM,有了這個交叉編譯工具主要是為了Android的移植做了准備。下面介紹Android中的NDK開發。
1、從這裡下載最新版的NDK,現在最新版名字是android-ndk-r5b-linux-x86.tar.bz2.tar,解壓,解壓後名字為android-ndk-r5b,接下來設置PATH環境變量:export PATH=$PATH:/home/stone/android-ndk-r5b,設置該環境變量是因為等會在android-ndk-r5b目錄下的ndk-build程序要被用到;
2、上面這樣就配置好了NDK的開發環境,接下來就創建一個項目來測試一下,步驟如下:
1)、使用Eclipse創建一個Android項目,名字為“HelloNDKJNI”,Build Target設置為“Android 2.2”,Application Name設置為“HelloNdkJni”,Package Name設置為“com.stone”,Create Activity設置為“.HelloNdkJni”,Min SDK Version設置為“8”;2)、接下來創建C語言庫,在Eclipse的Package Explore裡面的HelloNDKJNI項目下創建目錄“jni”,並在該目錄下創建兩文件“Android.mk”和“hello-ndk-jni.c”,如下圖所示:
Android.mk文件內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-ndk-jni
LOCAL_SRC_FILES := hello-ndk-jni.c
include $(BUILD_SHARED_LIBRARY)
hello-ndk-jni.c文件內容如下:
#include
#include
//注意這裡是又規則的
jstring Java_com_stone_HelloNdkJni_stringFromNDKJNI( JNIEnv* env,jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from NDK JNI !");
}
3)、編譯創建的C庫,打開終端,進行步驟1中的設置PATH環境變量操作(如果有進行,則可跳過),進入到創建的HelloNDKJNI項目中的jni目錄,執行命令ndk-build,此時會在項目中生成libs和obj目錄,並在裡面生成相應的文件,運行結果如下圖所示:
4)刷新Eclipse中的Package Explore中的HelloNDKJNI項目,此時obj和libs目錄也添加進去了,在obj/armeabi分支下也多了libhello-ndk-jni.so文件,hello-ndk-jni這個名是根據2-2)步中的Android.mk文件中的LOCAL_MODULE決定的,接下來修改src/com.stone分支下的HelloNdkJni.java文件,最後的文件內容如下:
package com.stone;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloNdkJni extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv =new TextView(this);
tv.setText(stringFromNDKJNI());
setContentView(tv);
}
public native String stringFromNDKJNI();
static{
System.loadLibrary("hello-ndk-jni");
}
}
更多的NDK例子,可以參考第1步中解壓後目錄下的samples目錄下的項目。
參考見http://www.linuxidc.com/Linux/2011-04/35239p2.htm