学习Android Framework ? 入门教程和深入源码开发揭秘这里全都有

什么是Android FrameWork,请你介绍一下? Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。Android Framework建立在顶层应用与C/C++库之间,主要由三部分组成:服务端、客户端、Linux驱动。 阅读详情

前言

Android系统一共分为4层

其中AndroidFramework

是应用程序框架层(framework):
应用程序使用的系统API框架,提供各种组件和服务,包括ActivityManager,WindowManager,ViewSystem等。

Framework在Android系统中处于一种承上启下的地位。承上的意思是框架为上层应用提供api和运行机制;启下的意思是框架屏蔽了下层的复杂性,为上下层的交互定义了一套规范。

为什么学习Framework

通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理,例如Binder的运行机制、ServiceManager的作用等等。

这里列一段Binder的相关知识

Binder 通信方式进程A给进程B发送一段信息,流程如下:

在这里插入图片描述

1、进程A通过系统调用拷贝内容到内核空间。 2、由于内核空间与进程B做了内存

映射,因此进程B能够知道内核空间的信息。

从上可知,通过Binder,进程A给进程B发送信息只进行了一次数据拷贝。 对比其它IPC方式可知

:
在这里插入图片描述

另外,传统的IPC方式只能由使用者填入UID/PID,容易被外界仿造、篡改。而Binder内置为发送

者添加UID/PID,更安全。

Android Binder 使用场合

似乎平时很少使用Binder呢?其实不然,我们不知不觉中已经用了它。 上图展示了Binder使用

C/S模式,也就是S(Server)端提供服务入口,C(Client)调用服务提供的接口,进而两者可以进

行通信。 先来看看一段手机马达震动的代码:

Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

vibrator.vibrate(1000);

调用了Context里的方法:getSystemService,指定获取名为:VIBRATOR_SERVICE 的服务,拿到服务后调用 vibrate(xx)即可实现手机震动。 每个App都能通过访问这段代码来实现手机震动,

可想而知拿到的"震动服务"一定是某个地方统一提供的。 我们知道,Android系统启动后会开启名为:system_server的进程,顾名思义:系统服务,提供给所有App使用的公共服务进程。 “震动服务"就是跑在该进程里的。 当调用getSystemService(xx)获取"震动服务时”,相当于调用者

