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

相关推荐
Nie_Xun6 小时前
ubuntu网络共享
linux·运维·ubuntu
wuicer15 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
shuangrenlong18 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
基于python的毕设1 天前
C语言栈的实现
linux·c语言·ubuntu
穷人小水滴1 天前
在 windows 运行 flatpak 应用 (WSL)
linux·windows·ubuntu
mit6.8241 天前
ubuntu远程桌面很卡怎么解决?
linux·ubuntu·php
nyf_unknown1 天前
(vue)将文件夹打成tar包, Git Bash(推荐)具体使用
vue.js·git·bash
morliz子轩2 天前
基于WSL搭建Ubuntu 22.04.x LTS开发环境
linux·运维·ubuntu
路多辛2 天前
Debian新一代的APT软件源配置文件格式DEB822详解
linux·运维·ubuntu·debian
Web极客码2 天前
在Ubuntu 22.04上安装远程桌面服务
linux·运维·ubuntu