Android FrameWork 学习路线
目录
前言
学习路线:
1.基础知识
2、AOSP 源码学习
3. AOSP 源码编译系统
4. Hal与硬件服务
5.基础组件
6. Binder
7. 系统启动过程分析
8. 应用层框架编辑
9. 显示系统
10. Android 输入系统
11. 系统应用
前言
Android Framework 涉及的行业相当广泛,可以是手机,汽车,手表,冰箱,微波炉,电视,机顶盒,空调等等设备。
Framework 学习门槛也较高,而且需要的调试环境也需要成本,但薪资也比大部分 App 开发岗位高出不少。如果能系统地学习Framework,就显得更加尤为重要。
以下是一张android 经典框架图
·Linux kernel层,驱动程序
·HAL层,封装驱动硬件操作,向 App 提供统一稳定的驱动操作接口
·Native层,C/C++库以及Java 虚拟机
·Java 层,Java 库,系统服务等
·App 层,系统和三方APP
Framework 大多数指的是中间三层的开发,即 Java层、Native层、HAL层
Android 系统启动过程
1.由 Boot Loader引导开机
2.进入 -> Kernel
3.进入 ->Native
4.进入->Framework
5.进入 -> App
kernel层主要向上提供了驱动,Hal 层加以封装后,向上提供驱动程序功能·Native 层通过 init 进程2启动了很多守护进程用于支持系统的运转·Java 层通过 Zygote 孵化了 Java 守护进程,用于支持系统的运行和 App 的运行
Framework 能开发什么?
1.添加自己的硬件、驱动、HAL和硬件系统服务,硬件的提供商可能会提供相应软件支持.
2.定制系统 App,比如 Launcher Setting System Ul Message Camera 等.·
3.开发厂商自己的系统 App,比如 音视频播放器 应用商店 主题 红外遥控等·个性化功能开发,比如软件多开,手机分身,语音变声,录屏,双卡双待等等·
4.集成一些常用三方应用,比如 微信 淘宝 爱奇艺等
5.系统稳定性 性能 安全相关优化
6.系统裁剪
学习路线:
1.基础知识
开发语言我们必须掌握
C/C++
Java
JNI
对一些工具类的语言有一定的了解
Python:源码下载工具 repo 使用 python 对 git 操作做了封装,以适应多个 qit 仓库的操作
Shell 编程:Android 编译系统包含了大量的 Shell 脚本
go 语言,Android 编译系统中部分脚本使用 qo 语言编写
早期 Android 编译系统使用 make 构建,后来逐步使用 Soong 进行替换,Android 的官方博客指出未来会使用 Bazel 来替换掉目前 make 和 Soong 混合的结构,鉴于 Android 代码量庞大这些替换都是部分的逐步开展的。
对于 Linux 需要掌握三个方面,
熟悉 Linux 的基本使用,主要是常用的命令和常用服务搭建
熟悉 Linux 系统编程,Native 层使用了很多系统编程接口,熟悉 Linux 系统编程是读懂Native 层的基础
Linux 系统编程可能或多或少需要我们对 Linux 内核有基本的了解另外在 Linux 的学习工程中兼顾一下操作系统基础的学习
2、AOSP 源码学习
3. AOSP 源码编译系统
掌握基本的编译命令,能够通过源码编译为固件烧录进入设备中
4. Hal与硬件服务
完成一个简单字符驱动程序的编写
完成 Hal层编写,首先掌握传统方式,再学习基于 HwBinder 的现代方式最后就是在系统中添加硬件服务,写个简单的 App 访问我们的硬件服务
5.基础组件
基础组件就是被使用的比较多的组件,主要包含了
Android 智能指针
Android 属性系统
Android 日志系统
SeAndroid
Android 权限系统
匿名共享内存
6. Binder
Binder 是 Android 最核心的基础,整个 Android 都是基于 Binder 搭建的,不夸张的讲,不懂 Binder 就不懂 Android。
Binder 涉及了内核驱动层,C 层,C++ 层,Java 层,涉及知识多,流程复杂,很多人学了一遍有一遍,还是没有掌握。
7. 系统启动过程分析
主要熟悉整个系统启动的流程:
重点掌握:
1.init 的实现细节
2.Zygote 的具体实现
3.SystemServer 的内部实现
8. 应用层框架
主要搞懂:
- AMS/ATMS
- Handler 和 Looper
- PackageManagerService
9. 显示系统
在掌握了 Android 显示系统整体框架后,再逐步学习一下内容:
- Hal 层的 Gralloc 和 Hwcomposer
- Surfaceflinger
- WMS
- View 系统
10. Android 输入系统
输入系统主要三个方面来具体学习:
- 读取事件
- 分发事件
- 处理事件
11. 系统应用
对系统应用的开发要有所了解,主要学习一下几个 App:
- Launcher
- SystemUI
- Settings
相关文章:
Android FrameWork 学习路线
目录 前言 学习路线: 1.基础知识 2、AOSP 源码学习 3. AOSP 源码编译系统 4. Hal与硬件服务 5.基础组件 6. Binder 7. 系统启动过程分析 8. 应用层框架编辑 9. 显示系统 10. Android 输入系统 11. 系统应用 前言 Android Framework 涉及的行业相当广…...
前端开发者如何打造自己的生态以及ip
作为独立开发者,在公司的岗位上面,经常面对的是页面,但我们不能局限页面,页面是切入点。 1在需求页面的过程中,我们会接触ui,原型,软件,需求, 2在接口对接的过程中&#…...
C语言实现一个两个数加减乘除的答题代码(含文件保存),用户增加,题目增加,题目测试,题目答题等等
目录 1、这是我大一自己写的小代码,现在翻到了就分享出来,高手勿喷。 2、项目运行 3、获取完整源码网址 1、这是我大一自己写的小代码,现在翻到了就分享出来,高手勿喷。 2、项目运行 (1)测试模块 每次…...
YOLOv9改进策略:注意力机制 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点
💡💡💡本文改进内容:用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测 yolov9-c-ContextAggregation summary: 971 layers, 51002153 parameters, 51002121 gradients, 238.9 GFLOPs 改…...
基于单片机的老人防丢系统设计
目 录 摘 要 I Abstract II 引 言 3 1 系统总体架构 6 1.1方案设计与选择 6 1.2 系统架构设计 6 1.3 系统器件选择 7 2 系统硬件设计 9 2.1 单片机外围电路设计 9 2.2 LCD1602液晶显示电路设计 12 2.3 短信模块电路设计 14 2.4 GPS模块电路设计 14 2.5 电源与按键控制电路设计…...
从海外开发者大会的亲身体悟聊起,谈谈 AI 与开发者关系的重构 | 编码人声
本期「编码人声」节目中,我们聚焦于「AI 与开发者关系的重构」这一主题,从嘉宾参加海外开发者大会的亲身体验开始分享,聊一聊 AI 技术如何影响开发者社区和生态,以及开发者如何在这一变革中找到新的位置。 我们邀请了开发者社区与…...
HTML_CSS练习:HTML注释
一、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML注释</title> </head> <body><marquee loop"1">马龙强<!--下面的输入框是可以滚动的&#x…...
面试官问我Java异步编程用过吗?我直接说了6种方式!
文章目录 线程池 Runnable/Callable线程池 FutureCompletableFuture线程池 Async注解Spring 事件创建事件事件发布者事件监听器调用事件 消息队列生产者消费者 在实际开发中有些耗时操作,或者对主流程不是那么重要的逻辑,可以通过异步的方式去执行&am…...
一维坐标的移动(bfs)
在一个长度为n的坐标轴上,小S想从A点移动B点。 他的移动规则如下: 向前一步,坐标增加1。 向后一步,坐标减少1。 跳跃一步,使得坐标乘2。 小S不能移动到坐标小于0或大于n的位置。 小S想知道从A点移动到B点的最少步数是多…...
面试题 整理
第1题:常见数据类型大小 这边以64位计算机系统,环境而言。 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 4 字节 -32,768 到 32,767 或 -2,147,483,648…...
苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)
苍穹外卖-day08 课程内容 导入地址簿功能代码用户下单订单支付 功能实现:用户下单、订单支付 用户下单效果图: 订单支付效果图: 1. 导入地址簿功能代码(单表crud) 1.1 需求分析和设计 1.1.1 产品原型(…...
Java面试相关问题
一.MySql篇 1优化相关问题 1.1.MySql中如何定位慢查询? 慢查询的概念:在MySQL中,慢查询是指执行时间超过一定阈值的SQL语句。这个阈值是由long_query_time参数设定的,它的默认值是10秒1。也就是说,如果一条SQL语句的执…...
Linux Shell中的循环控制语句
Linux Shell中的循环控制语句 在编写Shell脚本时,循环是一种常用的控制结构,用于重复执行一系列命令。在Shell中,主要有三种循环控制语句:for循环,while循环,和until循环。 1. For循环 for循环是最常见的…...
proto3语言指南
Language Guide (proto3) 本指南介绍了如何使用 protocol buffer 语言来构建protocol buffer数据,包括.proto文件语法以及如何从.proto 文件生成数据访问类。它涵盖了proto3 版本的协议缓冲语言:有关proto2语法的信息,请参阅proto2语言指南。 文章目录 Language Guide (pro…...
解决后端传给前端的日期问题
解决方式: 1). 方式一 在属性上加上注解,对日期进行格式化 但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。 2). 方式二(推荐 ) 在WebMvcConfiguration中扩展SpringMVC的消息转…...
MySQL中的索引失效情况介绍
MySQL中的索引是提高查询性能的重要工具。然而,在某些情况下,索引可能无法发挥作用,甚至导致查询性能下降。在本教程中,我们将探讨MySQL中常见的索引失效情况,以及它们的特点和简单的例子。 1. **索引失效的情况** …...
SpringBoot异常:类文件具有错误的版本 61.0, 应为 52.0的解决办法
问题: java: 无法访问org.mybatis.spring.annotation.MapperScan 错误的类文件: /D:/Program Files/apache-maven-3.6.0/repository/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar!/org/mybatis/spring/annotation/MapperScan.class 类文件具有错误的…...
Cloudways搭建WordPress外贸独立站完整教程
现在做个网站不比从前了,搭建网站非常的简单,主要是由于开源的CMS建站系统的崛起,就算不懂编程写代码的人也能搭建一个自己的网站,这些CMS系统提供了丰富的主题模板和插件,使用户可以通过简单的拖放和配置操作来建立自…...
关于 闰年 的小知识,为什么这样判断闰年
闰年的规定: 知道了由来,我们就可以写程序来判断: #include <stdio.h> int main() {int year, leap;scanf("%d",&year);if((year%4 0 && year%100 ! 0) || year%400 0)leap 1;else leap 0;if(leap) printf(…...
Elasticsearch:调整近似 kNN 搜索
在我之前的文章 “Elasticsearch:调整搜索速度”,我详细地描述了如何调整正常的 BM25 的搜索速度。在今天的文章里,我们来进一步探讨如何提高近似 kNN 的搜索速度。希望对广大的向量搜索开发者有一些启示。 Elasticsearch 支持近似 k 最近邻…...
UE5数字孪生系列笔记(二)
智慧城市数字孪生系统 制作流云动画效果 首先添加一个图像在需要添加流云效果的位置 添加动画效果让其旋转 这个动画效果是程序开始就要进行的,所以要在EventConstruct中就可以启动这个动画效果 添加一个一样的图像在这里,效果是从此处进行放大消散 添…...
基于vue实现bilibili网页
学校要求的实验设计,基于vue实现bilibili网页版,可实现以下功能 (1)基本的悬浮动画和页面渲染 (2)可实现登录和未登录的页面变化 (3)在登录页面的,实现密码判断,或者短信验证方式的倒数功能 (4)实现轮播图 (5)实现预览视频(GIF) (6)页面下拉到一定高度出现top栏以及右下角的返回…...
计算机二级(Python)真题讲解每日一题:《十字叉》
描述 …...
基于正点原子潘多拉STM32L496开发板的简易示波器
一、前言 由于需要对ADC采样性能的评估,重点在于对原波形的拟合性能。 考虑到数据的直观性,本来计划采集后使用串口导出,并用图形做数据拟合,但是这样做的效率低下,不符合实时观察的需要,于是将开发板的屏幕…...
【Docker】apisix 容器化部署
APISIX环境标准软件基于Bitnami apisix 构建。当前版本为3.8.0 你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform qi…...
基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)
摘要:开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模型间的性能…...
从零开始学HCIA之SDN04
1、VXLAN数据封装 (1)Original L2 Frame,原始以太网报文,业务应用的以太网帧。 (2)VXLAN Header,VXLAN协议新定义的VXLAN头,长度为8字节。VXLAN ID(VNI)为2…...
GET 和 POST 有什么区别?
1.从缓存的角度,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。 2.从编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。 3.从参数的角度,GET 一般放…...
Qt学习--继承(并以分文件实现)
基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结:简单来说,父类有的,子…...
软考75-上午题-【面向对象技术3-设计模式】-设计模式的要素
一、题型概括 上午、下午题(试题五、试题六,二选一) 每一个设计模式都有一个对应的类图。 二、23种设计模式 创建型设计模式:5 结构型设计模式:7 行为设计模式:11 考试考1-2种。 三、设计模式的要素 3…...
七冶建设集团网站/青岛官网seo方法
搬入新居并布置了家具位置之后,总觉得布线不是很合理,想放个电话的地方没有RJ11插座却反而有个RJ45的插座,想放电脑的地方没有网线插座(我的电脑比较特殊,不是WIFI可以解决的),怎么办?动手吧!幸…...
网站开发的名称叫什么/如何快速推广app
1. 问题描述: 给定一个长度为 n 的数组 v1,v2,…,vn。初始时,数组中的所有元素都为 0。接下来,可以对该数组进行若干次如下操作------对于第 i 次操作(i 从 0 开始),你可…...
永嘉网站制作哪家好/淘宝推广费用一般多少
1.介绍PySide2 PySide2是一个Python模块,它提供了对Qt5.12完整框架的访问,简单点说就是在Python下使用的Qt。使用PySide2既能开发出完美的界面,又能享受Python的便捷开发。与PySide和PyQt相比,PySide2是开源的,使用不…...
网站建设创意公司/在线生成网页网站
9月28日,在上海市经济和信息化委指导下,由上海市黄浦区科学技术委员会、上海市社会信用促进中心、中国人保金融服务有限公司和中国中小企业协会联合主办的“信用大数据创新应用大赛启动仪式”举行。上海市经济和信息化委员会副主任张英通过视频方式为本次…...
网页展示模板/重庆seo优化公司
题目描述 给定整数m以及n各数字A1,A2,…An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大于m的有多少个。 输入描述: 第一行包含两个整数n,m. 第二行给出n个整数A1,A2,…,An。 对于…...
主题资源网站建设/磁力猫引擎
Python是一门面向对象的编程语言,python中一切皆为对象,对每一个对象分配内存空间,python的内存管理机制主要包括引用计数、垃圾回收和内存池机制。本文简要介绍python对象及内存管理机制。 目录参数传递Python 参数传递1. 不可变数据类型2. …...