IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android.mk 实战 -> 正文阅读

[移动开发]Android.mk 实战


综述

# makefile变量区分大小写
# 一般变量名都是大写,函数名都是小写的
##########################################################


# LOCAL_PATH 必须放在android mk文件的第一行
LOCAL_PATH := $(call my-dir)

# 日志输出warning error,其中error会停止运行  
$(warning $(this-makefile)) #输出当前makefile的绝对路径,注意include会影响其值


# 清空除了LOCAL_PATH以外的LOCAL_<name>变量,例如LOCAL_MODULE,LOCAL_SRC_FILES
# android构建系统将变量CLEAR_VARS的值设置为clear-vars.mk文件的位置,因此使用include语法
include $(CLEAR_VARS)

# 构建的模块的名称,加上适当的前缀和后缀就变成了构建所生成文件的文件名
LOCAL_MODULE := hello-jni

# 可选目录列表,用来搜索文件
LOCAL_C_INCLUDES := $(LOCAL_PATH)/thirdparty \
					$(LOCAL_PATH)/thirdparty/include 

# 指明源文件,多个源文件之间用空格分隔
LOCAL_SRC_FILES := hello-jni.c

# 构建动态库,库文件名为libhello-jni.so
# 如果使用BUILD_EXECUTABLE可以直接编译成可执行文件
include $(BUILD_SHARED_LIBRARY)

##############################################
# 可以在多个NDK项目间共享一个模块
# 首先将共享模块源代码移动到NDK项目以外的位置,例如 C:\android\shared-modules\transcode\audiolib
# audiolib 的也需要一个mk文件,正常编译为共享库即可
# 在使用共享库项目的mk文件末尾添加 $(call import-module,transcode/audiolib)
# import-module函数宏只搜索固定路径,为了搜索C:\android\shared-modules,需要新建一个NDK_MODULE_PATH的环境变量
# 并设置值为C:\android\shared-modules
###############################################


###########################################################
# 变量:
# LOCAL_C_INCLUDES:可选目录列表,NDK安装路径的相对路径,用来搜索文件
# LOCAL_CFLAGS: 可选编译器标志,在编译C和C++源文件时会被传送给编译器
# LOCAL_CPPFLAGS: 可选编译标志,只在编译C++源文件的时候被传送给编译器
# LOCAL_LDLIBS: 链接标志的可选列表,当对目标文件进行链接以生成输出文件时
#               该标志被传送给链接器。它主要用于传送要进行动态链接的系统库的列表
#               一般我们用LOCAL_LDFLAGS := -llog 链接android日志库
# LOCAL_EXPORT_CFLAGS: 该变量记录一组编译器标志,这些标志会被添加到通过变量LOCAL_STATIC_LIBRARIES或LOCAL_SHARED_LIBRARIES
#                      使用本模块的其他模块的LOCAL_CFLAGS定义中
# LOCAL_EXPORT_CPPFLAGS:
# LOCAL_EXPORT_LDFLAGS:
# LOCAL_EXPORT_C_INCLUDES
#
# 当编译链接出错时,可以添加编译参数 -v 并查看相应的库文件是否被正常链接
# 在c编译时,代码中可以使用#error “字常串“ 或者#warning "字符串" 进行预编译输出
#############################################################

实战一、编译静态库后链接

1.1 目标

现有第三方库audio的源文件 audioPlayer.cpp, audioRecorder.cpp, audioPlayer.h, audioRecorder.h,其中头文件唯一thirdparty/audio目录下,要求将其编译为静态库之后再链接到动态库audioPlugin中。

1.2 实战

代码如下(示例):

# my-dir是一个宏功能,变量名要大写
LOCAL_PATH := $(call my-dir)

##################################
# 编译静态库audio.a
##################################

include $(CLEAR_VARS)

LOCAL_MODULE := audio

# 指定头文件查找路径
LOCAL_C_INCLUDES := \
			$(LOCAL_PATH)/thirdparty \
			$(LOCAL_PATH)

LOCAL_SRC_FILES := audioPlayer.cpp audioRecorder.cpp

include $(BUILD_STATIC_LIBRARY)

##################################
# 编译动态库audioPlugin
##################################

include $(CLEAR_VARS)

LOCAL_MODULE := audioPlugin

# 指定头文件查找路径
LOCAL_C_INCLUDES := \
			$(LOCAL_PATH)/thirdparty \
			$(LOCAL_PATH)
			
LOCAL_SRC_FILES := audioPlugin.cpp

# 链接静态库
LOCAL_STATIC_LIBRARIES := audio

include $(BUILD_SHARED_LIBRARY)

# 注意,当多个共享库要链接同一个静态库时,每个共享库都会得到一个静态库的副本,因而
# 增加了程序大小,这个时候可以考虑将共享模块编译为动态库

实战二、预编译第三方动态库后链接

1.1 目标

现有第三方库libaudio.so,和其头文件audioPlayer.h, audioRecorder.h,其中头文件唯一thirdparty/audio目录下,要求将其链接到动态库audioPlugin中。

1.2 实战

代码如下(示例):

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# 指定头文件查找路径
LOCAL_C_INCLUDES := $(LOCAL_PATH)/thirdparty 
			
LOCAL_MODULE := audio

LOCAL_SRC_FILES := libaudio.so

include $(PREBUILT_SHARED_LIBRARY)

##################################
# 编译动态库audioPlugin
##################################

include $(CLEAR_VARS)

LOCAL_MODULE := audioPlugin
			
LOCAL_SRC_FILES := audioPlugin.cpp

# 链接预构建的共享库
LOCAL_SHARED_LIBRARIES := audio

include $(BUILD_SHARED_LIBRARY)
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:34:50  更:2021-09-23 11:35:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:32:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码