Android14 显示系统剖析0 ———— 学习环境准备

6/24/2024

教程使用 Ubuntu2204 + Aosp14 环境进行学习。

# 使用 VMware 虚拟机安装 Ubuntu 2204

VMware 虚拟机安装 Ubuntu 2204,这部分内容可以参考AOSP 极速上手 (opens new window)

将镜像文件更换为 Ubuntu2204 的即可

# AOSP Android14 下载

# 下载
repo init https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r15
repo sync
1
2
3

# 模拟器方案

# 编译
source build/envsetup.sh
lunch aosp_cf_x86_64_phone-eng
m
1
2
3
4

Cuttlefish 模拟器安装与启动:

安装 CuttleFish 所需的依赖:

sudo apt install -y git devscripts config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do
  cd $dir
  debuild -i -us -uc -b -d
  cd ..
done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
1
2
3
4
5
6
7
8
9
10
11
12

启动模拟器:

launch_cvd --start_webrtc=true
1

浏览器中输入 https://localhost:8443 即可使用虚拟机了

# AOSP + Pixel 手机方案

我这里是 pixel6 手机,其他 pixel 手机也大体类似。

打开 https://source.android.com/docs/setup/reference/build-numbers 这个链接,注意右上角调整为英文,不然显示的信息不全。

20240624101950

在网页中找到我们下载的版本信息 android-14.0.0_r15.

20240624102020

记录好最前面的这一串字符 UP1A.231105.003.A1

接着打开链接 https://developers.google.cn/android/drivers?hl=zh-cn,在网页中搜索 UP1A.231105.003.A1:

找到 pixel6:

20240624102253

点解 link 下载(需要梯子)。

下载完解压以后,会有 shell 脚本文件,我们把脚本文件放到系统源码根目录下执行即可。

20240624102939

接着就可以开始编译系统了

source build/envsetup.sh
lunch aosp_oriole-eng
m
1
2
3

编译完成后就可以刷机了

将手机与电脑通过 USB 线连接好。接着进行如下操作

解锁,已经解锁过的,直接跳过:

adb reboot bootloader
fastboot flashing unlock
# 这个时候手机上会有选项,根据说明按下音量键切换到允许unlock,再按电源键确认即可。
1
2
3
fastboot flashall -w
# -w会清除data分区,如果不想的话也可以不加-w选项
1
2

调试

修改了代码,我们可以把生成的产物直接 push 上去。

不过需要先执行:

adb root
adb remount
# adb reboot
1
2
3

比如,修改了 Launcher 的源码,

source build/envsetup.sh
# lunch aosp_oriole-userdebug
lunch aosp_oriole-eng
make Launcher3 
1
2
3
4
adb root
adb remount
#adb reboot
// 在测试时发现已经被安装的apk重启后不会再扫描,需要删除data下的文件才可以,所以我直接install apk验证了。
// 当然其他文件,比如so库,jar包,xml文件等还是可以push验证的。
// adb push out/target/product/redfin/system_ext/priv-app/Launcher3/ /system_ext/priv-app/
adb install -r  out/target/product/redfin/system_ext/priv-app/Launcher3/Launcher3.apk
// 此时Launcher会重启,可以看到我们添加的日志打印出来了。
07-26 22:08:53.441  5855  5855 D zzh     : Launcher3 Start...
1
2
3
4
5
6
7
8
9

Framework 修改:

adb push framework.jar /system/framework/
1

SystemUI 修改

adb push SystemUI.apk /system_ext/priv-app/SystemUI
```·


userdebug 版本无法 debug 处理:

```bash
adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot
1
2
3
4
5
6
7
8
9