知识图库
Java知识库
JDK线程池实现原理
Java中的强、软、弱、虚引用
深入拆解Java虚拟机
01 开篇词 | 为什么我们要学习Java虚拟机?
02 Java代码是怎么运行的?
03 Java的基本类型
04 Java虚拟机是如何加载Java类的?
05 JVM是如何执行方法调用的?(上)
06 JVM是如何执行方法调用的?(下)
7 JVM是如何处理异常的?
Java面试常见问题整理
Java面试常见问题-Java 基础篇
Java面试常见问题-Jvm篇
Java面试常见问题-并发篇
Android知识库
Kotlin编程第一课
1 开篇词 | 入门Kotlin有多容易,精通Kotlin就有多难
2 Kotlin基础语法:正式开启学习之旅
3 面向对象:理解Kotlin设计者的良苦用心
4 Kotlin原理:编译器在幕后干了哪些“好事”?
5 实战:构建一个Kotlin版本的四则运算计算器
6 object关键字:你到底有多少种用法?
7 扩展:你的能力边界到底在哪里?
8 高阶函数:为什么说函数是Kotlin的“一等公民”?
9 实战:用Kotlin写一个英语词频统计程序
10 加餐一 | 初识Kotlin函数式编程
11 委托:你为何总是被低估?
12 泛型:逆变or协变,傻傻分不清?
13 注解与反射:进阶必备技能
14 实战:用Kotlin实现一个网络请求框架KtHttp
15 加餐二 | 什么是“表达式思维”?
16 加餐三 | 什么是“不变性思维”?
17 加餐四 | 什么是“空安全思维”?
18 春节刷题计划(一)| 当Kotlin遇上LeetCode
19 春节刷题计划(二)| 一题三解,搞定版本号判断
20 春节刷题计划(三)| 一题双解,搞定求解方程
21 春节刷题计划(四)| 一题三解,搞定分式加减法
22 什么是“协程思维模型”?
23 如何启动协程?
24 挂起函数:Kotlin协程的核心
25 Job:协程也有生命周期吗?
26 Context:万物皆为Context?
27 实战:让KtHttp支持挂起函数
28 期中考试 | 用Kotlin实现图片处理程序
29 题目解答 | 期中考试版本参考实现
30 Channel:为什么说Channel是“热”的?
31 Flow:为什么说Flow是“冷”的?
32 select:到底是在选择什么?
33 并发:协程不需要处理同步吗?
34 异常:try-catch居然会不起作用?坑!
35 实战:让KtHttp支持Flow
36 答疑(一)| Java和Kotlin到底谁好谁坏?
37 集合操作符:你也会“看完就忘”吗?
38 协程源码的地图:如何读源码才不会迷失?
39 图解挂起函数:原来你就是个状态机?
40 加餐五 | 深入理解协程基础元素
41 launch的背后到底发生了什么?
42 Dispatchers是如何工作的?
43 CoroutineScope是如何管理协程的?
44 图解Channel:如何理解它的CSP通信模型?
45 图解Flow:原来你是只纸老虎?
46 Java Android开发者还会有未来吗?
47 Kotlin与Jetpack简直是天生一对!
48 用Kotlin写一个GitHub Trending App
49 结课测试 | “Kotlin编程第一课”100分试卷等你来挑战!
50 结束语 | 不忘初心
Android Framework 教程—基础篇
01 Ubuntu 使用快速入门
02 Make 构建工具入门
03 理解 Unicode UTF-8 UTF-16 UTF-32
04 Linux Shell 脚本编程入门1——核心基础语法
05 SeAndroid 使用极速上手
06 理解 C++ 的 Memory Order
07 AOSP 极速上手
08 系统开发工具推荐
09 添加 Product
运动相关知识
爱上跑步
01 开篇词 | 跑步,不那么简单的事儿
02 跑两步就喘了,是不是我不适合跑步?
03 正确的跑步姿势是什么样的?
04 为什么跑步要先热身?
05 怎样制定你的第一个10公里跑步计划?
06 快跑和慢跑,哪个更燃脂?
07 普通跑步者应该如何选择跑鞋?
08 买跑步装备,不要踩这些坑儿
09 跑步前到底应不应该吃东西?
10 跑步到底伤不伤膝盖?
11 参加了20场马拉松,我是如何准备的?
12 除了马拉松,还能参加哪些跑步赛事?
13 热点问题答疑 :跑完第二天浑身疼,还要不要继续跑?
健身房计划
[DeepSeek]减脂塑形计划
【DeepSeek】训练周期安排
每日餐饮热量控制
减脂期间食物推荐避坑指南
HarmonyOS知识库
其他知识类目
心理学相关
如何学点心理学——关于非专业人士学心理学的一点建议
投射性认同
-
+
首页
07 AOSP 极速上手
>i [哔哩哔哩-文章配套视频教程](https://link.juejin.cn/?target=https%3A%2F%2Fwww.bilibili.com%2Fvideo%2FBV14g4y1x7Eo%2F%3Fvd_source%3Ddc959648d92fce190c8461996c134681) 在几个 Android 的技术交流群里经常看见做 App 开发的同学想要学习 Android Framework 进而转行 Android 系统开发。同时对于现有的书籍和网络博客,很多同学表示说看不懂学不会。这些书籍和博客都写得很好,但是主要面向的对象是具有 linux 系统开发经验的同学,App 开发的同学学习起来就会有点吃力。 学得懂的 Android Framework 教程聚焦成为让 App 开发同学学得懂,学得快,用得上的 Android Framework 教程。 今天分享的内容是怎么快速上手 AOSP,主要分为以下几个步骤: - 虚拟机安装 - 开发环境搭建 - 下载编译源码 - 从一个简单的实际开发需求体验 Framework 开发 ### 虚拟机安装 这里推荐在 Windows 下使用 VMware 虚拟机软件安装 Ubuntu20.04 进行开发(AOSP 官网推荐的的是 Ubuntu18.04,但 Ubuntu20.04 在 VMware下兼容性更好,实测也没有任何兼容性问题),安装系统的过程如下: #### 1. 在官网下载好 Ubuntu20.04 桌面版系统镜像  #### 2. VMware 新建虚拟机 打开 VMware,菜单栏选择 文件 -> 新建虚拟机 后,出现以下界面:  选择 自定义高级,然后点击 下一步,出现以下界面:  这里不用改,点击 下一步,出现以下界面:  选择 稍候安装操作系统,点击 下一步,出现以下界面:  操作系统选择 Linux,版本选择 Ubuntu 64位,然后点击 下一步,出现以下界面:  虚拟机名称处取一个你喜欢的名字,位置选择剩余空间超过 500G 的路径,然后点击 下一步,出现以下界面:  处理器数量选择 1,每个处理器的内核数量选择你 CPU 的线程数,比如我的 CPU 是 amd ryzen 3800x,8核心16线程,那么选择 16,然后点击 下一步,出现以下界面:  虚拟机内存的设置建议尽可能的大一些,内存小了,全编译系统会出错,这里选择 32G:  网络类型选择 使用桥接网络,然后点击 下一步,出现以下界面:  这里不改动,直接点击下一步,出现以下界面:  这里不改动,直接点击 下一步,出现以下界面:  这里不改动,直接点击 下一步,出现以下界面:  根据你磁盘的空间,最大磁盘大小尽可能设置大一点,我这里设置为 1024 G,然后点击 下一步,出现以下界面:  这里不改动,直接点击 下一步,出现以下界面:  选择 自定义硬件,出现以下界面:  选择 新 CD/DVD(SATA),出现以下界面:  右侧选择 使用 ISO 映像文件,点击浏览,选择我们刚才下载好的系统镜像,然后点击 关闭,出现以下界面:  然后点击完成,至此,虚拟机新建完毕。 #### 3. 系统安装 打开 VMware 虚拟机软件:  点击左侧 Ubuntu 64位 即我们刚才新建的虚拟机,点击右侧 开启此虚拟机,然后就进入了 Ubuntu 的系统安装流程:  左侧选择 English,右侧点击 install Ubuntu:  点击 continue:  点击 continue:  点击 install now:  点击 continue: 点击以后会显示一张地图,这里就不贴图了(有地图掘金平台审核不过),就是一张地图,点击一下中国,下面会显示 Shanghai,点击 continue:  依次输入: - 名字 - 电脑名字 - 用户名 - 密码 然后点击 continue,然后等待安装完成,重启虚拟机即可。 系统安装完成后,关闭虚拟机,点击 编辑虚拟机设置:  选择处理器,并勾选上虚拟化引擎两个选项:  ### 开发环境搭建 安装好系统后需要安装必要的软件: ```bash sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python ``` 至此,开发环境就搭建好了。 ### 下载编译源码 #### 1. 下载 repo 工具 ```bash mkdir ~/bin curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo chmod +x ~/bin/repo ``` repo 的运行过程中会尝试访问官方的 git 源更新自己,如果想使用 tuna 的镜像源进行更新,可以将如下内容复制到你的 `~/.bashrc` 或者 `~/.zshrc` 里。 ```bash export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' PATH=~/bin:$PATH ``` 然后 source 一下: ```bash source ~/.bashrc #如果使用的是 zsh #source ~/.zshrc ``` #### 2. 初始化仓库并同步远程代码 ```bash git config --global user.email "you@example.com" git config --global user.name "Your Name" mkdir aosp cd asop #初始化仓库,-b 指示分支,这里使用 android10 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41 #同步远程代码 repo sync ``` -b 后面的值参考源代码标记和 build。这里选用了 android-10.0.0_r41 版本用于学习。Android 每年都会更新一个大版本,学习的角度来说,选择一个不太老的版本即可,不必追新。 #### 3. 编译源码 ```bash source build/envsetup.sh lunch aosp_x86_64-eng make -j16 ``` #### 4. 运行模拟器 ```bash emulator -verbose -cores 4 -show-kernel ```  ### 从一个简单的实际开发需求体验 Framework 开发 **需求:**去掉原生 Launcher 中的 google 搜索栏。 很多产品,比如用于仓库,电商,物流的 pda 等,更多的是考虑功能性和稳定性,UI 的美观和易用性是其次的。这些产品一般是不会重新开发和定制 Launcher 的,但是会对 Launcher 做一些修改,比如一个常见的需求是:去掉原生 Launcher 中的 google 搜索栏。 由于众所周知的原因 google 搜索栏在中国是没有办法使用的。在中国销售的产品,肯定是要把它去掉的。 第一步:修改文件 `packages/apps/Launcher3/res/layout/search_container_workspace.xml`,将以下内容注释掉: ```xml <!-- <fragment android:name="com.android.launcher3.qsb.QsbContainerView$QsbFragment" android:layout_width="match_parent" android:tag="qsb_view" android:layout_height="match_parent"/> --> ``` 第二步:修改文件:`packages/apps/Launcher3/src/com/android/launcher3/Workspace.java` 将以下内容注释掉 ```java // CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1); // lp.canReorder = false; // if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) { // Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout"); // } ``` 第三步:重新编译源码,启动模拟器 ```go make -j16 emulator ``` 可以看到 Google 搜索框没有了。 很多同学可能有疑问,你怎么知道这么改就可以了?其实办法就一个——读源码。Launcher 也是一个 Android 应用,和我们平时开发的 App 没有本质的区别。就像我们接手别人开发的项目,去解决项目中的 bug,添加新的需求是一样的。 Android Framework 不同的是,代码量大,涉及知识广泛,App 开发同学如果没有人指导,阅读起来比较吃力。后续内容我们带着大家由浅入深,步步分解,为 App 开发的同学解开 Android Framework 的神秘面纱。 ### 总结 本文主要介绍了以下几个方面的内容: - 虚拟机安装 - 开发环境搭建 - 下载编译源码 - 从一个简单的实际开发需求体验 Framework 开发 基本是偏向实际操作的内容,感兴趣的同学可以按照上面介绍的步骤体验一番。
嘿手大叔
2025年1月3日 11:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码