AOSP构建、编译基础理解

news2024/12/27 13:41:14

AOSP构建、编译基础理解

构建系统

参考这篇文章,写的比较好,我就不狗尾续貂了!
android build system编译系统概述

source build/envsetup.sh之后的事情

source也就是执行build/envsetup.sh里面的脚本,改脚本定义许多命令,比如lunch命令选择编译某个产品,同时它内部调用include或者inherit-product包含其他的mk文件,其他mk文件又包含了另外的mk,这样层层包含就依次展开了;

$(call inherit-product, device/google/common/common.mk)
或
include $(BUILD_SYSTEM)/version_defaults.mk

当执行了envsetup.sh后,整个系统的mk文件包含大致如下:
在这里插入图片描述
如果我们遇到不清楚某个mk是如何被包含到build构建时,就可以查看这个图,然后grep他的目录看看是如何被包含进去的

如何创建一个新的编译产品product?

一般是在device/company/产品ming/下,创建AndroidProducts.mk,在里面配置两个属性即可:

PRODUCT_MAKEFILES := \
        $(LOCAL_DIR)/makefiles.mk
COMMON_LUNCH_CHOICES := \
    product_name

COMMON_LUNCH_CHOICES :表示lunch时选择的产品名
PRODUCT_MAKEFILES:是构建此product,需要的mk配置文件
当然,不仅仅如此,要做的工作更多,需要你去编写makefiles是如何去编译的;

如何为系统添加property属性?

用如下命令即可:

PRODUCT_PROPERTY_OVERRIDES += \
        com.jack.perproty = 12345

但是在哪个文件添加呢?如上如何创建一个新的编译产品product?章节,在makefiles.mk里面添加即可,或者在其他mk,只要被makefile.mk包含的mk文件添加即可生效

文件拷贝PRODUCT_COPY_FILES

PRODUCT_COPY_FILES += device/qcom/media/demo.xml:system/etc/demo.xml

在哪个文件写入这个命令呢?同上个命令一样,被AndroidProducts.mk中编译配置mk包含的即可!

如何把apk编译进入系统?

这个很简单!在被AndroidProducts.mk包含的mk中假如:

PRODUCT_PACKAGES += \
    apps \

其中apps表示你要编译进入系统的名字;
当然,这里还没完,你还得写编译apk的mk文件,这里的apk可以分为编译apk文件和编译apk的源代码,

先说说编译apk,Android.mk和apk在同级目录,如下文件:

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
#JAVA_LIBRAYIES jar包 SHARED_LIBRAYIES so库 EXECUTABLES二进制可执行文件
LOCAL_MODULE_CLASS := APPS
#可以为user、eng、tests、optional,optional代表在任何版本下都编译
LOCAL_MODULE_TAGS := optional
#编译模块的名称
LOCAL_MODULE := CarSkin
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_CERTIFICATE := PRESIGNED
#不设置或者设置为false,安装位置为system/app,如果设置为true,则安装位置为system/priv-app?
LOCAL_PRIVILEGED_MODULE := false
#module的后缀,可不设置
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
# 关闭预编译,不会生成OAT文件
LOCAL_DEX_PREOPT := true
# 可忽略,设置后将会安装到product分区
LOCAL_PRODUCT_MODULE := true
include $(BUILD_PREBUILT)

如果App要安装到data目录,则需要将上面LOCAL_PRIVILEGED_MODULE行替换为:

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

某些特殊的apk可能需要依赖第三方lib,则可以通过PRODUCT_COPY_FILES将lib拷贝到对应的系统目录下,如system/priv-app/apk名字/lib下面

编译apk源代码

首先,需要将java源代码,依赖的第三方jar包、so拷贝到同一个目录,然后编写如下的Android.mk,

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
#递归调用java文件
LOCAL_SRC_FILES := $(call all-subdir-java-files)  
LOCAL_PACKAGE_NAME := Test
#第三方jar依赖
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := AndroidUtil:libs/AndroidUtil.jar
include $(BUILD_PACKAGE)

第三方引用可以参考此链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​GPT充当大脑,指挥多个模型协作完成各类任务,通用系统AutoML-GPT来了

使用 ChatGPT 实现通用人工智能,思路打开了。 当前,AI 模型虽然已经涉及非常广泛的应用领域,但大部分 AI 模型是为特定任务而设计的,它们往往需要大量的人力来完成正确的模型架构、优化算法和超参数。ChatGPT、GPT-4 爆火之后&…

ST典型碳化硅MOSFET驱动应用方案

ST典型碳化硅MOSFET驱动应用方案 1.栅极驱动器规格和功能实现 参考资料:ST官网应用手册《AN4671》 作者:Xiou 1.栅极驱动器规格和功能实现 以下是对栅极驱动要求的简短列表: dv / dt 的瞬变抗扰度:在整个温度范围内 50 V/ns。 …

超级简单的开源saas后台系统管理框架Vite+Vue3

大家好,今天我给大家带来一款超简saas后台管理系统框架,他是一款快速开发SAAS通用管理系统后台框架,前端采用最新的技术栈ViteTypeScriptVue3ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建&#x…

黑盒测试方法: 从原理到实战

文章目录 一. 如何设计测试用例二. 常用黑盒测试方法1. 基于需求设计的测试用例2. 等价类划分法3. 边界值4. 判定表分析法 (因果分析法)5. 正交排列6. 场景设计法7. 用例场景示例8. 错误猜测法 三. 补充案例Fiddler实现弱网测试水杯测试用例微信朋友圈测试用例淘宝购物车测试用…

