android framework开发如何入门

发布于:2025-02-10 ⋅ 阅读:(73) ⋅ 点赞:(0)

📢 1. 职业规划篇
来聊聊安卓职业规划?整机开发大专能做么?
📢 2.基础篇
基础篇.前言
基础篇.编译环境搭建
基础篇.源码目录简介
基础篇.系统 mk_bp 讲解
基础篇.开机动画定制
基础篇.定制桌面壁纸、导航方式
基础篇.系统属性、api 使用
基础篇.名称修改、名词介绍
基础篇.用 bugreport 带你看 Crash 和 ANR
基础篇.Provision 源码分析

📢 3. 系统应用篇
系统应用篇.开机向导制作一
系统应用篇.开机向导制作二
系统应用篇.Settings 导航切换分析
系统应用篇.开机向导导航切换一
系统应用篇.开机向导导航切换二
系统应用篇.gms 制作集成
系统应用篇.开机向导适配 GMS
系统应用篇.Launcher3 结构剖析一
系统应用篇.Launcher3 结构剖析二
系统应用篇.Launcher3 结构剖析三
系统应用篇.Launcher3 图标加载流程一
系统应用篇.Launcher3 图标加载流程二
系统应用篇.Launcher3 桌面布局定制
系统应用篇.解密 Partner、google PAI 机制
系统应用篇.Partner 机制预制壁纸、默认布局
系统应用篇.Launcher 双排 Hotseat 定制一
系统应用篇.Launcher 双排 Hotseat 定制二
系统应用篇.Launcher 双排 Hotseat 定制三
系统应用篇.Launcher Taskbar 简介以及调出
系统应用篇.SystemUI 篇_用工具教会你看布局、进程
系统应用篇.SystemUI 结构讲解一
系统应用篇.SystemUI 结构讲解二
系统应用篇.SystemUI 的启动流程
系统应用篇.SystemUI 导航栏创建一
系统应用篇.SystemUI 导航栏创建二
系统应用篇.SystemUI 自定义导航按键
系统应用篇.SystemUI 快捷面板下拉流程
系统应用篇.SystemUI 定制禁用锁屏下拉通知栏
系统应用篇.SystemUI 通知注册流程
系统应用篇.SystemUI 通知发送流程

📢 4. 系统篇
系统篇.SystemServer 篇_应用与系统进程间关系
系统篇.SystemServer 简介、自定义 Service 服务一
系统篇.SystemServer 简介、自定义 Service 服务二
系统篇.SystemServer 简介、自定义 Service 服务三
系统篇.SystemServer 简介、自定义 Service 服务四
系统篇.SELinux 问题解决套路一
系统篇.SELinux 问题解决套路二
系统篇.ActivityManagerService 简介
系统篇.WindowManagerService 简介一
系统篇.WindowManagerService 简介二
系统篇.PackageManagerService 简介一
系统篇.PackageManagerService 简介二
系统篇.FW 实战 - Letterbox 定制应用方向一
系统篇.FW 实战 - Letterbox 定制应用方向二
系统篇.分屏流程一
系统篇.分屏流程二

📢 5. 性能篇
(省)低内存优化
性能篇 (省). 低内存查杀机制
性能篇 (省).SystemServer 与 LMK 的 socket 通信
性能篇 (省). 内核进程 LMKD
性能篇 (省). 内存分析
性能篇 (省). 内存泄漏定位与解决
(稳)稳定性优化
性能篇 (稳).WatchDog 检测机制一
性能篇 (稳).WatchDog 检测机制二
性能篇 (稳). 深入 Crash 捕获器流程一
性能篇 (稳). 深入 Crash 捕获器流程二
性能篇 (稳). 深入炸弹 ANR 流程一
性能篇 (稳). 深入炸弹 ANR 流程二
(快)开机优化
性能篇 (快). 开机耗时分析
性能篇 (快). 开机耗时优化
性能篇.实战优化方案分享

