基于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系统的哦。

相关推荐
物联网老王5 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu
weixin_307779138 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
shimly1234568 小时前
bash 脚本比较 100 个程序运行时间,精确到毫秒,脚本
开发语言·chrome·bash
fangeqin14 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
风口上的吱吱鼠17 小时前
Armbian 25.5.1 Noble Gnome 开启远程桌面功能
服务器·ubuntu·armbian
笑衬人心。17 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
生如夏花℡18 小时前
HarmonyOS学习记录3
学习·ubuntu·harmonyos
星宸追风19 小时前
Ubuntu更换Home目录所在硬盘的过程
linux·运维·ubuntu
小哈龙19 小时前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
BD_Marathon20 小时前
Ubuntu下的Tomcat服务器部署
服务器·ubuntu·tomcat