linux系统编译anroid的库(开源库zlib、jpeg或自己写的库)

   日期:2020-05-14     浏览:88    评论:0    
核心提示:环境: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 \\N...移动开发

环境: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

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服