1. 源码下载编译

Repo 的使用

Repo 介绍:Repo 是 Google 开发的用于管理多个 Git 仓库的工具,在 Android 开发中,由于 Android 源码由众多 Git 仓库组成,使用 Repo 可以更方便地进行统一管理。

安装 Repo:在 Linux 或 macOS 系统中,通过 curl 命令下载 Repo 脚本,并赋予其可执行权限,添加到系统路径中。在 Windows 系统中,可通过安装 Cygwin 等工具来模拟 Linux 环境进行安装。
初始化 Repo:在一个空目录下执行repo init -u <Android源码仓库地址>,<Android源码仓库地址>通常为官方的 Git 仓库地址,如https://android.googlesource.com/platform/manifest。这里可以指定不同的分支,如-b android-12.0.0_r1来获取特定版本的源码。

同步源码:执行repo sync命令,Repo 会根据初始化时指定的清单文件,从各个 Git 仓库下载对应的代码到本地,此过程可能需要较长时间,取决于网络速度和源码规模。

Git 命令的使用

基本操作
克隆仓库:git clone <仓库地址>,用于将远程 Git 仓库克隆到本地,如git clone https://github.com/user/repo.git。在 Android 源码环境中,虽然 Repo 管理多个仓库,但有时也会针对单个仓库进行操作,此时会用到 Git 的克隆命令。

提交更改:修改文件后,先使用git add <文件路径>将文件添加到暂存区,然后使用git commit -m "提交说明"进行提交,“提交说明” 应简洁明了地描述本次修改的内容。

推送更改:当在本地完成开发并提交后,若要将更改推送到远程仓库,执行git push origin <分支名>,origin为远程仓库的默认名称,<分支名>为要推送的分支。

分支管理:
创建分支:git branch <分支名>,例如git branch feature - branch创建一个名为feature - branch的分支。
切换分支:git checkout <分支名>,用于在不同分支间切换。
合并分支:在目标分支下执行git merge <源分支名>,可将源分支名的更改合并到当前分支。如在master分支下执行git merge feature - branch将feature - branch分支合并到master分支。

2. 源码目录解构的了解

根目录文件与目录

build 目录:包含用于构建 Android 系统的脚本和配置文件,不同的编译目标和配置在这里进行设置。例如,build/core目录下存放着核心的编译规则,build/make目录包含各种编译相关的 Makefile 文件。
device 目录:厂商特定的设备配置和相关代码,不同设备厂商会在此目录下添加针对自己设备的定制代码,如device/samsung下可能存放三星设备相关的配置和驱动代码。

external 目录:存放外部开源项目,这些项目经过修改和整合后融入到 Android 系统中,如external/sqlite为 SQLite 数据库的代码,external/webkit为 WebKit 浏览器引擎代码。

frameworks 目录:Android Framework 的核心代码所在,frameworks/base包含了基础框架代码,涵盖了各种系统服务、资源管理、视图系统等;frameworks/opt目录下是一些可选的框架模块,如frameworks/opt/telephony为电话相关的框架代码。
kernel 目录:Linux 内核源码,不同版本的 Android 系统对应不同版本的 Linux 内核,这里是内核相关驱动、进程管理、内存管理等核心代码所在。

packages 目录:系统应用和包的代码,packages/apps存放着各种系统应用,如 Launcher、Settings 等应用的源码;packages/services包含系统服务相关代码。
重要子目录深入剖析

frameworks/base/core/java 目录:此目录包含了 Android Framework 的核心 Java 代码,许多重要的系统类和接口都在此定义,如android.content.Context、android.view.View等类,这些类是应用开发和系统开发交互的重要桥梁。
frameworks/base/services/java 目录:系统服务的 Java 实现代码,例如ActivityManagerService(AMS)负责管理系统中所有 Activity 的生命周期和任务栈,PackageManagerService(PMS)负责管理应用程序包的安装、卸载、查询等操作。

