編輯:關於Android編程
最近做一個jni項目,拿到的so庫需要用jni封裝一層,等於是在jni的C++代碼裡調用第三方庫的方法,然後整個項目在Android上運行出結果。
自己用jni生成的so是libaa.so 使用的第三方庫是libbb.so。
到目前為止,遇到的問題是libbb各種找不到。libbb庫去哪兒了?
E/AndroidRuntime(11626): Caused by: java.lang.UnsatisfiedLinkError:
Cannot load library: soinfo_link_image(linker.cpp:1640):caused by load_library(linker.cpp:750): library libbb.so not found
以上錯誤是在運行階段發生的,事實上編譯階段也發生過找不到第三方的問題,表現就是庫裡實現的方法undefined。
分兩方面解決
1,編譯階段找不到庫,需要修改MK文件。
1.libbb.so放在jni/prebuilt文件夾(自己新建),同時把Android.mk復制一份到prebuilt下。
2.libbb.so的mk如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := bb LOCAL_SRC_FILES := libbb.so include $(PREBUILT_SHARED_LIBRARY)
3.libaa.so的mk文件需要引入上面的mk。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := aa LOCAL_SRC_FILES := aa.cpp LOCAL_LDLIBS := -llog LOCAL_SHARED_LIBRARIES := bb include $(BUILD_SHARED_LIBRARY) include $(LOCAL_PATH)/prebuilt/Android.mk
這樣在編譯階段就可以連接到第三方庫咯。
2.運行階段找不到庫
在運行階段找不到庫就是Android的事情了。後來發現是load庫的順序(默哀一個,破順序。。)。
static { System.loadLibrary(bb); System.loadLibrary(aa); }先load第三方庫,再load自己的庫,因為aa庫要用bb庫裡的方法,是依賴於bb庫的,所以要先load。。
這樣在運行階段也可以找到庫咯。
通常情況下我們想實現文字的走馬燈效果需要在xml文件中這樣設置 <textview android:layout_width="wrap_content
以前對於這個機制理解不夠深刻,現在重新整理下思路。 一、建模 我理解的接口回調就是,我這個類實現了一個接口裡的方法doSomething,然後注冊到你這裡,然後我就去做別
一、概述一般大量圖片的加載,比如GridView實現手機的相冊功能,一般會用到LruCache,線程池,任務隊列等;那麼異步消息處理可以用哪呢?1、用於UI線程當Bitm
說明:android的線程使用。android的線程無非就是Main Thread和Worker Thread。(除了主線程Main Thread之外的其他線程都是Wor