ESP8266连接 TLink 云平台

1.硬件准备 (1)正点原子 ATK-ESP-01 WIFI 模块 (2)正点原子 STM32F103ZET6精英板子 (3)USB转TTL模块 2.烧录固件 (1)烧录软件和固件都可以在正点原子增值资料包找到。 (2…

网络安全基础--dns劫持及IP信息收集

0x01 验证是否存在CDN 方法1: 很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有:多个地点Ping服务器,网站测速 - 站长工具网站测速工具_超级ping…

创建python虚拟环境的两种方法

创建python虚拟环境的两种方法 一、anaconda环境下1、检查是否安装了anaconda2、创建虚拟环境3、激活虚拟环境4、其他命令 二、python纯净环境下1. 安装virtualenv2. 创建虚拟环境3. 激活虚拟环境 一、anaconda环境下 1、检查是否安装了anaconda 只有在anaconda环境下才能创建…

近百个最新免费chatgpt访问集合,包含国内直接访问和国外升级版本

近百个最新免费chatgpt访问集合,包含国内直接访问和国外升级版本。 ChatGPT是一个基于人工智能的聊天机器人,它可以与用户进行自然语言交互。ChatGPT使用了最新的自然语言处理技术,包括深度学习和神经网络,以便更好地理解用户的…

慎投,5月有4本SCIE期刊被剔除(附SCI/SSCI目录下载)

2023年5月SCI、SSCI期刊目录更新 2023年5月18日,科睿唯安更新了WOS期刊目录,继上次4月WOS期刊目录剔除8本SCIE&SSCI期刊之后,此次5月更新又有4本SCIE期刊发生变动,其中有1本期刊被踢出SCIE数据库,3本期刊更改了名…

pdf怎么转换成ppt文件,5种方法任你选

pdf怎么转换成ppt文件?想必这是我们办公过程中非常常见的问题吧。众所周知,PDF文件格式通常用于存储文档,其内容可能是图像、文字或表格,展示在一个页面上。PPT文件格式通常用于创建演示文稿,其中每个页面都是幻灯片&a…

探秘音乐疗法——基于音乐的喂养环境对小鼠肠道菌群影响的研究

音乐对身心的影响 近年来,环境和动物生理及心理的相关研究越来越多。环境因素的丰富性和多样性是改善动物生理和心理状态的重要研究参数。 环境因素指的是正常环境,在这种环境中,动物通过获得环境激励以做出有益的增强,使它们能够…

怎么把两个pdf合并成一个?三种合并方法任你选择

PDF 格式是一种常见的跨平台文件格式,因此在日常生活和工作中,我们可能需要处理或编辑多个 PDF 文件,并将它们合并为一个文件,以方便查阅和共享。因此,将两个PDF文件合并是非常重要的。首先,两个PDF合并成一…

2023年最新整理渗透测试面试题

1、include、include_once、require、 require_once区别 参考答案: 1、require()和require_once()函数: (1)require()函数引入文件不存在时,将立即退出程序,不再向下执行。 (2)…

AD16中如何创建新工作空间

1、双击“DXP.exe” 如果默认安装,DXP.exe文件位于“C:\Program Files (x86)\Altium\AD16”目录下。 2、打开AD后,我们会看到默认工作空间为“Workspace1.DsnWrk” 3、在“F盘”下创建一个文件夹。命名为“AD16学习”。 4、点击“File-Save Design Work…

Git宝典

版本管理工具介绍 现在比较流行的版本管理工具是git,但是实际上git是近几年才发展起来的,可能有一些老的项目,还在用一些老的软件,如svn 版本管理发展简史 SVN(SubVersion) 工作流程 SVN是集中式版本控…

ClickHouse介绍_安装_准备工作_单机安装---大数据之ClickHouse数据库002

首先要修改一下centos的一些限制,这里是文件数的限制,还有进程的限制 要关闭selinux要关闭防火墙 可以看到执行ulimit -a 可以看到linux系统的一些限制 我们要修改的是上面标注的两个配置,一个是文件数,一个是进程数 去编辑这个文件去修改配置 添加上,这些配置 * soft nofile…

京东商品详情API调用说明 京东商品库存销量接口

尊敬的开发人员: 感谢您选择使用京东API进行开发。下面为您提供一份简要的API调用说明,帮助您快速上手并实现所需功能。 1.注册京东开放平台账户并创建应用 首先,您需要在 https://o0b.cn/jennif/ 网站上注册一个京东开放平台的账户&#…

mybatis的一级二级缓存详解及源码解剖

文章目录 什么是一级缓存?什么是二级缓存?一级缓存二级缓存有什么不同?执行流程源码流程解剖一级缓存失效场景分析二级缓存结构及需要解决的问题二级缓存执行流程二级缓存获取和commit源码解剖总结 什么是一级缓存? 一级缓存是指…

如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总

苹果APP安装包ipa如何安装在手机上?很多人不知道怎么把ipa文件安装到手机上,这里就整理了苹果APP安装到iOS设备上的方式,仅供参考 苹果APP安装包ipa如何安装在手机上?使用过苹果手机的人应该深有感触,那就是苹果APP安…

opencv 裁剪超大 tif 图像制作深度学习数据集

文章目录 1. 尝试暴力裁剪(24 位)2. 带透明度读取 (32 位)3. 裁剪标签(8 位) 本文只是进行了简单的尝试,未单独处理最右侧、最下侧和右下角区域,且未设置重叠率 若使用 gdal 进行 ti…