Android 深入系统完全讲解(13)

news2024/11/23 18:57:11

3 编译过程讲解

1 系统的编译过程
Android 的编译使用的 Makefile,推荐大家使用《GNU make 中文手册》,这本书有电子版,非常方便,主要是要理解清楚 Makefile 的规则,编译策略,可以通过写简单的编译机制,熟悉下即可。

我们真正学习的时候,只需要记住怎么追踪问题,这个才是我们要掌握的。我们这里先简单来说下编译过程。

还是遵循速战速决,不会把这块细枝末节都去说,但是我这里分享个技巧,就是我们在找问题的时候,可以使用策略,就是 Makefile 中打印 Log 。其实 gcc 里面还有就是-v 参数,可以显示输出的命令。

而安卓编译的过程,都可以在 out 目录下找到。Makefile 主要就是目标,依赖,然后就是编译命令,因为牵扯很多内置方法,所以掌握的时候会麻烦一些,这里建议学习下,把推荐的书籍看完,这个就可以搞定。

build/envsetup.sh 这个会扫描系统的配置文件,同时呢会设置一些内置方法,像随后的 lunch mmm 这些都是在这里面定义的。

Lunch 用来选择具体要编译哪个项目?选定后会设置全局变量,TARGET_PRODUCT,TARGET_BUILD_TYPE,这个怎么找,就是前后的 export 导出来一比对就知道差异是哪些了。

这个里面会进行讲项目相关的 mk 加载进来,依赖加入进来,然后我们经常可以看到的就是vendor 下面也会有一些包,比如 GMS 包。
项目一般可以选择 user 版本,eng 版本,还有个 user-debug,一般我们研发是用的 eng 版本,出版本的时候是 user,这两者一般会出现就是权限相关的问题,要特别注意。

这里简单引用下网络朋友画的图:
在这里插入图片描述
这里一般情况下,我是不跟踪记录这块的,因为意义不大,我们经常切换项目,而且依据我之前写的,会调试 Makefile,抓取 Log 非常关键,主要一般情况,相关编译路径为:

device\common 配置项目目录,这里 common 可以是其他。
build\make\core 编译时候一些系统属性处理地方,可以参考这里。

vendor 目录下也经常有 mk,主要是三方客制化的,这个一般都是在 device 里面 include 进去的。

在我们配置 BUILD_SHARED_LIBRARY 时候,我之前写过直接找到这个的具体实现 mk 文件,进行分析,这样子基本上你遇见系统的编译,都知道是什么了。

BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
这才是我们要掌握的技巧,遇见问题知道如何定位,找到代码位置。如果有任何疑问,欢迎找我咨询。

这个编译机制了解原理后,在工作中就是快速定位,找到问题点解决,这个在之前给公司优化过编译机制,梳理出来客制化资源的原理,以及移植一套编译机制。

所以不存在说不知道细节,就不会,因为我们要掌握的是方法,而不是记住在哪里。遇到新问题怎么解决的能力?之前遇见 u 盘无法加载,最后发现我们客制化的 u 盘 label 太长,挂载失败,这个实在 uevent 里面定位到 mount 命令,然后使用 mount 单独测试,发现就是失败,找到的代码查出来原因。

太多新问题会面对,所以记住是错误的处理方式,而应该是记住一套策略,遇见这类问题能够知道怎么解决,而我也着重梳理这块的知识。

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

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

相关文章

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结Red…

70、SSDNeRF: Semantic Soft Decomposition of Neural Radiance Fields

简介 官网:https://www.siddhantranade.com/research/2022/12/06/SSDNeRF-Semantic-Soft-Decomposition-of-Neural-Radiance-Fields.html SSDNeRF,将语义信号与场景的辐射信号联合编码,提供了场景的软分解为语义部分,能够正确编码…

【HCIA-openEuler】实验手册—09【openEuler综合实践】

