Android中集成第三方軟件包(.jar, .so)

田海立@CSDN

2012-08-28

 

Android中可能會用到第三方的軟件包,這包括Java包.jar和Native包.so。jar包既可通過Eclipse開發環境集成,也可通過編譯源碼集成,看你的工作環境。

 

假定自己開發的程序爲MyMaps,需要用到BaiduMaps的庫,包括baidumapapi.jar和libBMapApiEngine_v1_3_1.so。

 

一、Eclipse中集成第三方jar包及.so動態庫

 

MyMaps工程下創建目錄libs以及libs/armeabi,把baidumapapi.jar放在的libs/目錄下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。

 

Eclipse中把第三方jar包baidumapapi.jar打包到MyMaps的步驟:

 

1.      右擊工程,選擇Properties;

2.      Java Build Path,選擇Libraries;

3.      Libraries頁面點擊右面按鈕“Add Library…”;

4.      選擇“User Library”,點擊“Next”;

5.      點擊“User Libraries”按鈕;

6.      在彈出界面中,點擊“New…”;

7.      輸入“User library name”,點擊“OK”確認;

8.      返回之後,選擇剛剛創建的User library,右面點擊“AddJARs”;

9.      選擇MyMaps/libs/下的baidumapapi.jar;

10.  確認,返回。

 

這樣,編譯之後,該jar包就會被打進MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。

程序運行過程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,加載動態庫時系統會從程序的該lib/目錄下查找.so庫。

 

二、源碼中集成第三方集成jar包及.so動態庫

 

Android源碼中MyMaps放在packages/apps下。MyMaps下創建目錄libs以及libs/armeabi,並把baidumapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。

 

2.1 修改Android.mk文件

 

Android.mk文件如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
 
LOCAL_STATIC_JAVA_LIBRARIES := libbaidumapapi
 
LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
LOCAL_PACKAGE_NAME := MyMaps
 
include $(BUILD_PACKAGE)
 
##################################################
include $(CLEAR_VARS)
 
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libbaidumapapi:libs/baidumapapi.jar
LOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.so
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)
 
# Use the following include to make our testapk.
include $(callall-makefiles-under,$(LOCAL_PATH))

 

1 集成jar包

LOCAL_STATIC_JAVA_LIBRARIES取jar庫的別名,可以任意取值;

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar庫的規則,格式:別名:jar文件路徑。注意:別名一定要與LOCAL_STATIC_JAVA_LIBRARIES裏所取的別名一致,且不含.jar;jar文件路徑一定要是真實的存放第三方jar包的路徑。

編譯用BUILD_MULTI_PREBUILT

2 集成.so動態庫

LOCAL_PREBUILT_LIBS指定prebuilt so的規則,格式:別名:so文件路徑。注意:別名一般不可改變,特別是第三方jar包使用.so庫的情況,且不含.so;so文件路徑一定要是真實的存放第三方so文件的路徑。

編譯拷貝用BUILD_MULTI_PREBUILT

 

2.2 加入到GRANDFATHERED_USER_MODULES

 

在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中

GRANDFATHERED_USER_MODULES += \
    … \
    libBMapApiEngine_v1_3_1

 

user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推薦修改$(TARGET_DEVICE_DIR)下的。

 

2.3 編譯結果

 

MyMaps.apk編譯生成在out/target/product/<YourProduct>/system/app/下;

libBMapApiEngine_v1_3_1.so放在out/target/product/<YourProduct>/system/lib/下,這也是系統加載動態庫時搜索的路徑。

 

發佈了88 篇原創文章 · 獲贊 16 · 訪問量 124萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章