Android系统模块编译Makefile编写规则
Android.mk的基本构成
这个Android.mk 会编译出一个hello的可执行文件,并放入system/bin
LOCAL_PATH := $(call my-dir) #指定当前目录 include $(CLEAR_VARS) #引入编译变量
LOCAL_MODULE := hello #编译出来的模块名
LOCAL_MODULE_TAGS := optional #编译选项便是在何种情况下编译
LOCAL_SRC_FILES := hello.c #源文件(可以指定多个)
LOCAL_MODULE_CLASS := EXECUTABLES #指定编译之后放置的位置(此处指示放在system/bin下)
include $(BUILD_EXECUTABLE) #引入编译成可执行文件的规则
参考实例
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE := SystemCore
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := SystemCore_v5.2.5.7-10.apk
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/app
include $(BUILD_PREBUILT)include $(CLEAR_VARS)
LOCAL_MODULE := libjni_gpiocontrol.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := libjni_gpiocontrol.so
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/lib
include $(BUILD_PREBUILT)
代码编译规则
LOCAL_PATH
指定目录,以上是一般用法指示当前目录(my-dir函数是Android编译时. build/envsetup.sh命令生成的 能够获取当前目录的路径)include $(CLEAR_VARS)
android有自己的一套代码编译规则跟编译选项等变量的定义,此变量实际是build/core/clear_vas.mk
LOCAL_MODULE
必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格LOCAL_MODULE_TAGS
user 模块只在user版本下编译
eng 模块只在eng版本下编译
tests 模块只在test版本下编译
optional 模块在所有版本下都编译
- LOCAL_MODULE_CLASS
标识了所编译模块最后放置的位置,如果不指定,不会放到系统中,之后放在最后的obj目录下的对应目录中.
编译C/C++规则build/core/definitions.mk
LOCAL_MODULE_CLASS用于制定LOCAL_MODULE_PATH的路径所在
自己编写的Android.mk可不显示的指定LOCAL_MODULE_CLASS的值。
但当遇到include $(BUILD_PREBUILT)的预编译选项时不会指定模块模块编译输出的类型CLASS,需要在自己编写的Android.mk中明确指定LOCAL_MODULE_CLASS的值如ETC/APP等,使其值为非空,从而帮助系统确定LOCAL_MODULE_PATH的路径,比如最终编译输出LOCAL_MODULE_PATH := $(TARGRT_OUT_ETC)。
LOCAL_MODULE_CLASS := ETC #表示放于system/etc目录
LOCAL_MODULE_CLASS := EXECUTABLES #放于/system/bin
LOCAL_MODULE_CLASS := SHARED_LIBRARIES #放在/system/lib下
LOCAL_MODULE_PATH
目标安装路径LOCAL_MODULE_RELATIVE_PATH
指定动态库的相对路径,以各自编译对象放置的目录为参考。
android.mk文件中有
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw 改为
LOCAL_MODULE_RELATIVE_PATH := hw
后一种可以分别在lib和lib64下分别生成32位和64位的so文件
- LOCAL_CERTIFICATE
签名方式
testkey 普通APK,默认情况下使用。
platform 该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
shared 该APK需要和home/contacts进程共享数据。
media 该APK是media/download系统中的一环。
- LOCAL_SRC_FILES
源文件列表
#添加所有cpp文件MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/src/core/*.cpp)
LOCAL_SRC_FILES := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
- include $(BUILD_XXX)
表示编译出来的模块类型,有三种
BUILD_EXECUTABLE 编译成可执行的模块 build/core/host_executable.mk
BUILD_STATIC_LIBRARY 编译成静态库 build/core/host_static_library.mk
BUILD_SHARED_LIBRARY 编译成动态库 build/core/host_shared_library.mk
BUILD_PREBUILT :
这种方式把文件当成编译项目,在Android.mk中copy一个file
Android系统模块编译Makefile编写规则相关推荐
- Android系统模块编译
#环境生效 source build/envsetup.sh lunch 5 #清理编译 make clean #更新系统改动API make update-api #8线程编译 make -j8 # ...
- tiny4412开发板Android篇_2基于tiny4412的Android系统的编译
tiny4412开发板使用的android系统版本是android5.0.2,由友善之臂公司提供,下载网址: https://pan.baidu.com/s/1pnn6N8Wpsx8PISLmKT59 ...
- android.mk 模块编译,通过Android.mk添加一个编译模块到系统中的顺序如下
①LOCAL_PATH ②CLEAR_VARS ③LOCAL_SRC_FILES ④LOCAL_CFLAGS(可选) ⑤LOCAL_MODULE ⑥LOCAL_STATIC_LIBRARIES(可选) ...
- Android Studio 导入 Android 系统模块并编译和调试
FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式 http://liuwang ...
- 一篇文章看懂makefile编写规则
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- 【整理】Makefile编写规则
Makefile 文章目录 Makefile Makefile的规则 语法 通配符 文件搜寻 伪目标 多目标 静态变量 自动生成依赖性 书写命令 嵌套执行make 定义命令包 变量使用 变量基础 变量 ...
- 关于Android的硬件抽象层添加进Android系统默认编译的问题
这里主要是遇到两个问题:第一个是,自己编写的hal层源码怎么添加进Android的默认编译中去,也就是说在根目录执行make时,自己编写hal源码也会被编译.第二个问题是,编译完成后还要自动安装在指定 ...
- Android系统反编译FrameWork层虚拟定位方法
首次发帖,如有不规范的地方还望多多包涵 起因是因为需要做模拟定位的功能,最终是过金融类app的定位 ,root.框架分分钟被砍死 迫于无奈,直接从操作系统入手,反正hook也不过是hook那几个系统里 ...
- Android Framework 模块编译
在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用 进入项目根目录 cd frameworks/base/core/re ...
- android 单个模块编译的方法
单个模块编译的方法 $.build/envsetup.sh mmm packages/apps/Contacts/ 示例编译联系人 这时生成 out/target/product/generic ...
最新文章
- 递归/分治:归并排序
- Spring Boot + Vue.js 实现前后端分离(附源码)
- 用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)--生成SSL证书请求...
- matlab摆线等时性程序,摆的等时性实验报告.doc
- linux桌面文件夹改图标,Linux 给桌面程序设置个性化图标
- 浅谈Java中的数据类型以及面向对象
- python二维列表做参数_python sum函数iterable参数为二维list,start参数为“[]”该如何理解...
- asp.net core安全事项(下)
- 前端学习(501):水平居中布局得第二种方式的优缺点
- 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
- 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
- ios7之后的一些更改
- 【STM32】按键---有关GPIO输入的那些事
- c语言规范标准c99中文版下载,c99标准找到了,中文HTML页面
- 传智播客到底在坚持什么?
- 实际BCI应用:异步EEG/EOG BCI手抓取和释放的可行性
- 你是如何看待saas行业
- 基于GeoEvent Processor的物联网应用案例赏析
- 如果程序员能早知道这些该有多好!
- Flutter第一天