文章目录一、实验介绍1、关于本实验2、实验目的二、实验任务配置1、配置思路2、配置步骤步骤1:挂载系统ISO,并配置好本地dnf源步骤2:配置软件安装源步骤3:安装文件共享服务三、设置文件共享用户与权限1、实验介绍(1&am…

【Linux】编辑器 - vim 的使用与配置

目录 1、vim的基本概念 2、vim的基本操作 2.1、vim 编辑器的进入与退出 2.2、插入模式 2.3、命令模式 2.4、底行模式 3、vim的配置 3.1、自定义配置 3.2、自动化配置 vim 的前身是 vi,vi/vim的区别简单点来说,它们都是多模式编辑器,…

Java对时间的处理

Date用的最多这里主要介绍该类。java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 package com.company; import java.util.Date;public class Main {public static void main(String[] args) {// write your code hereSyste…

阿里云Docker仓库操作

为什么用阿里云docker有自己的仓库服务器,但是对没掏钱的(白嫖)用户并不是那么友好,有两个很大的限制:免费用户,在6个月之内如果没有任何操作,将会被自动删除,真的很糟糕啊。匿名用户…

港科夜闻|广州市花都区与香港科大(广州)合作建设科研智库,发展AI智慧农业...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、广州市花都区与香港科大(广州)合作建设科研智库,发展AI智慧农业。1月8日,广州市花都区人民政府和香港科大(广州)在广州举行签约仪式,根据协议,香港科大(广州)和花都区人民政府…

JS案例:接口加解密与防重放

目录 前言 功能设计 客户端的功能点(client) 服务端的功能点(server) 功能实现 工具函数 client.js(客户端) server.js(服务端) 实现效果 写在最后 前言 在网络通信中&am…

远程会计人员如何通过数字工作流程完成工作

远程会计人员如何通过数字工作流程完成工作 当大多数员工居家办公时,会计部门通常会敏锐地感受到挑战。如果您的组织开始数字化转型或只迈出了第一步,您会发文档管理系统现在已成为必备品,而不是可有可无的。现在是时候实施数字工作流程&…

论文投稿指南——中文核心期刊推荐(地理学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

Mysql操作指令

Mysql操作指令 创建数据库 下面写具体案列一步步学 这里基本上线在sqlyog里面写sql,因为关于java程序和mysql数据库的连接还没有学 图形化操作数据库之前的可视化有 这里只讲指令凑在哦 注意 默认创建库 用uft8字符集,校对规则的uf8_general_ci不区分大…

< Linux >:环境变量

目录 环境变量 常见的环境变量 基本概念 查看环境变量内容的方法 测试环境变量PATH 与环境变量相关的命令 Linux操作系统下C/C程序代码中获取环境变量的方式 环境变量的组织方式 环境变量通常具有全局属性 环境变量 问题: 注意:可执行程序 等价于 命令/指…

Flutter 开发一个自己的 package(纯Dart)并提交到pub.dev上

小提示第一步:创建一个 package第二步:实现我们的package第三步:发布到 pub.dev 上。END发布的准备工作小提示 Flutter 轮子库。本文是为大家讲述怎么自己写个轮子发布到到上面。 https://pub.flutter-io.cn/packages 第一步:创建…

P2P僵尸网络-家族类别

Pink Pink 家族曾在中国境内感染了超过百万级的设备,其非实效性指令通过 P2P 传递,实效性强的指令通过集中控制的方式发布。是一个设计巧妙的 P2P 僵尸网络家族 Pink 僵尸网络概述 Pink 主要针对基于 mips 的光纤路由器,并且具有非常强大的和…

如何使用人力资源软件识别保留优秀员工

在企业信息化的时代,越来越多的年轻员工开始追求他们的激情,辞掉那些乏味的工作,而选择加入重视员工生活质量的企业。他们不再追随那些以牺牲员工福利为代价追求利润的公司。 员工认可度有助于加强组织中的团队合作关系,反过来&a…

VS 17.5 预览版2:/Gw链接开关的标准一致性改进

/Gw 链接开关可以告诉链接器优化代码中的全局数据,从而减小最终生成的二进制文件的大小。在 Visual Studio 17.5 预览版2中,我们新增了一个新的标志:/Zc:checkGwOdr[-] ,目的是在使用 /Gw 开关的时候改进对 C 标准的一致性支持。 …

表情包也能用 AI 生成?如何借助 AIGC 自定义专属表情包 #Memix

随着我们越来越离不开社交媒体,表情包也已经成为我们日常生活中的必备单品。有着个人鲜明风格的「表情包」,不仅是独特的「社交名片」,也能给人留下耳目一新的印象!谁的收藏夹里没有一堆私藏表情包呢!Memix借助 AI 技术…

画中画怎么制作?教你如何录制画中画视频,图文教学

很多小伙伴在录制视频的时候,都需要录制摄像头,以画中画的方式放置在视频当中。在网上眼花缭乱的录屏软件里,有不少的录屏软件是无法做到画中画视频的。画中画怎么制作?今天小编分享2个录制画中画视频的方法,一起来看看…

实心球状CdSe/ZnS/硫量子点QD-AFP-Ab/CPV VLP标记抗体/蛋白的制备方法与电镜表征

实心球状CdSe/ZnS/硫量子点QD-AFP-Ab/CPV VLP标记抗体/蛋白的制备方法与电镜表征 今天小编分享量子点标记蛋白,一起看看吧: 量子点标记蛋白的制备过程: 将纯化后的 CPV-VP2蛋白溶液(测定OD2802.0,蛋白浓度为2mg/ml)和…

CTK Plugin Framework插件框架学习--CTK服务工厂

一、前言 注册服务的时候能够用服务工厂来注册; 访问服务getServeice中的plugin参数是执行ctkPluginContext::getService(const ctkServiceReference&)的插件,从而工厂根据执行的不同插件名称返回不同的服务实现 服务工厂的作用 在服务中可以知道…