android開發源碼分析--多個activity調用多個jni庫的方法
有時候,我們在開發android項目時會遇到需要調用多個native c/jni庫檔案,以下是本人曾經實現過的方法,如果有知道其他方法,還望不吝指教。
例如,在android工程裡有兩個activity,分別是activity1和activity2,(可以進入工程目錄bin/classes路徑下查看有哪些),在這兩個activity裡都有調用jni,步驟如下:
1、 在activity1和activity2裡分別聲明native c
例如:activity1.java裡
private native String StringFromActivity1Jni();
static
{
System.loadLibrary("activity1");
}
Activity2.java裡
private native String StringFromActivity2Jni();
static
{
System.loadLibrary("activity2");
}
2、 產生 .h檔案
用命令:javah -classpath bin/classes/ -jni com.myprj.uitest.activity1和javah -classpath bin/classes/ -jnicom.myprj.uitest.activity2 產生activity1和activity2裡的標頭檔
需要特別注意的是紅色部分,一定要存在。可以進入工程目錄bin/classes路徑下查看。如果不能在jni下產生,那就mv吧。
3、 編寫Android.mk檔案:
LOCAL_PATH := $(call my-dir) //只能有一個這個路徑
include $(CLEAR_VARS)
LOCAL_MODULE := activity1
LOCAL_C_INCLUDES += $(LOCAL_PATH) \
$(LOCAL_PATH)/android
LOCAL_SRC_FILES := activity1.c
LOCAL_LDLIBS := -L$(LOCAL_PATH) -lm -lz -llog
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := activity2
LOCAL_C_INCLUDES += $(LOCAL_PATH) \
$(LOCAL_PATH)/android
LOCAL_SRC_FILES := activity2.c
LOCAL_LDLIBS := -L$(LOCAL_PATH) -lm -lz -llog
include $(BUILD_SHARED_LIBRARY)
需要注意的是:include $(BUILD_SHARED_LIBRARY)是產生動態庫,也可以產生靜態庫include $(PREBUILT_STATIC_LIBRARY)
4、 編譯:
ndk-build