3. 系统界面如何找到对应的 Java 代码文件

基于组件名称查找

Activity:在packages/apps目录下找到对应的应用目录,例如要找 Settings 应用的界面代码,进入packages/apps/Settings目录。在该目录下的src目录中,按照包名结构查找相关的 Activity 类,通常 Activity 类名与界面功能相关,如SettingsActivity可能是 Settings 应用的主界面 Activity。在代码中,通过布局文件引用(如setContentView(R.layout.activity_settings))可以进一步找到对应的布局文件,了解界面的具体布局结构。

Fragment:同样在应用的src目录下,Fragment 类用于实现界面的部分功能模块,特别是在一些复杂界面中,通过查找 Fragment 类名,如SettingsFragment,可以找到对应的 Fragment 代码,Fragment 类中会包含界面初始化、数据加载等逻辑。

通过资源 ID 查找
在布局文件(通常位于res/layout目录下)中,每个视图控件都有一个唯一的资源 ID,如。在 Java 代码中,可以通过资源 ID 来操作这些控件,使用findViewById(R.id.button_save)方法获取控件实例。在整个项目中搜索该资源 ID,就可以找到与之相关的 Java 代码逻辑,从而定位到处理该控件事件或功能的代码位置。

利用布局工具

4. 系统功能对应系统应用的源码了解度

系统功能与应用对应关系

电话功能:主要对应packages/apps/Phone应用,该应用源码实现了拨打电话、接听电话、通话记录管理等功能。同时,frameworks/opt/telephony框架模块提供了底层的电话服务接口,与packages/apps/Phone应用相互配合,实现完整的电话功能。例如,PhoneApp类是packages/apps/Phone应用的入口类,负责初始化电话相关的服务和界面。

蓝牙功能:packages/apps/Bluetooth应用负责管理蓝牙设备的配对、连接等操作。在frameworks/base/core/java/android/bluetooth目录下有一系列蓝牙相关的 API,应用通过调用这些 API 与底层蓝牙驱动进行交互。如BluetoothAdapter类用于获取本地蓝牙适配器,实现开启、关闭蓝牙,搜索蓝牙设备等功能。

系统应用源码分析
Settings 应用:作为系统设置的核心应用,其源码结构复杂且功能丰富。在packages/apps/Settings目录下,src目录包含了 Java 代码,res目录存放资源文件。SettingsActivity类是主界面入口,通过SettingsFragment来组织和展示各种设置选项。不同的设置选项对应不同的 Fragment 类,如DisplaySettingsFragment负责显示相关设置,NetworkSettingsFragment负责网络设置等。这些 Fragment 类通过与系统服务(如SettingsProvider)进行交互,实现设置的读取和保存。

Launcher 应用:负责显示主屏幕和应用列表,在packages/apps/Launcher3(不同版本可能有差异)目录下。Launcher类是主入口,负责初始化界面和加载应用图标。Workspace类用于管理主屏幕的布局和应用图标的排列,AllAppsRecyclerView类负责显示应用列表。通过分析这些类的代码,可以了解如何实现应用图标的加载、拖动、布局管理等功能。

总结

Android Framework 开发入门,并非存在复杂的技术难点,主要挑战在于其开发环境与传统应用开发有所不同。
入门需掌握以下关键技能:
源码操作:进行源码的下载/编译/刷机/提交
源码结构认知:对源码的组成结构有一定了解,明晰各目录及模块的功能与作用
源码定位:学会根据系统界面等 UI 元素,通过工具,快速定位到对应的源码位置
当切实掌握上述技能,便意味着踏入了 Android Framework 开发的大门。后续则需进一步深入钻研,全面理解和掌握源码的细节与逻辑。
android职业能力提升:Log.d(“qq”,“251662478”
);
给你重启另一条拼搏的路径(应用到系统开发视频课)
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到