上半年,公司的一個項目,本身我是不喜歡Android開發的,但是學習到的東西總需要整理一下。
從iOS轉到Android,真心有些不習慣。就IDE來說,eclipse比Xcode差的不是一點半點。Android模擬器竟然還要開機!我勒個去。。
今天寫個最簡單的Android NDK的小栗子。
首先,什么是Android NDK? NDK 全稱是:Native Development Kit,其他的,移步百度百科:android ndk_百度百科
1、新建一個Android Application Project,Fuck。
2、新建類 Fuck,聲明本地靜態方法:numFromFuck()。代碼如下:
1 package com.example.fuck; 2 public class Fuck { 3 4 public native static int numFromFuck(); 5 6 static{ 7 8 System.loadLibrary("fuck"); //fuck代表動態鏈接庫libfuck.so文件 9 10 } 11 12 }
3、給程序添加一個按鈕button,在點擊button時,通過調用類Fuck中本地方法更改textView的text,代碼如下
?
1 button.setOnClickListener(new OnClickListener(){ 2 @Override 3 4 public void onClick(View arg0) { 5 6 // TODO Auto-generated method stub 7 8 textView.setText(Fuck.numFromFuck() + ""); 9 } 10 });
?
?
?
4、build該工程,生成 Fuck.class 類文件(在bin目錄下),這一步比較重要。
5、在終端cd到工程目錄下,新建個文件夾:【mkdir jni】(終端輸入命令都在中括號中,下同),然后輸入命令:【javah -classpath bin/classes -d jni com.example.fuck.Fuck】 ,
然后會在jni文件夾下發現一個文件:com_example_fuck_Fuck.h,其中代碼如下:
1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include <jni.h> 3 4 /* Header for class com_example_fuck_Fuck */ 5 6 #ifndef _Included_com_example_fuck_Fuck 7 8 #define _Included_com_example_fuck_Fuck 9 10 #ifdef __cplusplus 11 12 extern "C" { 13 14 #endif 15 16 /* 17 18 * Class: com_example_fuck_Fuck 19 20 * Method: numFromFuck 21 22 * Signature: ()I 23 24 */ 25 26 JNIEXPORT jint JNICALL Java_com_example_fuck_Fuck_numFromFuck 27 28 (JNIEnv *, jobject); 29 30 #ifdef __cplusplus 31 32 } 33 34 #endif 35 36 #endif
?
6、在 jni 目錄中新建Fuck.c,實現5中生成的.h文件中的方法:
1 #include "com_example_fuck_Fuck.h" 2 JNIEXPORT jint JNICALL Java_com_example_fuck_Fuck_numFromFuck (JNIEnv *env, jobject obj) 3 4 { 5 6 return 42; 7 8 }
如果你直接從.h文件拷過來的代碼,一定要記得更改參數。
?
7、在 jni 文件目錄中新建文件 Android.mk 文件:
1 LOCAL_PATH := $(call my-dir) 2 include $(CLEAR_VARS) 3 4 LOCAL_MODULE := fuck 5 6 LOCAL_SRC_FILES := Fuck.c 7 8 include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE:=fuck 表示要生成的so文件名為:libfuck.so,這就是在步驟2中需加載的動態鏈接庫。
8、回到終端,cd 到工程目錄,輸入命令:【ndk-build】,沒錯的話會在工程目錄 libs/armeabi 中生成文件:libfuck.so。
最后運行程序:

點擊按鈕button,textView的內容就會變成“42”。

over~
2014-03-08?