轉載請注明:http://www.cnblogs.com/tiantianbyconan/p/3396595.html
Java Native Interface (JNI)標准是java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI 是本地編程接口,它使得在 Java 虛擬機 (VM) 內部運行的 Java 代碼能夠與用其它編程語言(如 C、C++ 和匯編語言)編寫的應用程序和庫進行交互操作。
1. 下載NDK(http://developer.android.com/tools/sdk/ndk/index.html),並解壓,配置Path路徑
2. 在項目中新建一個名為jni的文件夾,在jni中新增Android.mk文件,文件內容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := PhotoUtil LOCAL_SRC_FILES := PhotoUtil.c LOCAL_LDLIBS := -llog -ljnigraphics include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE:當前模塊的名稱
LOCAL_SHARED_LIBRARIES:當前模塊需要依賴的共享庫。
LOCAL_SRC_FILES:所要調用的C源碼
3. 把PhotoUtil.c文件復制到jni目錄下
PhotoUtil.c,包含一個圖片處理方法:
JNIEXPORT void JNICALL Java_com_wangjie_customviews_PicturesDialog_functionToBlur(JNIEnv* env, jobject obj, jobject bitmapIn, jobject bitmapOut, jint radius) { …… }
方法Java_com_wangjie_customviews_PicturesDialog_functionToBlur的取名方式:
Java_:固定
com_wangjie_customviews:java包名
PicturesDialog:java類名
functionToBlur:java使用的方法名
4. 編譯C源碼,生產so庫文件
進入jni目錄:
ndk-build 或者
ndk-build APP_PLATFORM=android-8
"Compile thumb : PhotoUtil <= PhotoUtil.c SharedLibrary : libPhotoUtil.so Install : libPhotoUtil.so => libs/armeabi/libPhotoUtil.so
執行完畢之后,android項目的libs目錄下就會生成so文件:
\libs\armeabi\libPhotoUtil.so
5. 在android中java代碼調用:
static{ System.loadLibrary("PhotoUtil"); }
加載photoUtil庫(libPhotoUtil.so)
並添加:
private native void functionToBlur(Bitmap bitmapIn, Bitmap bitmapOut, int radius);
然后在其他地方只需要調用該functionToBlur()方法即可:
functionToBlur(bgBitmap, bitmapOut, 50);
參考:
http://www.ibm.com/developerworks/opensource/tutorials/os-androidndk/section5.html
http://developer.android.com/tools/sdk/ndk/index.html#Installing
http://stackoverflow.com/questions/2067955/fast-bitmap-blur-for-android-sdk