Android初学者系统开发学习路线参考
文章目录
- Android初学者系统开发学习路线参考
-
- 一、前言
- 二、Android初学的学习计划
-
- 第一阶段(一个月)UI相关学习:
-
- [开发环境与 UI 基础,第一周:](#开发环境与 UI 基础,第一周:)
- [UI 控件与布局进阶,第二周:](#UI 控件与布局进阶,第二周:)
- [高级 UI 控件与动画 , 第三周:](#高级 UI 控件与动画 , 第三周:)
- [数据存储与网络 , 第四周:](#数据存储与网络 , 第四周:)
- 第二阶段(一个月)系统初级知识学习:
-
- 系统初级知识学习,第一周:
- [系统组件与开发环境基础 ,第二周:](#系统组件与开发环境基础 ,第二周:)
- 性能基础与服务扩展初步,第三周:
- 综合实践与巩固提升,第四周:
- 三、其他
- 1、小结
- 2、Android面试题目之常见的选择题
- [3、Android 系统开发初学者需要掌握的基本知识归纳](#3、Android 系统开发初学者需要掌握的基本知识归纳)
-
- (1)基础知识:构建底层能力
- [(2)Android 系统架构:理解分层逻辑](#(2)Android 系统架构:理解分层逻辑)
- [(3)核心技术:系统开发的 "骨架"](#(3)核心技术:系统开发的 “骨架”)
- (4)调试与分析:解决问题的工具
一、前言
最近公司新来了一些毕业大学生,刚进公司,计算机专业,有点Java或者C基础的,
需要花两个月左右学习并掌握Android相关开发知识。
小组内主要从事系统开发和系统应用开发,
所以计划是第一个月先学习Android基础知识,第二个再学习系统framework上层相关知识。
我的要求是每天形成文档总结,把学习内容和经验记录下来,也可以发到CSDN上面,
即使当天学不懂的,也需要把相关的知识收集记录,后续再回头学习;
每天有阶段性内容学习和进步,这样就不会比较迷茫。
下面是我制定的大致学习计划。
二、Android初学的学习计划
计划如下:
第一阶段(一个月)UI相关学习:
开发环境与 UI 基础,第一周:
时 间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | 安装 Android Studio,配置 SDK、AVD 模拟器; 熟悉项目结构与 Gradle 基础 其他相关软件Git、Notpad++、everythings、安装使用 | 搭建 Hello World 项目,观察项目目录结构 |
第 2 天 | Android系统框架知识 Android 四大组件 Android的六大布局 | 了解基础内容,并形成三个文档总结 |
第 3 天 | Activity 生命周期 Activity 跳转与 Intent 数据传递 | 开发一个含两个 Activity 的应用,实现文本数据从第一个 Activity 传递到第二个 Activity |
第 4 天 | XML 布局基础 LinearLayout 布局使用与属性设置 RelativeLayout 布局原理与应用 | 用 LinearLayout 实现一个简单的图片展示页面,包含图片和描述文字 用 RelativeLayout 重新布局图片展示页面,调整元素位置关系 |
第 5 天 | TextView、Button、EditText 常用控件的属性与事件处理 ImageView 图片加载与属性设置;图片缩放、裁剪处理 | 1、开发一个简单的用户信息输入页面,包含姓名输入框、年龄输入框和提交按钮,点击按钮在 TextView 显示输入信息 2、在用户信息输入页面添加头像显示功能,实现图片的选择与显示 |
第6-7天 | 复习本周内容,将 LinearLayout 和 RelativeLayout 布局的图片展示页面代码整理,总结布局特点 | 总结LinearLayout 和 RelativeLayout 布局使用规则和 |
常用控件除了上面文本、按钮、输入框,还有单选框,多选框,下拉框,对话框、吐司等基本UI控件。
第一周主要熟悉Android环境和框架,demo运行后能添加简单控件显示和控制
UI 控件与布局进阶,第二周:
时 间 | 学习内容学习内容 | 实战任务 |
---|---|---|
第 1 天 | RecyclerView 、ListView基础:适配器与 ViewHolder 模式;列表数据展示 | 1、展示一个电影列表页面,每一项显示电影名称和海报图片 2、分别使用ListView和RecyclerView实现一样的功能效果 |
第 2 天 | 自定义 View 入门:onDraw 方法使用,绘制简单图形 自定义 View:onMeasure 和 onLayout 方法,自定义 View 尺寸与位置控制 | 绘制一个可拖拽的自定义的进度条 View,用于展示任务进度 |
第 3 天 | 属性动画:ObjectAnimator 实现控件动画效果(如缩放、平移、旋转) 补间动画:TweenAnimation 实现动画效果,动画集组合使用 帧动画:AnimationDrawable 使用,实现简单的逐帧动画 | 三大动画效果使用总结 |
第 4 天 | CoordinatorLayout + AppBarLayout + Toolbar 实现折叠效果 | 写个新闻资讯 APP 首页添加折叠 Toolbar 效果 |
第 5 -7天 | 本周实战:开发一个简易的新闻资讯 APP 首页,综合运用 LinearLayout、RelativeLayout、ConstraintLayout 布局,使用 TextView、ImageView、RecyclerView 等控件展示新闻标题、图片和简介 | 参考UC浏览器首页完成新闻资讯 APP 首页开发,提交代码并总结遇到的问题及解决方法 1、在新闻资讯 APP 启动页添加补间动画,展示应用 Logo 的渐变和缩放效果 2、在新闻详情页添加加载动画,用帧动画展示加载过程 为新闻资讯 APP 首页添加折叠 Toolbar 效果,提升页面交互感 为新闻列表项底部按钮添加点击动画,点击按钮项放大显示 |
第二周主要熟悉复杂一点的列表UI显示控制和自定义View+动画的简单知识。
高级 UI 控件与动画 , 第三周:
时 间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | ViewPager2 与 Fragment 结合实现多页面切换 | 在新闻资讯 APP 中添加不同新闻分类页面,通过 ViewPager2 实现滑动切换 |
第 2 天 | TabLayout 与 ViewPager2 联动,实现标签页切换效果 | 为新闻分类页面添加 TabLayout 标签,方便用户切换不同类型新闻 |
第 3 天 | Glide基础(加载网络图片、缓存) 圆形图片、占位图、错误图 | 从网络或者一个图片的url网址,并显示在界面 |
第 4 天 | SharedPreferences + 简单存储 | 任务:新闻应用个人设置界面实现输入对话框"记住密码"功能: 点击保持后记住密码,下次重新打开应用,可以点击按钮控制显示密码 |
第 5 天 | SQLite数据库、Room框架的使用 | 使用两个数据库分别实现一个增删改查功能。 |
第6-7天 | 本周实战:完善新闻资讯 APP,添加更多动画效果和页面切换交互,提升用户体验 | 优化新闻资讯 APP,总结动画和滑动、交互功能实现过程中的要点 |
第三周主要学习Fragment的滑动交互+数据存储。
数据存储与网络 , 第四周:
时间 | 实战任务 | |
---|---|---|
第 1 天 | Retrofit、OkHttp(层网络请求,拦截器处理 Header、缓存)、子线程处理相关事务 | 使用Retrofit、OkHttp分别请求相同网页的json信息并显示出来 |
第 2 天 | Retrofit + 网络请求 Retrofit基础(接口定义、GET/POST请求) | 解析JSON(Gson/Moshi) 获取一段网络的json数据,解析出关键信息并显示。 |
第 3 天 | Kotlin基本语法学习 | kotlin知识总结文档 |
第 4 天 | 继续学习Kotlin只是并对比Java用法 | 总结文档:Kotlin基本用法和Java基本用法对比 |
第 5 天 | kotlin编写复杂示例 | 使用Kotlin编写上面的新闻应用代码 |
第6-7天 | 复习前四周的内容 | 本周实战:完善新闻资讯 APP,添加从网络获取数据,显示在界面 |
第四种主要学习网络请求的相关知识+kotlin编程;
因为大部分毕业生答辩用的是Java语言,所以Android 普通编程是没啥问题的;
先学习Android基础知识比较容易上手开发;
如果是啥都不会的同学,可以把kotlin和Java代码基础学习内容放在第一周的Android框架学习;
前面的课程往后调即可,大致还是一个月掌握Android基本知识。
第二阶段(一个月)系统初级知识学习:
系统初级知识学习,第一周:
时间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | Android 系统架构分层(Linux 内核层、系统运行库层、应用框架层、应用层)基础概念 | 绘制简单的架构分层图,标注每层的主要功能和代表组件 |
第 2 天 | Linux 内核在 Android 中的作用;驱动程序与硬件交互基础 | 查找自己手机的 Linux 内核版本,了解其对应的硬件支持特性 |
第 3 天 | Android 系统核心服务初识: Android SystemServer的启动过程 ActivityManagerService(AMS)、PackageManagerService(PMS) | 编写简单代码获取 AMS 实例,打印当前 Activity 数量 |
第 4 天 | Android 权限管理基础:权限分类、静态权限申请 | 开发一个简单应用,在清单文件中申请存储静态权限并使用 |
第 5 天 | Android 进程与线程基础概念;Zygote 进程的作用 | 编写代码获取当前设备的部分进程名称并打印 |
第6-7天 | Android IPC 机制入门:理解 Binder 机制的作用 复习前面的内容 | 学习 AIDL 示例代码结构,编写一个AIDL demo示例 |
第五周学习Android系统框架的入门知识
系统组件与开发环境基础 ,第二周:
时间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | ActivityManagerService(AMS):Activity 启动的基础流程 | 对比不同 Activity 启动模式在任务栈中的表现(通过日志观察) |
第 2 天 | PackageManagerService(PMS):应用安装、卸载的基础原理 | 编写工具类获取已安装应用的图标和名称并展示 |
第 3 天 | WindowManagerService(WMS):窗口显示的基本原理 | 开发一个简单的透明小窗口应用 |
第 4 天 | Android 系统定制开发环境初步搭建:了解源码下载工具和基本要求 | 完成下载工具安装和环境变量初步配置 |
第 5 天 | Android 系统配置文件基础:init.rc 和 build.prop 文件作用 | 备份自己设备的 build.prop 文件,观察文件内容 |
第6-7天 | Android 系统镜像基础认知:镜像组成部分简介 复习前面的内容 | 了解常见镜像文件格式和用途 |
第二周其实是对第一周系统内容进行重点内容的加固。
性能基础与服务扩展初步,第三周:
时间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | Android 系统性能分析工具入门:Logcat 使用 | 使用 Logcat 打印应用的运行日志,分析简单问题 |
第 2 天 | 内存管理基础:应用内存占用初步分析 | 使用 Android Studio 的 Memory Profiler 查看应用内存变化 |
第 3 天 | CPU 使用基础:查看应用 CPU 占用情况 | 使用系统自带工具或第三方 APP 查看应用 CPU 占用 |
第 4 天 | 系统广播基础:监听系统常见广播(如电量变化) | 开发应用监听电量变化广播并弹出提示 |
第 5 天 | 系统服务与应用交互基础:调用系统下载服务 | 开发应用调用系统下载服务下载文件 |
第6-7天 | Android 系统安全基础:应用签名基础概念 复盘本周内容以及上月内容 | 了解签名文件的生成和作用 |
这周主要学习一下辅助开发功能。
综合实践与巩固提升,第四周:
时间 | 学习内容 | 实战任务 |
---|---|---|
第 1 天 | 综合实践项目:开发一个具有简单系统交互功能的应用(如显示系统信息、接收系统广播) | 完成应用开发,实现显示设备型号、系统版本,接收网络变化广播等功能 |
第 2 天 | 项目测试与优化:使用基础测试方法检查功能 | 对项目进行功能测试,修复明显问题 |
第 3 天 | 学习成果整理:绘制知识图谱,总结学习收获 | 绘制 Android 系统初级知识图谱 |
第 4 -7天 | 查漏补缺:针对薄弱知识点强化学习; | 无 |
这周主要是总结学习的知识,列出自己薄弱部分,后续工作和生活进行强化。
上面主要是一个参考计划,有类似需求的可以适当修改。
三、其他
1、小结
上面只是对于有一定基本开发知识的学生制定的,两个月学习入门Android系统开发的参考计划。
如果是没有开发基础的,就要适当调整计划了:比如前面加基础内容学习后面减少framework的内容;
如果是较多开发APP项目,那么kotlin代码也是必学的内容。
只是学习上面的内容肯定是不够的,这里相当于入门的主要知识,很多只是还是要慢慢学习和总结。
其他的,比如:线程、进程、Handler、某些框架的原理实现,这些都是上层基础知识。
系统一些的,比如JNI、NDK、framework、AIDL、HIDL、音频开发、视频开发、Camera开发、网络开发等等。
这些都是系统中上层的开发内容,再底层就是驱动、内核那些了,我也了解比较少。
2、Android面试题目之常见的选择题
一些简单的上层面试题目:
https://blog.csdn.net/wenzhi20102321/article/details/76339063
3、Android 系统开发初学者需要掌握的基本知识归纳
Android 系统开发(区别于上层应用开发)更偏向底层框架、系统服务、内核适配等方向,对技术深度和底层知识要求较高。对于初学者,建议按以下体系逐步掌握核心内容:
(1)基础知识:构建底层能力
- Linux 系统基础
Android 基于 Linux 内核,需掌握 Linux 核心概念:- 基本操作:Shell 命令(
ls
/cd
/grep
/awk
等)、文件系统(/proc
//sys
等特殊目录)。 - 进程管理:进程 / 线程调度、PID/UID/GID、进程间通信(IPC)机制(管道、信号量、共享内存)。
- 权限模型:用户 / 组权限、文件权限(rwx),理解 Android 权限系统的 Linux 底层根源。
- 基本操作:Shell 命令(
- 编程语言与工具
- C/C++:内核、HAL(硬件抽象层)、多数系统服务核心逻辑用 C/C++ 实现,需掌握指针、内存管理、多线程(pthread)、STL 库。
- Java/Kotlin:Framework 层(如 ActivityManager、WindowManager 等服务)主要用 Java 编写,需熟悉面向对象、反射、注解等。
- 汇编(可选):调试内核或底层模块时可能用到,了解 ARM/x86 基本指令集即可。
- 工具:Git(版本控制)、Make/CMake(构建)、GDB(C/C++ 调试)、Android Studio(Framework 层调试)。
- 数据结构与算法
重点掌握:链表、哈希表、队列、栈、树(尤其是红黑树,Android 中广泛用于进程 / 内存管理),以及排序、查找算法(系统调度、资源分配依赖高效算法)。
(2)Android 系统架构:理解分层逻辑
Android 采用分层架构(从下到上),需明确每一层的作用和核心组件:
- Linux 内核层
- 核心功能:进程管理、内存管理(分页机制)、设备驱动(WiFi / 蓝牙 / 显示等硬件驱动)、电源管理。
- Android 对 Linux 的扩展:Binder 驱动(进程间通信)、Ashmem(匿名共享内存)、Logger(日志系统)、Low Memory Killer(内存不足时杀进程策略)。
- 硬件抽象层(HAL)
- 作用:隔离硬件与上层框架,让 Framework 层无需关心硬件细节(如不同厂商的摄像头驱动通过 HAL 统一接口提供给上层)。
- 核心:HAL 模块(
.so
库)、HAL 管理器(hwservicemanager
),需理解 HAL 接口定义(HIDL/AIDL)。
- 系统运行时层
- ART 虚拟机:应用进程的运行环境,负责字节码编译(AOT/JIT)、垃圾回收(GC)、内存管理。
- 核心库:如
libc
(C 标准库)、libcutils
(Android 工具库)、libutils
(基础工具类)。
- Framework 层
- 核心服务:系统的 "大脑",如:
ActivityManagerService(AMS)
:管理应用生命周期、进程优先级。WindowManagerService(WMS)
:管理窗口显示、触控事件分发。PackageManagerService(PMS)
:应用安装、权限管理、组件查询。PowerManagerService(PMS)
:电源管理、休眠 / 唤醒策略。
- 关键机制:Binder IPC(跨进程通信)、Handler 消息机制(线程通信)、Intent(组件跳转)、四大组件(Activity/Service 等)的底层实现。
- 核心服务:系统的 "大脑",如:
- 应用层
系统应用(如 Launcher、Settings)和第三方应用,系统开发需理解其与 Framework 层的交互逻辑(如应用如何通过 Binder 调用 AMS)。
(3)核心技术:系统开发的 "骨架"
- Binder IPC 机制
Android 最核心的跨进程通信方式,贯穿整个系统(服务调用、组件交互都依赖它):- 原理:基于内存映射(mmap)的高效 IPC,避免数据拷贝。
- 关键组件:
Binder驱动
(内核层)、ServiceManager
(服务注册 / 查询中心)、AIDL
(接口定义语言,简化 Binder 开发)。 - 实践:编写 AIDL 接口,实现客户端与服务端的跨进程通信。
- 系统服务开发
系统服务是 Framework 层的核心,需掌握:- 服务注册:如何将自定义服务注册到
SystemServer
(系统启动时的核心进程)。 - 服务调用:应用如何通过
Context.getSystemService()
获取服务并调用其接口。 - 生命周期:服务的启动、运行、销毁逻辑,以及与其他服务的依赖关系(如 AMS 依赖 PMS)。
- 服务注册:如何将自定义服务注册到
- HAL 开发与硬件适配
若涉及硬件相关开发(如传感器、摄像头),需掌握:- HIDL/AIDL:定义 HAL 接口,实现硬件厂商与 Framework 的解耦(Project Treble 之后强制要求)。
- HAL 模块编写:以
.so
库形式实现硬件操作逻辑,注册到hwservicemanager
。 - 调试:通过
lshal
命令查看 HAL 服务状态,用gdb
调试 HAL 模块。
- Android 编译系统
学会编译 Android 源码(AOSP)是系统开发的基础:- 环境搭建:Ubuntu 系统配置、依赖安装(
openjdk
/python
等)。 - 源码下载:通过
repo
工具同步 AOSP 源码(指定版本,如 Android 13)。 - 编译命令:
lunch
(选择目标设备)、make -j8
(编译镜像)、mmm
(单独编译模块)。 - 镜像烧录:用
fastboot
将编译出的system.img
/boot.img
烧录到设备。
- 环境搭建:Ubuntu 系统配置、依赖安装(
(4)调试与分析:解决问题的工具
- 基础调试工具
adb
:连接设备,执行命令(adb shell
进入设备终端,adb logcat
查看日志)。logcat
:过滤系统日志(按标签TAG
、进程PID
筛选,如logcat -s AMS:I
查看 AMS 日志)。- 串口调试:串口工具的简单使用,比如MobaXterm、SSCOM、SecureCRT。
dumpsys
:查看系统服务状态(如dumpsys activity
查看 Activity 栈,dumpsys meminfo
查看内存使用)。
- 性能分析工具
systrace
:分析系统耗时操作(如 UI 卡顿、进程调度延迟),生成 HTML 报告。PerfDog
:监控帧率、CPU / 内存占用,定位性能瓶颈。gdb
:调试 C/C++ 代码(如内核模块、HAL 库),设置断点、查看内存。
- 源码阅读工具
Android Studio
:导入 AOSP 源码,通过 "Find in Path" 快速搜索(重点关注frameworks/base/services
等目录)。repo
+git
:切换源码分支、查看提交记录(学习官方如何修复 bug)。- SourceInsight : 是一款面向项目开发的程序编辑器和代码浏览器,支持 C/C++ 、 C# 、 Java 等语言开发,具备符号数据库自动更新、代码导航和可视化工具等功能。