前言
本系列文章,给身为android应用开发得程序员,期望转型到android framework开发的工程师提供基础的入门教学,跟着本系列课程就能从应用开发入门到fw开发的门槛中,最终能够清楚FW开发是一个什么样的事情,以及大多数在岗的odm,oem厂商或者是外包服务商的FW开发工程师,他们每天的日常是什么,让更多的android应用开发者心中有数,自己是否能够转型去做android 系统的开发。
当前就业环境形式不好,为的就是给大家更多的选择,更好的规划自己的未来。
一.基础环境以及配置
1.1 基础的研发环境
软件环境:
- Ubuntu 18.0.4或者Ubuntu 20.04.5(建议使用18.0.4,编译遇到得环境未提少一些)
Windows安装Ubuntu18.04双系统 - windows环境使用VMware虚拟机搭载Ubuntu
Windows系统安装Ubuntu虚拟机 - ubuntu环境下载安装android studio,配置好adb
ubuntu安装android studio
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
到这里,你就成功的拥有了系统开发的环境,可以开始定制专属于你自己的手机了