序言
俗话说万事开头难,如果你看到此篇文章,恭喜你,说明你已经迈出了第一步.
源码分析是一个痛并快乐的过程,其中最重要的一点是要坚持.刚进入源码世界的童鞋们,可能你看一会就会感觉到头晕目眩,云里雾里的感觉.这点是很正常的,你在审视着源码,源码同时也在审视着你.相信我如果你坚持下来,多问几个为什么,怎么做的,渐渐的你就会对分析源码越得心应手.最终拨开云雾见天日,走向茅塞顿开的舒畅.
上面说了这么多,回到主题.要分析一个事物,至少你要有前提条件,那就是获取源码.
硬件要求
- CPU: 4核心以上
- RAM: 16G或以上,注意这里指的是物理机的情况,如果使用虚拟机,那么需要24G以上的内存,其中16G分配给虚拟机.
- ROM: 250G以上
软件要求
- Linux操作系统:Google官方推荐Ubuntu LTS 14.04 .我用的则是当前最新的ubuntu 18.04
- 虚拟机:VMware Workstation
搭建环境
当vmware安装好ubuntu后,默认官方的源在国内下载很慢,推荐换成中科大的源.
源更换完成后,下载所需的软件包:
1
sudo apt-get install git-core repo libc6-dev-i386 unzip
配置linux环境:
1
2
3
4
5export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
下载AOSP源码
由于Android P的Treble特性,使用GSI镜像可以刷入VTS认证的设备中(如果你不确认你手上的设备是否支持,推荐购买Google Pixel系列手机),因此我们选用GSI分支.1
2repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b pie-gsi
repo sync -cq -j4
最后等待下载完成.
编译源码(可选)
到此步下载源码流程已经结束了,如果你是一个不满足于在公司等有限场合使用真机调试分析源码的人,请继续往下看,否则可以跳过本章
在开始编译前,我们需要保证源码中的patch日期与设备上的patch日期一致.
设备端:查询patch日期1
2adb shell getprop ro.build.version.security_patch
yyyy-mm-dd //得到原设备的patch日期,这里用通配符代替
Ubuntu端:修改源码中的patch日期与原设备一致1
2
3vi build/core/version_defaults.mk
--- PLATFORM_SECURITY_PATCH := 2019-04-05
+++ PLATFORM_SECURITY_PATCH := yyyy-mm-dd
开始编译:(注意选择正确的arm或arm64版本)1
2
3source build/envsetup.sh
lunch aosp_arm_ab-userdebug or aosp_arm64_ab-userdebug
make -j4
烧录镜像(可选&谨慎)
注:此步操作仅限拥有原设备镜像文件以及会刷机的童鞋操作,注意备份数据,由于不确定因素众多,因此不对编译镜像烧录的结果进行保证以及负责.
1.烧录前需满足以下条件(非常重要):
- 设备的安卓版本为Android P
- 设备支持VTS认证
- 编译的system镜像的patch版本与原设备一致
2.解锁引导加载程序:
手机设置—开发者选项—oem unlock勾选,之后执行指令1
2adb reboot bootloader
fastboot oem unlock 或 fastboot flashing unlock
在屏幕上确认解锁
3.停用设备认证启动(如提示无vbmeta分区,则可忽略)1
2adb reboot bootloader
fastboot flash vbmeta vbmeta.img
4.刷入system镜像并清空data分区1
2
3fastboot flash system system.img
fastboot -w
fastboot reboot
如果设备能正常开机启动,恭喜你已迈入本地分析源码的路途上了.
如果设备无法正常开机启动,那么请刷回原设备镜像.推荐使用Google Pixel系列手机.
本章完