linux系統編譯anroid的庫(開源庫zlib、jpeg或自己寫的庫)

環境:Ubuntu 14;android-ndk-r11;

說明:此方法適用於將各種庫移植到android上,或者將自己編寫的代碼編譯成動態庫。

方法:

1.在需要編譯成庫的代碼目錄下,添加Makefile、Android.mk、Application.mk三個文件;

2.Makefile內容如下:

###指定NDK的目錄
NDK_PATH=/xxx/xxxx/android-ndk-r11   
all:
        ${NDK_PATH}/ndk-build \
        NDK_PROJECT_PATH=./ \
        NDK_APPLICATION_MK=./Application.mk \
        APP_BUILD_SCRIPT=./Android.mk
clean:
        rm ./obj ./libs -rf

簡單分析一下這個Makefile:

因爲我們的當前目錄並不是jni目錄,ndk-build是不知道如何編譯和終止的,所以我們需要指定NDK_PROJECT_PATH、APP_BUILD_SCRIPT和NDK_APPLICATION_MK的值。

這樣我們就可以在當前目錄下進行編譯了。

 

Android.mk內容如下:

###源碼文件位置,call my-dir 由Build System提供,返回包含Android.mk的目錄路徑
LOCAL_PATH:= $(call my-dir)
###固定寫法,用於清理
include $(CLEAR_VARS)
###包含的.c文件
LOCAL_SRC_FILES := xx1.c\
xx2.c\
xx3.c
###lib name,不可包含空格
LOCAL_MODULE    := libxxx
###下面這句可以不寫
LOCAL_C_INCLUDES := $(LOCAL_PATH)
### 生成動態庫,如果是靜態庫,則爲BUILD_STATIC_LIB
include $(BUILD_SHARED_LIBRARY)

詳細的說明可見:https://developer.android.google.cn/ndk/guides/android_mk?hl=zh-cn

 

Application.mk指定ndk-build的項目範圍設置。

Application.mk內容如下:

###使用 APP_ABI 設置爲特定ABI生成代碼,這裏指定爲ARMv7,這樣與ARMv5/v6就不兼容了
APP_ABI := armeabi-v7a

其他的設置,可見:https://developer.android.google.cn/ndk/guides/application_mk?hl=zh-cn

android-ndk的安裝配置:https://blog.csdn.net/qq_38410730/article/details/94151172

 

前面介紹的是基本的設置,那如果需要在動態庫裏面調用其他的動態庫或者靜態庫,那需要如何寫呢?

寫法基本上與傳統的Android.mk 上添加動態庫是一致:

###源碼文件位置,call my-dir 由Build System提供,返回包含Android.mk的目錄路徑
LOCAL_PATH:= $(call my-dir)
###固定寫法,用於清理
include $(CLEAR_VARS)
###包含的.c文件
LOCAL_SRC_FILES := xx1.c\
xx2.c\
xx3.c
###lib name,不可包含空格
LOCAL_MODULE    := libxxx
###下面這句指定了包含的.h文件路徑
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/include
###添加動態庫、靜態庫
LOCAL_LDLIBS := -L$(LOCAL_PATH)/lib -labc
LOCAL_LDLIBS += $(LOCAL_PATH)/lib/libxx1.a
LOCAL_LDLIBS += $(LOCAL_PATH)/lib/libxx2.a
### 生成動態庫,如果是靜態庫,則爲BUILD_STATIC_LIB
include $(BUILD_SHARED_LIBRARY)

簡單的說明下,上面的Android.mk又額外鏈接了1個動態庫libabc.so 和2個靜態庫:libxx1.a和libxx2.a;將動態庫和靜態庫的.h文件放在了include目錄下,這樣就ok了。

本文爲作者原創,如需轉載,請在評論區徵得作者同意,原創鏈接:https://blog.csdn.net/anranjingsi/article/details/106100385

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