安裝步驟:
1. 下載android ndk,這個就不多說了,我的是ndk-r6b。
2.解壓縮即是安裝。我放在 ~下面了。
寫個HELLO WORLD
1.用Eclipse IDE產生一個預設的最簡單的工程,就是那個只有一個TextView的Hello world. 注意包名,比如我的 com.easou.abo.hellojni,類名HelloJNIActivity。
2.去修改一下res/layout/main.xml,為那個沒有ID的TextView增加一個ID,比如 android:id=”@+id/label” ,然後再修改這個HelloJNIActivity,如下:
package com.easou.abo.hellojni;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class HelloJNIActivity extends Activity {public native String sayHello(String name);static {System.loadLibrary("hello_jni"); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView label=(TextView)findViewById(R.id.label); label.setText(sayHello("word")); }}
3、用ecliplse在工程根目錄下建一個jni目錄,在jni目錄下建3個檔案,一是Android.mk 二是 hello_a.c,三是hello_a.h。
4、用終端定位到工程目錄的bin/classes下,我的是(/home/abo/workspace/HelloJNI/bin/classes)
5、執行命令javah com.easou.abo.hellojni.HelloJNIActivity,執行完後,在bin/classes目錄下會有一個com_easou_abo_hellojni_HelloJNIActivity.h檔案,用gedit開啟,複製裡面的內容到hello_a.h。
6.現在編輯hello_a.c,寫實現代碼,很簡單:
#include "hello_a.h"//所有JNI的函數都有這個JNIEnv 和 jobject ,可以用它做很多事情(具體參考 jni.h)jstring JNICALL Java_com_easou_abo_hellojni_HelloJNIActivity_sayHello(JNIEnv * env, jobject thiz, jstring name){//取參數轉成我們熟悉的char*const char* param=(*env)->GetStringUTFChars(env,name,0);//這兒好熟悉啊char * str=(char*)malloc(32*sizeof(char));strcpy(str,"hello ");strcat(str,param);//釋放掉param(*env)->ReleaseStringUTFChars(env,name,param);//返回結果jstring ret= (*env)->NewStringUTF(env,str);free(str);return ret;}
7.可以編輯那個Android.mk了,也相當簡單,因為我們只是一個Hello world,想複雜也不知如何複雜:
#設定工作目錄為目前的目錄LOCAL_PATH := $(call my-dir)#執行清空一下各個參數include $(CLEAR_VARS)#設定編譯出的模組名稱LOCAL_MODULE := hello_jni#設定源檔案清單LOCAL_SRC_FILES :=hello_a.c#執行產生共用庫include $(BUILD_SHARED_LIBRARY)
8、在終端定位到jni目錄下,運行 ~/android-ndk-r6b/ndk-build,成功後,工程目錄下會出現一個libs目錄。libs/armeabi/libhello_jni.so檔案。
9、回到eclipse,運行工程,就行了。