(App进程)与system_server(服务提供进程)进行了一次IPC过程(实际比较复杂,简单说是:

通过ServiceManager获取Binder,该Binder连接system_server,ServiceManager跑在另外的进程

如果你最近在找工作或者有关注Android行业的招聘这一块就会发现,现在很多公司,特别是大厂在招聘高工或者架构师的时候都会将熟悉framework原理或源码列为招聘要求之一。

在这里插入图片描述

在这里插入图片描述
像涉及到车载之类的也需要会Framework。所以Framework因为它涉及的广,理所当然就业面也广。

如何学习?

如果你是因为缺少学习资料,而我正好薅到这本阿里十年技术专家联合打造的Android Framework学习指南。

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要《Android Framework进阶学习指南》完整文档的可扫描下方卡片免费获取~

《Android Framework 开发揭秘》

目录

img

第一章 系统启动流程分析

​ ● 第一节 Android启动概览

​ ● 第二节 init.rc解析

​ ● 第三节 Zygote

​ ● 面试题

img

第二章 Binder解析

​ ● 第一节 宏观认识Binder

​ ● 第二节 binder的jni方法注册

​ ● 第三节 binder驱动

​ ● 第四节 数据结构

​ ● 第五节 启动service_manager

​ ● 第六节 获取service_manager

​ ● 第七节 addService流程

​ ● 第八节 Binder面试题全解析

第三章 Handler解析

​ ● 第一节 源码分析

​ ● 第二节 难点问题

​ ● 第三节 Handler常见面试题

第四章 AMS解析

​ ● 第一节 引言

​ ● 第二节 Android架构

​ ● 第三节 通信方式

​ ● 第四节 系统启动系列

​ ● 第五节 AMS

​ ● 第六节 AMS面试题解析

img

第五章 WMS解析

​ ● 第一节Activity与Window相关概念

​ ● 第二节 Android窗口管理服务WindowManagerService计算Activity窗口大

​ ● 第三节Android窗口管理服务WindowManagerService对窗口的组织方式分析

​ ● 第四节 Android窗口管理服务WindowManagerService对输入法窗口(Input

​ ● 第五节 Android窗口管理服务WindowManagerService对壁纸窗口(Wallpap

​ ● 第六节Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析

​ ● 第七节Android窗口管理服务WindowManagerService显示Activity组件的启

​ ● 第八节Android窗口管理服务WindowManagerService切换Activity窗口(A

​ ● 第九节 Android窗口管理服务WindowManagerService显示窗口动画的原理分析

img

Android Framework层开发 SystemUI路径:framework/base/package/systemUI/安装mingw,配置环境变量,即可用 gcc(类似Java的JVM)命令编译c文件;写C的工具:CodeBlocks预处理指令:#include 预处理器会对其处理条件编译指令: #if #else #elif #endif宏定义:#define PI 3.14可视化输入: scanf(“%d”, &a)C是没有GC的!C的碎片管理是依托于OS的碎片整理机制。 阅读详情

相关推荐

framework学习路线和方法

之前分享过我转framework的经历,可以看这里《我是如何从Android开发转framework开发的》,今天根据自己实际工作感受整理出一份framework的学习路线和方法,仅供参考,如有不足,还望指正。学习framework是一件非常枯燥的事情,原因在于相比于app开发的coding,framework更侧重于对源码的reading,但学习它能让我们更深入的了解Android系统,增加自身的知识储备,降低自己在行业中的可替代性,延长自己的职业生涯,提高自身身价。

这个人很懒,什么都没留下... 8888

深入Android Framework开发(入门篇)

广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主,让你自己动手可以定制自己喜欢的Android系统,让你的Android职业道路越走越顺。 学完本课程能让你学会如下知识点: -学习Framework背景及它的巨大作用-Android源码环境搭建及让自己系统第一次跑起来-学习Frameowork开发的一些必要基础知识-学习怎么进行Android源码定位分析,实例:Activity启动流程源码分析-实战开发Frameowork项目--去除第三方应用入口广告页

Android Framework源码解析篇~_android framework 源码开发手册

下面都是 通过binder发送到ApplicationThread由它调用ActivityThread父类的 scheduleTransaction最后在TransactionExecutor(ClientTransactionHandler)的 executeCallbacks,executeLifecycleState 中调用对应的 execute方法,分配到对应的 ActivityThread 的各个生命周期调用里。

2401_87022349的博客 1364

Android Framework实战开发篇

广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主,让你自己动手可以定制自己喜欢的Android系统,让你的Android职业道路越走越顺。学完本课程能让你学会如下知识点:-学习对BootAnimation的启动源码分析-学习对BootAnimation的opengl绘制源码分析-学习对BootAnimation的zip方式绘制源码分析-学习制作一个带有时间的显示的BootAnimation的动画-深入理解zip方式定制BootAnimation-学习android native层的posix线程实现-学习android native层封装的Threads类源码及使用-学习zygote的启动源码分析-学习zygote的进程创建过程源码分析-学习zygote启动systemserver过程分析-学习systemserver的启动分析-学习systemserver的HomeActivity的启动源码分析-学习systemserver与zygote进行socket通信创建进程源码分析-学习systemserver启动FallbackHome的Activtiy-学习FallbackHome结束及跳转Launcher源码分析-学习native c/c++层的堆栈打印

如何学习 Android Framework ?如何从应用深入到 Framework?

大部分有 “如何学习Framework源码” 这个疑问的,应该大都是应用层开发。 应用层是被 Framework 层调用执行的,知道自己的代码是怎么被调用的,才能理解程序的本质,理解本质有助于解决遇到的新问题,同时才有更多方法去优化应用层逻辑。 目前大公司的App开发都要基于模块化、层次化、组件化、控件化的思路来设计架构,而这一切的基础都建立在 Android Framework 系统框架底层原理实现之上,所以与它相关的知识都尤为重要。 那我们如何学习 Framework 呢? 关于如何学习 Androi

qq_44102588的博客 1583

【MFRC522】STM32与MFRC522的SPI通信优化及常见问题解析

本文深入解析了STM32与MFRC522进行SPI通信的优化方法与常见问题。从基础的硬件连接到SPI时序优化,再到关键的寄存器配置(如RFCfgReg设为0x4F以提升读卡稳定性),文章提供了详细的调试技巧和实战排坑指南,帮助开发者实现稳定高效的IC读卡应用。

yhn45678901的博客 841

《Android Framework源码开发揭秘》从源码学习到实战应用

在Android开发的职业生涯中,随着经验的积累,进阶成为每位开发者必然面对的选择。而对于决定深耕Android领域的开发者而言,深入理解Framework无疑是提升自我、突破瓶颈的关键一步。

xiaokangss的博客 1535

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8606

Android Framework开发应该如何入门?写给程序员Android Framework 开发,这一篇就够了

前言 在 Android 开发者技能中,如果想进大厂,一般拥有较好的学历可能有优势一些。但是如果你靠硬实力也是有机会的,例如死磕Framework。Framework 知识广泛应用在Android各个领域中,重要性显而易见。 成为一名Android Framework高手,也是目前招聘过程中非常稀缺的人才,可以成为你的敲门砖。 Framework就像一棵常青的技能树,不管是普通开发还是首席架构、CTO 都能够从中汲取足够的技术养料。普通开发往往对Framework只停留在“使用过”甚至是“听说过”的阶段,这

xiaokangss的博客 1万+

Yolov5自定义图片训练测试及模型调优(详细过程)

Yolov5自定义数据训练及测试1. 图像数据获取、标注2. 数据集划分及准备3. 配置训练参数,准备训练:3.1 修改data/训练配置xxx.yaml文件:3.2 修改models模型配置xxx.yaml文件4. 开始训练5. 测试训练后的模型: 1. 图像数据获取、标注 如果自定义训练自己的数据集,首先需要数据标注,至于数据来源可以是下载现有的开发数据集、拍照、爬虫等等。 如果是拍照、爬虫等获取的数据图片,需要进行数据标注,这个过程可以使用工具来做,但也需要一些手动操作 。。并且图片越多越好,如果

HowieXue 薛永浩的博客 10万+

FFmpeg + Qt 实现摄像头采集与 MP3 背景音乐 RTSP 推流

在直播或视频监控场景中,我们经常需要将摄像头画面与背景音乐混合后推送到 RTSP 服务器。本文将详细介绍如何使用Qt框架结合摄像头实时采集(Windows 下使用dshow,Linux 使用v4l2视频预览(显示为 QImage)视频 H.264 编码 + RTSP 推流从 MP3 文件读取音频,重采样为 AAC 编码并推流循环播放音频文件解决中文文件路径打开失败的问题文章将剖析每个技术环节的关键代码,并给出完整的类实现。

weixin_45397344的博客 504

《Android Framework源码开发揭秘》,老手经验,新手指南,一起吃定Framework

在2024年,计算机行业并未如人们所想的那样充满希望,经济下滑和公司大规模裁员的现象屡见不鲜,对于从事计算机行业的人来说,特别是Android开发领域,情况更是不容乐观。那些经验丰富的老程序员面临就业困境,而刚毕业或初入行业的新人则因缺乏经验、技术水平不足等原因难以找到工作。整个Android开发领域仿佛陷入了沉寂。然而,在这个行业中,有一个细分岗位却一直处于高薪少人的状态,那就是Android Framework开发。

bugyinyin的博客 854

Unity之Timeline教程

Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。Activation Track:用于控制物体的激活状态。可以在轨道上添加关键帧,控制物体的激活和非激活状态。Animation Track:用于处理物体的动画。可以在此轨道上添加关键帧,编辑物体的动画状态。Audio Track:用于处理场景中的音频。可以管理音频的播放、暂停、淡入淡出等操作。

TxNet 9444

我是如何从Android开发转framework开发的

转framework开发快一年了,一直都想写一篇文章,分享一下自己的工作心得,也让做应用开发的小伙伴对framework开发有一定的了解,但因为种种原因耽搁了,今天就趁着工作闲暇之余,聊聊我从应用开发转framework开发的心路历程,自己也是刚开始学着写文章,文笔不太好,请见谅。

这个人很懒,什么都没留下... 6045

pg lib的信息及产生pg lib的三种方法

pg lib相比basic lib会多几方面pg 信息。除了pg arc(pg pin)以外,liberty还提供电压值,以及pmk cell的power_down_function功能相关信息。1.电压值除了常见的primary pg还有secondary pg和衬底。2.pg arc后端需要去做redhawk功耗分析,需要pg liberty提供pg arc,如果没有pg arc就需要手动去写custom lib代替3.pmk cell的power_down_function。

m0_61544122的博客 595

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分析工作,本次主要基于对话工作流模式对Excel文件、csv文件进行解析处理,并进行成图等数据分析工作。主要用到的插件有LLM节点,文档提取器、参数提取器、自定义代码节点、echart插件等。实现解析Excel数据,经过上述不同节点的处理分析流程,最终实现数据统计图展示。

hhue2007的专栏 1万+

《Android Framework源码揭秘》从市场饱和到Framework精钻

现在Android开发的现状大致是这样的,人才过度饱和,加上跨端和小程序盛行,原生客户端岗位进一步萎缩,从目前来看,虽然APP程序员的需求依然存在,但市场上的招聘难度已经逐渐加大。更别说今年的人才市场还多出来从各大厂被优化的技术人员,再加上超1179万的高校毕业生流入市场,所以对于刚入门的APP开发,想要找到理想工作难度增大。

大模型训练 1361

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十九):微服务实战——Boot 4 + Spring Cloud 2026.x,构建高并发电商分布式系统

Component@Slf4j@Autowired// 白名单路径@Override// 白名单放行// 提取Token// 传递用户信息到下游服务.mutate().build();@Override// 最高优先级if (bearer!@Component技术点Boot 3 时代Boot 4 时代提升线程模型平台线程池(200线程上限)虚拟线程(百万级并发)50x+服务通信。

qq_17204557的博客 186

【亲测免费】 Android Framework 开发揭秘:深入探索Android系统的核心

Android Framework 开发揭秘:深入探索Android系统的核心 【下载地址】AndroidFramework开发揭秘资源下载 Android Framework 开发揭秘资源下载 项目地址: https://git...

gitblog_06672的博客 1195

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android Framework 开发解密,移动开发者必须掌握的底层原理_《android framework 开发揭秘

在这里给大家推荐一份由,全文共包含109个知识点,通过经典Binder、Handler、AMS等加深你对AndroidFramework框架层的理解,助你轻松上手Framework!(需要完整版的可扫描下方二维码领取)**腾讯技术团队出品《AndroidFramework开发揭秘》**完整文档的可点击直接领取。

2501_90255891的博客 1102

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

掌握《Android Framework源码开发揭秘》,成为移动开发领域的领跑者

前两天被一条消息给震惊到了:阿里上半年裁员超1.36万人,今年将新增近6000名应届大学生。差点以为阿里扛不住了。。。。裁员这个事大家应该见怪不怪,这两年,我们已经被一波又一波的裁员浪潮,冲激得可以说是麻木了,但是1.36万这个数字还是挺吓人的。毕竟大厂出来降维打击,挤占的是小厂员工的工作机会。那么在变幻莫测的职场中,Android开发要如何实现自救,保全自己呢?那必然是深入底层,抓住不变量要知道,底层知识永远都不过时。

star_nwe的博客 856

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【2024最新】华为开发大佬整理的《Framework源码开发揭秘》已正式开源!

在软件开发的世界里,掌握核心的Framework内核知识对于开发者来说无疑是一把利剑,它能让你在技术面试中游刃有余,更能在实际工作中解决复杂问题。今天,我们兴奋地宣布,华为的资深开发专家精心整理的《Framework源码开发揭秘》已经正式开源,为广大开发者带来了一份宝贵的学习资源!深入内核,掌握核心。这份汇总涵盖了Framework内核的各个方面,从基础概念到高级特性,从性能优化到内存管理,每一个问题都是精心挑选,旨在帮助你深入理解操作系统的核心机制。面试必备,提升竞争力:无论你是准备跳槽还是期待晋升,这份

m0_56255097的博客 890

Android Framework开发如何入门?Framework到底该如何学习?看完这你就知道了

作为一名合格的 Android 开发,需要学习 Framework 知识,来解决 App 稳定性相关的问题Framework 的源码学习一般由 init.rc 开始看起,因为它是一个 Android 系统启动必备的重要脚本,之后的几大系统进程都是由它启动的,比如 zygote,systemserver 等,这里主要记录一些基本概念,以及 Zygote 启动的源码分析。

老皮的博客 2445
上一篇: 快来看!Android Studio 自定义快捷键调用外部程序
下一篇: “从离职阿里到荣膺P7认证:Android实习生的成长经历“
Agent学习路线
博客等级 码龄6年 1万+粉丝 1904原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值