Android 12编译系统-5 ninja介绍
最开始,Ninja是用于Chromium浏览器中,Android在SDK7.0中也引入了Ninja。Ninja其实就是一个编译系统,如同make,使用Ninja主要目的就是因为其编译速度快
最开始,Ninja是用于Chromium浏览器中,Android在SDK7.0中也引入了Ninja。Ninja其实就是一个编译系统,如同make,使用Ninja主要目的就是因为其编译速度快
Kati是为了提高Android编译速度而产生的实验性的GNU make克隆的工具。本身没有提供快速编译,而是将Makefile文件转换为Ninja文件,再通过Ninja进行编译提速。 目前Android 12上,Kati(即prebuilts/build-tools/linux-x86/bin/ckati...
在Android 12 AOSP源码的build/core/main.mk中定义了很多伪目标,我们可以直接通过make 目标名称进行编译,镜像的生成定义也在该文件中。本篇主要以system镜像为例,进行流程梳理分析。
本篇我们详细的说明Android编译命令的内部流程,讲述source build/envsetup.sh;lunch;make这三个主要编译命令的处理逻辑。
基于Android 12 AOSP源码(android-12.0.0_r3),对Android编译系统框架作学习梳理。 开篇从Android的源码结构入手,让我们先知道Android源码架构包含了哪些内容、Android编译结果目录有哪些内容。然后了解Android编译系统模块的结构组成。
阅读Android AOSP 12版本代码,对输入法IME整体框架模块进行学习梳理,内容包含输入法框架三部分IMM、IMMS、IMS的启动流程、点击弹出流程、显示/隐藏流程,以及常见问题和调试技巧。
Android系统调试技巧积累笔记,主要包含Android Framework,以及日常接触的git、adb、linux系统等调试技巧。
本篇主要讲述Android SELinux的基本概念,包含类型、属性、规则,Sepolicy的核心模块、关键文件,SELinux配置的步骤、调试验证方法等。
Android DropBox是Android用来持续化存储系统数据的一个管理类,主要用于记录Android运行过程中, 内核, 系统进程, 用户进程等出现严重问题时的log。
了解宏观上Android系统架构,硬件抽象层HAL层HIDL和AIDL接口定义语言、内核kernel、设备树叠加层DTO等
主要内容是Android AOSP源码的管理方式,项目源码的构建和编译,用到比如git、repo、gerrit一些命令工具,以及使用Soong编译系统,编写Android.bp文件的格式样式。
android 8.0引入treble架构,使用HIDL进行binder跨进程模块分离通信。
Android Automotive及IVI概述,对IVI系统,Framework各个模块简单描述
参考Android R源码,对背光手动调节、自动调节的流程作简单梳理。
为了理解systrace中HW Vsync, sf vsync, app vsync的含义和作用。这里主要参照Android R AOSP源码对这几种VSYNC的关系和调用流程进行大致的梳理。
systrace的一些tag标签的含义和作用。
继上篇《Android Q SurfaceFlinger合成(一)》中SF对INVALIDATE信息处理,针对Layer属性变化、显示设备变化等情况处理,将mCurrentState提交到mDrawingState。然后遍历mDrawingState的Layer,将新的Buffer内容更新绑定到Layer纹...
在HWUI渲染完成后,Buffer会在frameworks/native/libs/gui/BufferQueueProducer.cpp中通过queueBuffer放入BufferQueue,在该函数中调用frameAvailableListener->onFrameAvailable(item)通...
最近碰到一个关于frameworks/base/core/proto/android/providers/settings/secure.proto文件中修改某个属性的问题,所以针对protobuf(.proto文件)进行一个学习了解。 Google Protocol Buffers,(简称Protobuf...
ANR(Application Not Responding),字面意思是应用无响应,即用户的一些操作无法从应用中获取反馈。关于发生ANR的trace.txt文件的请参考Android ANR traces.txt文件分析
本篇对Android图形显示框架做一个概述,内容主要包含:SurfaceSession创建和销毁(添加/删除窗口),Surface创建和销毁,BufferQueue创建,以及BufferQueue的dequeueBuffer和queueBuffer、acquire和release大致流程梳理。
了解gcc将*.c/cpp编译成*.o,再将其链接为可执行程序或/lib库的过程,有助于我们将native从编译/加载/执行到崩溃一条路贯通起来。Android的Makefile只需要将source file填入LOCAL_SRC_FILES,然后include $(BUILD_SHARED_LIBRARY...
任何软件都可能存在BUG,调试和修复BUG伴随着整个开发流程,因此异常分析非常重要。如果是native层发生异常,我们一般称之为叫NE(native exception)
Android中绘图的API有很多,比如2D的绘图skia;3D的绘图OpenGLES,Vulkan等。Android在后来完善3D API支持的同时,也在更新View Widget渲染机制,提出了硬件加速机制。
trace.txt生成:当APP(包括系统APP和用户APP)进程出现ANR、应用响应慢或WatchDog的监视没有得到回馈时,系统会dump此时的top进程,进程中Thread的运行状态就都dump到这个Trace文件中了。 ANR:Application Not Responding,即应用无响应
打开开发者选项中的“指针位置”,界面上方状态栏处会显示当前触屏的X/Y坐标,那么这个坐标值是怎么打印出来的呢?
Android支持横屏和竖屏,用户可以选择锁定(rotation lock)也可以选择让传感器来自动转屏。而转屏时为了使用户体验更流畅,会对屏幕截屏,然后使用截屏的图来做转屏动画,直到转屏动作结束。
Input点击事件从InputReader会传到InputDispatcher进行处理。针对一些点击调试方式和日志打印,来分析InputDispatcher获取点击事件的部分流程。 参考上一篇《Android 触控事件分析》
Android Input体系中,大致有两种类型的事件:实体按键key事件,屏幕点击触摸事件。如果根据事件类型的不同,还能细分为基础实体按键的key(power,volume up/down,recents,back,home),实体键按键,屏幕点击(多点,单点),屏幕滑动等事件。在Android整个Inp...
参考Android P AOSP源码,对HWC合成分析了解
通过ADB命令实时获取FPS帧率有两种方式,一种是dump gfxinfo,一种是dump SF --latency。其他还可以通过三方APP GameBooster(Google PlayStore可以下载)打开实时FPS监控查看。 如果是查看动画是否丢帧,可以通过视频工具QuickTime Player...
在新增一个HIDL Service后,需要对其进行权限配置,不然通过adb shell ps -A|grep NAService会发现该service无法启动,也会通过抓取log发现一堆的avc: denied权限问题。关于SELinux可以推荐文档:https://www.pianshen.com/art...
Android中最熟知的RC文件就是init.rc了,而在Hal接口服务定义中也会创建.rc文件。init.rc的语法分为行为(Actions),、命令(Commands) 、服务(Services)、选项(Options)。.rc文件是资源文件,包括比如对话框、菜单、图标、字符串等资源信息。使用.rc资源...
我们常见的触摸事件除了按下,弹起,移动之外还有很多,诸如长按,双击,Scroll,Fling等,他们是怎么判断的,还有这些长按,双击等事件的时间能否自由设置。可以在开发者选项中打开“显示点按操作反馈”和“指针位置”,同时可以打开inputflinger模块的log开关做一些调试,分析TP报点。
主要内容如何分析抓取到的systrace
1. LCD背光驱动节电技术LABC/CABC
Android SurfaceFlinger和HWC2概述 参考Android Q AOSP源码添加修改部分内容 参考源码: http://aosp.opersys.com/xref/android-10.0.0_r14/
Binder通信是Android用的比较多的一种通信机制,它是一种client-server的通信结构。Binder通信具有以下特点: 用驱动程序来推进进程间的通信; 可以通过共享内存的方式来提供性能; 可以为进程请求分配每个进程的线程池; 针对系统中的对象引入了引用计...
Android系统framework开发(包含kernel、git、adb、gdb、linux等)调试技巧笔记
Android @hide接口注释概念和使用方式
Android shell脚本的常用语法介绍
Android色彩空间类型概述,包含广色域WCG、sRGB、Adobe RGB、ProPhoto RGB、DCI-P3、Display P3
讲述Android property属性分类、服务、生成结果文件
Android系统framework开发(包含kernel、graphics、adb、性能、display等)调试技巧笔记
Android Handler消息循环处理机制(例ActivityThread)
Window 可以看做是Surface的一个包装,本质上,Window的本体就是一片Surface。将操作对象Surface,对象关联属性集以及操作方法等组合在一起便是 Window。Surface 其实是一块画布,应用可以随心所欲地通过 Canvas 或者 OpenGL 在其上作画,然后通过 Surfac...
zygote和system_server在Android中的Java层很重要。
init是Linux系统中用户空间的第一个进程。Android底层也是和linux原理一样。
JNI,即Java Native Interface,Java本地调用。
makefile是和make命令一起使用,在Android中,可以使用mm、mmm、mma进行编译。 Makefile可以组织项目中各种库和代码之间的依赖,构建项目,和maven、gradle一样属于构建工具。 常用于大型项目。
储藏(stashing)可以获取工作目录的中间状态,即被修改过的被追踪的文件和暂存的变更。并将它保存在一个未完结变更的堆栈中,随时可以重新应用。
ADB是连接手机设备和电脑设备的调试桥。这种工具命令用于Android调试是基础而且重要的。
在Android代码中可以通过了解函数的CallStack加速调试和分析过程,本文说明如何在Android运行时加入CallStack及Android P上的注意点。
为了确保Vendor层实现的前向兼容性,新的Vendor层接口会由供应商测试套件 (VTS) 进行验证,该套件类似于兼容性测试套件 (CTS)。
CTS就是兼容性测试为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility Test Suite, CTS)来认证运行Android系统的设备是否完全兼容Android规范,并...
Android C++模块有时候需要对文件系统进行操作,比如获取某个分区的大小、可用空间,获取某个路径文件夹的大小,文件内容读取及字符串比较、文件大小读取等demo代码示例
《数据结构(C++语言版)》书,关于数据结构再读记录。主要包含数据结构的基本概念、算法概念、时间复杂度、线性表(顺序表&链表)
C++类的声明、实现和使用,以及构造函数和析构函数。包含案例代码,可编译运行。
今天碰到一个细节bug,使用strcmp来比较两个字符串是否完全相同。但是忽略了一个问题,如果存在一个字符串包含在另一个字符串呢?此时就会发现需要用strstr函数。
C++基础语法,主要是设计模式中的单例模式
C++基础语法,包含C++运算符重载、友元、返回对象
C++基础语法,包含C++对象和类
C++基础语法,包含C++头文件、作用域、内存模型和名称空间
C++基础语法,包含C++双冒号、点号、箭头的区别
C++基础语法,包含C++内联函数、引用变量、函数重载、函数模板
本章节主要是围绕函数为圆心,涉及到字符串、指针、C++11特性auto、typedef。
C++基础语法,包含C++分支语句、逻辑表达式、字符函数库、switch、文本I/O
C++基础语法,包含C++循环语句for, while, do-while
C++基础语法,包含C++内存分配方式和模板类vector, array
C++基础语法,主要包含C++复合类型之枚举、指针
序: C++提供了基于整型和浮点类型创建的复合类型。影响最深远的复合类型是类。然而,C++还支持几种普通的复合类型。 例如,数组 可以存储多个同类型的值。 结构 可以存储多个不同类型的值。 指针 则是一种将数据所处位置告诉计算机的类型。
C++基础语法,主要讲述C++浮点常量表示、算术运算符、类型转换
C++基础语法,讲述多字节char、bool、字符常量、浮点数
C++基础语法,变量的命名规则、类型概述
g++编译C++程序的四个阶段概述
Android A/B升级又称静默升级,它是一种在系统运行过程中进行的升级功能。为了减小系统运行负荷,整个升级过程会保持在一个较低的IO状态,所以升级时间比recovery升级明显要长。本文是基于Android 12 AOSP源码,对update engine模块的流程进行梳理,最主要的内容是绘制的几张序列...
动态分区分为原生动态分区和改造动态分区两种配置方式,其中包含开关配置和参数配置,以Android Q源码给出的原生示例为参考。
Android动态分区功能编译和调试用到的lpmake、lpdump、lpunpack、dmctl等命令工具,以及涉及到的一些库模块,比如liblp、lipdm等。
动态分区是Android的用户空间分区系统,从Android Q开始引入这个动态分区super的概念。使用此分区系统,可以在无线下载 (OTA) 更新期间创建、销毁分区或者调整分区大小。借助动态分区,供应商无需担心各个分区(例如 system、vendor 和 product)的大小。取而代之的是,设备分配...
update engine是通过AIDL对上层client端和server端分离,实现跨进程。上层提供服务绑定接口,以及升级触发和回调接口,底层实现升级的具体逻辑。本篇只是简单梳理下流程流转的过程。
Android源码有车机系统升级的demo app:SystemUpdater,使用原生settings UI画面。该应用可用于理解应用层同系统层进行交互,触发完成升级的逻辑流程。
Android A/B升级又称静默升级,它是一种在系统运行过程中进行的升级功能。为了减小系统运行负荷,整个升级过程会保持在一个较低的IO状态,所以升级时间比recovery升级明显要长。
升级包生成文件、升级方式、常见问题分析调试方法、make otapackage升级包脚本流程解析
android automotive升级功能概念原理和方式
Android升级的时候在FilesystemVerifierAction出现某分区Buffer I/O error读写失败,上报错误码1(error)。从问题现象看需要针对该分区进行磁盘坏道检测,分析是否是因为磁盘损坏导致。
socket套接字就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为Client Socket,另一个运行于服务器端,我们称之为Server ...
ubuntu输入法无法选择候选文字
ubuntu搭建opengl环境
从echo $SHELL可以查看当前使用的终端是/bin/bash。zsh是Ubuntu的一种终端工具,虽然听说功能很强很给力,事实上我只是被他的众多主题迷住了。 [具体查看文档](https://wiki.archlinux.org/index.php/Zsh_(%E7%AE%80%E4%BD%93...
Ubuntu系统刚安装完成后,工作还只是进行了一小半,还有一大堆的环境需要配置搭建。比如说JDK, nodejs, python, vs code编译器 …
个人笔记本安装ubuntu实践,记录安装方式,无需制作启动盘
文档内容:1.vehicle HAL架构介绍、详细的启动流程;2.部分车辆属性类型名称说明;3.上层carservice和hal层数据subscribe/set/get流程梳理;4.dbus和vehicle hal连接交互的流程;4.从dbus回调数据返回至APP层的详细流程梳理(最终梳理方法流转调用的流程...
文档内容:carservice架构介绍,内容有Car APP、Car API、Car Service等部分,carservice启动流程
vscode的一些常用插件和配置方法
nrsdk是nreal开发混合现实体验的平台。使用简单的开发过程和高级api,nrsdk提供了一组强大的mr特性,并使nreal眼镜能够了解真实世界。
单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例。 比如我们在系统启动时,需要加载一些公共的配置信息,对整个应用程序的整个生命周期中都可见且唯一,这时需要设计成单例模式。如:spring容器,session工厂,缓...