基于Ubuntu的Bash脚本实现SystemUI的编译真机验证

使用场景描述

当开发SystemUI的时候,开发完一个需求后需要到真机上验证,虽然SystemUI模块开发最后的产物也是APK,但是这个APK 却不能单独安装查看效果,因为SystemUI是系统级别的应用,需要放置到系统指定的目录下。这时候就需要我们先通过SystemUI的编译命令编译出SystemUI的APK,然后再通过adb命令推到系统的SystemUI目录:

bash 复制代码
/system_ext/priv-app/SystemUI/SystemUI.apk

然后再通过top命令找出SystemUI的进程,使用kill命令杀一次进程让其重启,这样我们的修改才能生效。这个过程比较的繁琐,如果每次修改都需要操作这么多的步骤,那么效率就很低了,所以本文介绍使用bash脚本的方式,将这一系列的操作通过bash脚本描述出来,我们下次修改完SystemUI代码,只需要执行下脚本就可以在真机上查看效果了。

Bash脚本的命令解析

先准备AOSP的源码,确认连接上了真机,可以安装scrcpy等投屏软件协助开发会方便很多,然后编译的时候执行下面的命令

bash 复制代码
source build/envsetup.sh
lunch qssi-userdebug // 也可以是其他选项,看需求定

根据用户的输入参数决定使用全编还是快编

bash 复制代码
echo "$1"
if [ $1 -eq 1 ]
then
	prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-qssi.ninja SystemUI -j8
	echo "使用快编"
else 
	make SystemUI -j8
	echo "使用全编"
fi

如上面的代码所示,如果用户传入的参数是1,我们使用快编,否则使用全编译,快编就是涉及到一些代码的修改的时候可以使用,如果涉及到资源的添加等操作就需要使用全编了。比如脚本的名字为systemUIBuild.sh 使用快编的命令就是:
./systemUIBuild.sh 1

使用全编的命令为:
./systemUIBuild.sh

编译完成后通过adb命令将产物推到手机的 /system_ext/priv-app/SystemUI/ 目录下。这里需要注意需要在root的手机上,并且要求可以remount.

bash 复制代码
adb root
adb remount
adb push out/target/product/qssi/system_ext/priv-app/SystemUI/SystemUI.apk /system_ext/priv-app/SystemUI/SystemUI.apk

最后,找到SystemUI的进程并且kill掉它使其重启

bash 复制代码
adb shell 'kill $(pidof com.android.systemui)'

脚本中会打印出systemUI杀死前和杀死后的进程号,可判断进程是否被杀死重启过。确认后就可以看到效果了

完整的脚本代码

bash 复制代码
#!/bin/bash
source build/envsetup.sh
lunch qssi-userdebug

echo "$1"
if [ $1 -eq 1 ]
then
	prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-qssi.ninja SystemUI -j8
	echo "使用快编"
else 
	make SystemUI -j8
	echo "使用全编"
fi
adb root
adb remount
adb push out/target/product/qssi/system_ext/priv-app/SystemUI/SystemUI.apk /system_ext/priv-app/SystemUI/SystemUI.apk
adb shell 'echo "当前SystemUI pid====>$(pidof com.android.systemui)"'
adb shell 'kill $(pidof com.android.systemui)'
sleep 1
adb shell 'echo "重新安装SystemUI后的 pid====>$(pidof com.android.systemui)"'

需要的读者可以将其复制到一个文件中,保存为sh文件,然后放到源码的根目录下,给权限后运行就行了。有积分的富豪也可以直接下载:SystemUI构建脚本 但需要注意,脚本是Ubuntu系统的哦。

相关推荐
敲代码还房贷11 小时前
解决win7装不了vmware tools问题
ubuntu
下午写HelloWorld13 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
哆啦A梦——19 小时前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
上天_去_做颗惺星 EVE_BLUE19 小时前
【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
linux·运维·服务器·ubuntu·macos·centos
das2m20 小时前
WSL2 Ubuntu 配置完美版 docker compose 指南
linux·ubuntu·docker
MIXLLRED20 小时前
Ubuntu 22.04 + ROS2 Humble 上部署 ScaRF‑SLAM指南
ubuntu·slam·ros2·离线建图
FlyWIHTSKY21 小时前
JavaScript 和 TypeScript 分别是什么,可以相互写吗
javascript·ubuntu·typescript
iRayCheung21 小时前
virtualbox安装的ubuntu系统跑numpy报错
linux·ubuntu·numpy
丑过三八线1 天前
Systemd Cgroup 驱动详解
linux·ubuntu·容器
指尖在键盘上舞动1 天前
RKNN 模型部署:onnx转rknn后精度下降 —— 精度调优与问题排查
python·ubuntu·rk3588·rknn·onnx·npu