Android上安裝第三方庫

原文鏈接:http://www.cnblogs.com/tid-think/p/11078692.html

在Android sdk中安裝預安裝第三方的(動態,靜態)庫,到系統中,方便模塊無差別的使用。

Android.mk

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS := lib/libAirFlyWfd.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_MULTI_PREBUILT)

編譯安裝後系統會拷貝創建如下三個文件

out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver_intermediates\export_includes

其中

out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
是用來打包到arm板子上的。
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
是用來供其他模塊編譯的時候鏈接調用的。

需要使用時只需要想連接其他系統庫一樣加入

LOCAL_SHARED_LIBRARIES := \
libAirFlyWfd \

-----------------------------------以下是採坑的過程---------------------------
按照將所網上的信息,還有以下兩種方式,但是經過測試在android4.4.2上都不能正常使用

方法一 使用include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libAirFlyWfd
LOCAL_MODULE_CLASS :=SHARED_LIBRARIES
LOCAL_SRC_FILES := lib/libAirFlyWfd.so
include $(BUILD_PREBUILT)

這個方法最後的結果是如下,


out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver_intermediates\export_includes

打包到兩個lib目錄下的文件沒有.so後綴,這樣導致其他模塊調用libAirFlyWfd這個庫的候在

out\target\product\dolphin-fvd-p1\obj\lib\目錄下找不到libAirFlyWfd.so而報錯
make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/lib/libAirFlyWfd.so'

 


同時打包到板子上的
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd這個文件也沒有法識別成動態庫

如果改成

LOCAL_MODULE := libAirFlyWfd.so
安裝完後如下
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver.so_intermediates\export_includes

庫文件名稱是ok的,但是

libAirFlyReceiver.so_intermediates目錄名稱不對,多了.so導致其他模塊調用時找不到export_includes
make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/SHARED_LIBRARIES/libAirFlyWfd_intermediates/export_includes'

 

方法二 使用include $(PREBUILT_SHARED_LIBRARY)

 

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE :=libAirFlyWfd.so
LOCAL_SRC_FILES := lib/libAirFlyWfd.so
include $(PREBUILT_SHARED_LIBRARY) 
按照以上方法執行Android.mk後沒有任何反應,android 4.4.2上應該沒有定義
include $(PREBUILT_SHARED_LIBRARY) 對應的操作方法,貌似是NDK r5以後才支持這個操作,具體沒測試過。
最後參考
https://blog.csdn.net/lizhiguo0532/article/details/7219349
使用
include $(BUILD_MULTI_PREBUILT)方法才ok。

------------------------------------------------------------
以上是安裝成系統的共享庫,方便所有模塊使用。
如果只是某個模塊單獨使用,可以在對應的Android.mk中直接使用
LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libAirFlyWfd.so
來指定庫的路徑。

同時別忘了將該庫拷貝(PRODUCT_COPY_FILES)到/system/lib/下,才能燒錄到板子,否則依賴此庫的應用在板子上都無法正常啓動。

轉載於:https://www.cnblogs.com/tid-think/p/11078692.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章