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

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

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

相关文章

Django 解决新建表删除后无法重新创建等问题

Django 解决新建表删除后无法重新创建等问题 问题发生描述处理办法首先删除了app对应目录migrations下除 __init__.py以外的所有文件:然后,删除migrations中关于你的app的同步数据数据库记录最后,重新执行迁移插入 问题发生描述 Django创建的表&#xf…

HCIP—OSPF课后练习一

本实验模拟了一个企业网络场景,R1、R2、R3为公司总部网络的路由器,R4、R5分别为企业分支机构1和分支机构2的路由器,并且都采用双上行方式与企业总部相连。整个网络都运行OSPF协议,R1、R2、R3之间的链路位于区域0,R4与R…

ubuntu开机启动时,如何随着ubuntu的启动指定qt程序使用普通用户运行?

要在Ubuntu开机启动时指定QT程序使用普通用户运行,您可以通过编辑/etc/xdg/autostart目录下的.desktop文件来实现。以下是详细步骤: 创建启动项:在/etc/xdg/autostart目录下创建一个新的.desktop文件。这个文件将包含启动您的QT程序的命令。…

uniapp 利用uni-list 和 uni-load-more 组件上拉加载列表

列表的加载动作,在移动端开发中随处可见,笔者也是经常用到。今天正好有空,做一个总结,方便以后使用。uniapp 利用uni-list 和 uni-load-more 组件上拉加载列表操作步骤如下:1、资料准备 1)、uni-load-more…

JavaWeb--HTML

一:HTML简介 *HTML是一门语言,所有的网页都是用HTML这门语言编写出来的; *HTML:超文本标记语言; 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还能定义图片&#xff…

Android 设计模式单例

懒加载模式 (使用双重检查锁定)1、双重检查锁定(double checked locking)通常用于延迟初始化单例对象,以提高性能,避免不必要的同步。2、我们首先检查instance是否为null,如果是,我们同步并再次检查instance是否为null,如果仍为null,我们才创建新的实例。 3、这样既能确…

C#对ListBox控件中的数据进行的操作

目录 1.添加数据: 2.删除数据: 3.清空数据: 4.选择项: 5.排序: 6.获取选中的项: 7.获取ListBox中的所有项: 8.综合示例 C#中对ListBox控件中的数据进行的操作主要包括添加、删除、清空、…

zookeeper快速入门二:zookeeper基本概念

本文是zookeeper系列之快速入门中的第二篇,欢迎大家观看与指出不足。 目录 一、zookeeper的存储结构 二、什么是znode 三、znode节点的四种类型 四、权限控制ACL(Access Control List) 五、事件监听watcher 一、zookeeper的存储结构 z…

Linux之shell条件判断

华子目录 if语句单分支案例 双分支案例 多分支 case多条件判断格式执行过程示例 if语句 单分支 # 语法1&#xff1a; if <条件表达式> then指令 fi#语法2&#xff1a; if <条件表达式>;then指令 fi案例 编写脚本choice1.sh,利用单分支结构实现输入2个整数&#…

Tomcat Session 集群 ---------会话保持

一、 负载均衡、反向代理 环境搭建&#xff1a; nginx服务器192.168.246.7 tomcat 1服务器192.168.246.8 tomcat 2服务器192.168.246.9 7-1 nginx服务器搭建 [rootzzcentos1 ~]#systemctl stop firewalld [rootzzcentos1 ~]#setenforce 0 [rootzzcentos1 ~]#yum install …

springboot“财来财往”微信小程序

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低理财公司的运营人员成本&#xff0c;实现了“财来财往”的标准化、制度化、程序化的管理&#xff0c;有效地防止了“财来财往”的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能…

HTTP和HTTPS的区别,HTTPS加密原理是?

HTTP和HTTPS都是网络传输协议&#xff0c;主要用于浏览器和服务器之间的数据传输&#xff0c;但它们在数据传输的安全性、加密方式、端口等方面有所不同。 数据传输的安全性&#xff1a;HTTP是明文传输&#xff0c;数据不加密&#xff0c;容易被黑客窃听、篡改或者伪造&#x…

NeRF学习——NeRF-Pytorch的源码解读

学习 github 上 NeRF 的 pytorch 实现项目&#xff08;https://github.com/yenchenlin/nerf-pytorch&#xff09;的一些笔记 1 参数 部分参数配置&#xff1a; 训练参数&#xff1a; 这段代码是在设置一些命令行参数&#xff0c;这些参数用于控制NeRF&#xff08;Neural Radi…

OpenCV 图像重映射函数remap()实例详解

OpenCV 图像重映射函数remap()对图像应用通用几何变换。其原型如下&#xff1a; void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation&#xff0c; int borderMode BORDER_CONSTANT&#xff0c; const Scalar & borde…

回答自己一年前的一个问题,python如何动态拼接sql

首先谈谈应用场景吧&#xff0c;前提是针对查询接口做接口自动化&#xff0c;接口校验的脚本中&#xff0c;一般以响应报文作为预期值&#xff0c;通过sql查出的数据库值作为实际值&#xff0c;二者对比通过则认为接口输出正确。而sql从何而来呢&#xff0c;对于查询接口一般是…

perl 用 XML::DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi&#xff0c;装完后有520MB&#xff0c;建议安装在D:盘。 运行 …

HarmonyOS NEXT应用开发—组件堆叠

介绍 本示例介绍运用Stack组件以构建多层次堆叠的视觉效果。通过绑定Scroll组件的onScroll滚动事件回调函数&#xff0c;精准捕获滚动动作的发生。当滚动时&#xff0c;实时地调节组件的透明度、高度等属性&#xff0c;从而成功实现了嵌套滚动效果、透明度动态变化以及平滑的组…

【论文阅读】Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters

Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters 出处&#xff1a;2017IEEE Xplore 基于CPU-GPU混合集群的高效实时任务调度 主要工作&#xff1a;通过动态电压和频率缩放研究了新兴CPU-GPU混合集群的节能问题。 首次分析GPU特定的DVFS模型。 设计了…

Web核心,HTTP,tomcat,Servlet

1&#xff0c;JavaWeb技术栈 B/S架构:Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源…

安装snap再安装flutter再安装localsend@Ubuntu(FreeBSD下未成功)

Localsend介绍 localsend是一个跨平台的文件传送软件&#xff0c;可以在Windows、MacOS、Linux、Android和IOS下互相传送文件&#xff0c;只要在同一个局域网即可。 localsend官网&#xff1a;LocalSend 尝试安装localsend&#xff0c;发现需要使用flutter&#xff0c; 安装f…