Android.mk的基本语法
来源:互联网 发布:aerial windows 编辑:程序博客网 时间:2024/05/29 04:57
Android.mk的基本语法
一、基本使用方法
Android.mk的作用:编译生成native 库,供上层使用
编译方法:进入Android.mk所在的路径,执行编译命令:mm
生成库的路径:在执行mm成功后,会在屏幕上print出来,一般放在路径:out\target\product\msm8625\system\lib
可以使用如下命令直接将生成的库push到手机中
adb push *.so /system/lib/
二、文件的基本结构
Android.mk文件主要用来生成*.so, 一个Android.mk文件可以生成一个或者多个*.so
每生成一个*.so的程序段是一样的,如下为生成一个库libsensors.msm7627a_sku7.so的程序段结构
1 LOCAL_PATH := $(call my-dir)
2 include $(CLEAR_VARS)
3
4 LOCAL_MODULE := sensors.msm7627a_sku7
5 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
6 LOCAL_MODULE_TAGS := optional
7 LOCAL_CFLAGS := -DLOG_TAG=\"Sensors\" \
8 -Wall
9 LOCAL_CFLAGS += -DCM3623_SENSOR
10 LOCAL_SRC_FILES := \
11SensorBase.cpp \
12InputEventReader.cpp \
13AkmSensor.cpp \
14Cm3623.cpp \
15ProximitySensor.cpp \
16LightSensor.cpp \
17AccSensor.cpp \
18sensors.cpp
19
20
21 LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../mlsdk/platform/include
22 LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../mlsdk/platform/include/linux
23
24 LOCAL_SHARED_LIBRARIES := liblog libcutils libdl
25 LOCAL_PRELINK_MODULE := false
26
27 include $(BUILD_SHARED_LIBRARY)
以蓝色标记的第1行和第27行是整个程序段的开始和结束标识,如果在这个Android.mk文件中要编译其它的模块,那么只需添加相同的程序段就可以了
第1行是将当前的路径保存在变量LOCAL_PATH中
第4行指定编译模块的名称为sensors.msm7627a_sku7, 当编译通过后,会生成库,自动在这个名字前面加前缀lib,在后面加文件名.so
形成libsensors.msm7627a_sku7.so
第5行指定这个库文件输出的路径
第6行说明此模块被编译的条件
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
第7~9行指定编译器选项
第10~18行指定编译的源文件列表
第21~22行指定头文件路径
第24行指定这个模块在运行时要依赖的共享库模块列表,在链接时需要,在生成文件时嵌入的相应的信息。
三、其它语法或者变量
LOCAL_STATIC_LIBRARIES:
应该链接到这个模块的静态库列表(使用BUILD_STATIC_LIBRARY生成),这仅仅对共享库模块才有意义。
四、其它要点
1. 变量赋值符号 :=和=的区别
:=表示如果它右边是一个变量,那么只能取这条语句之前变量定义的值,不能取这条语句之后变量定义的值
: 表示,如果它右边是一个变量,那么这个变量定义在这第语句之前或者之后都是可以的。
2. Android.mk中的很多选项都定义在文件android/build/core/config.mk中
比如 CLEAR_VARS, BUILD_SHARED_LIBRARY等。
3. $表示引用变量的值
4. 编译应用程序的Android.mk的模板:
LOCAL_PATH := $(call my-dir)
...
...
include $(BUILD_EXECUTABLE)
5. 编译静态链接库的Android.mk的模板:
LOCAL_PATH := $(call my-dir)
...
...
include $(BUILD_STATIC_LIBRARY)
6. 静态链接库和动态链接库有什么区别?
7. LOCAL_CFLAGS有两个作用:
定义宏
如:
LOCAL_CFLAGS += -D_ANDROID_
表示定义一个宏
#define _ANDROID_
引入第三方头文件
如:
LOCAL_CFLAGS += -include bionic/libc/kernel/common/linux/un.h
8. LOCAL_MODULE_TAGS这个变量用于指定该模块在何种情况下被编译
可选的值有几个:
user: 该模块只在user模式下才被编译
eng: 该模块只在eng模式下才被编译
tests: 该模块只在tests模式下才被编译
optional: 该模块在所有模式下都会被编译
0 0
- Android.mk的基本语法
- android.mk的语法
- android的Android.mk语法
- Android.mk的语法规范
- Android.mk文件的语法详细定义
- Android.mk文件的语法详细定义
- Android.mk文件的语法详细定义
- Android.mk文件的语法详细定义
- Android.mk文件的语法详细定义
- Android.mk文件的语法解析
- Android.mk语法
- Android.mk语法规则
- Android.mk语法说明
- Android.mk语法
- Android.mk 语法介绍
- Android.mk文件语法
- Android.mk语法规范
- android.mk语法详解
- Java - Difference between Abstract class and Interface
- oracle 建立物化视图
- Swift 面试题及其答案
- 前后摄像头转换
- 驾考宝典 For Android 5.3 货车专版去广告版(学车考驾照必备软件 )
- Android.mk的基本语法
- Archetype&Specification&Publish-Subscribe
- 第4周—项目3.(3)单链表递增
- Linux Shell编程入门
- 知识复习(LDT+TSS+GATE+INTERRUPT)
- Mobile Web前端开发系列: 事件处理
- HDU 4292--Food【最大流 && 拆点】
- 213 House Robber II
- Building an AAR Library in Android Studio