android framework 基础篇.编译环境搭建

216 阅读9分钟

📢 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 流程二

(快)开机优化

性能篇 (快). 开机耗时分析

性能篇 (快). 开机耗时优化

性能篇.实战优化方案分享

framework交流,答疑:251662478

前言

本系列文章,给身为android应用开发得程序员,期望转型到android framework开发的工程师提供基础的入门教学,跟着本系列课程就能从应用开发入门到fw开发的门槛中,最终能够清楚FW开发是一个什么样的事情,以及大多数在岗的odm,oem厂商或者是外包服务商的FW开发工程师,他们每天的日常是什么,让更多的android应用开发者心中有数,自己是否能够转型去做android 系统的开发。

当前就业环境形式不好,为的就是给大家更多的选择,更好的规划自己的未来。

一.基础环境以及配置

1.1 基础的研发环境

软件环境:

1.2 硬件:

  • 内存32G——必要,编译系统是非常消耗内存大小的(可以试一试16G,不够用编译过程中会报错)
  • 固态硬盘300G——非必要,固态硬盘能够提升编译速度;机械硬盘也可以;aosp原生代码+编译产物大小<300G
  • pixel 设备(可以去某宝,某东买个二手),建议买pixel4以上机器——非必要,可以使用模拟器代替,但是刷机等操作,包括实用性,可玩性等等建议可以入手,包括后续面试都可以带着实体机给面试官看修改效果(ps:可以拥有一台自己专属得定制手机,不兴奋么。手动狗头)注意pixel购买的时候,跟商家说清楚,不管自带预装得android版本是什么,一定要跟商家确认是否可以自行刷机,否则OEM锁打不来,刷不了机,就白买了

二.代码下载

2.1 repo工具下载

aosp的代码是很庞大的,使用git是管理不过来的,所以aosp的代码会有多个仓库,通过repo工具进行管理

 //在根目录下创建文件夹
 mkdir ~/bin
//导入到环境变量
 PATH=~/bin:$PATH
//repo下载地址
 curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?        format=TEXT' |base64 -d > ~/bin/repo
//linux读写权限
 chmod a+x ~/bin/repo
//修改repo URL,替换 REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
 vim ~/bin/repo
//配置git
 git config --global user.name "####" 
 git config --global user.email "####@example.com"
//新建代码存放目录
 mkdir ~/code
 cd ~/code
 mkdir aosp_android12_r27
 cd aosp_android12_r27

2.2 repo 指定代码tag下载代码

如果我们买了对应的pixel设备,希望可以刷机实战,那么这里需要根据不同的tag下载对用自己pixel版本。博主的pixel 设备是pixel 3a XL,所以我就以自己的实战机为例子,来找一下TAG版本。

可以直接打开android开发者网站,查看tag

找到<源代码标记和 build>下面得表格

我们能看到这里build Id,标记(tag),支持得设备;其实我们这里就是根据自己pixel的版本去找到自己想要下载安卓aosp源代码。我的设备是pixel 3a xl,能够下载得最高的版本就是android-12.1.0_r27。咱们可以看到android13已经有了r41。13版本没有支持pixel3axl。所以我们这里就使用android-12.1.0_r27

//知道对应的TAG,这里我们就可以repo init初始化仓库的所有配置信息,准备下载了
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b  android-12.1.0_r27
//执行下载,-j4代表四个线程一起下载,理论上线程数越多,下载的越快,但是下载线程太多,可能导致下载出错,这里建议最大只使用-j4
repo sync -j4


//下载有时候会出错,所以我们这里使用脚本进行自动下载,失败后会自动重新下载
sudo chmod a+x download.sh
sh download.sh

2.3实机刷机驱动下载(使用模拟器略过)

驱动下载link

在根目录解压后,执行sh脚本,然后根据不愁同意许可输入对应内容,就会将驱动解压到代码的对应目录中,保证刷机

三.代码编译

3.1编译环境

执行以下命令,配置编译环境:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip

可以结合https://blog.csdn.net/devnn/article/details/131868022这篇博客配置ubuntu 环境,其中换源更新也会更新ubuntu很多配置

没有实机得,使用模拟器的环境配置完成后,直接跳转到4.2章节看模拟器编译

3.2找到pixel对应lunch的代号(使用模拟器略过)

 

//初始化编译环境
. build/envsetup.sh
//选择需要编译的机型,比如我的pixel 3axl对应上图的bonita
lunch 
//看到对应的编号后,输入
6
//也可以直接lunch 6或者lunch aosp_bonito-userdebug
//最后开始执行编译,查看一下你的cpu现成最大数量,我的是12,这里不执行满,防止卡死
make -j10

等待编译结束

lunch后会出现,我们根据对应机型的名称进行选择就可以了

一般选择userdebug模式,这种模式可以理解为我们通过命令就可以root,之后我们刷机后,就相当于可以使用命令自由root,拿出系统中的内容

四.刷机/模拟器启动

4.1刷机(使用模拟器略过)

//开机情况下通过adb命令执行,进入bootloader模式

adb reboot bootloader

//在编译完成的产品根目录执行,即源码根目录下out/target/product/bonito/
cd ~/code/aosp_android12_r27/out/target/product/bonito/
fastboot flashall -w

等待刷机完成即可,如果刷不了,去开发者选项看下一下有一个oem锁,是否是关闭的,如果是关闭的,需要自行搜索一下OEM锁的打开教程

4.2 模拟器的使用

//有些产品,比如bonito,在lunch选择之后,即使编译成功了执行emulator,也不会有模拟器出来,因为不带有模拟器的image。所以android12上,我们需要添加模拟器的选择,先修改mk文件

//文本编辑器,或者vim打开,找到最后一行,添加 sdk_phone_x86_64-eng \

build/make/target/product/AndroidProducts.mk文件

    aosp_x86_64-eng \
    aosp_x86-eng \
+    sdk_phone_x86_64-eng \

 

. build/envsetup.sh
 lunch sdk_phone_x86_64-eng
 make -j10
 //编译成功后执行
 emulator