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

相关推荐
White_Mountain5 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
coder_pig7 小时前
📝小记:Ubuntu 部署 Jenkins 打包 Flutter APK
flutter·ubuntu·jenkins
mit6.8247 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
watermelonoops8 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
yylの博客9 小时前
Windows通过git-bash安装zsh
windows·git·bash·zsh
YRr YRr10 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.10 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
无为扫地僧13 小时前
三、ubuntu18.04安装docker
ubuntu·docker
希雅不是希望16 小时前
Ubuntu命令行网络配置
网络·ubuntu·php
kaixin_learn_qt_ing17 小时前
Debian和Ubuntu
运维·ubuntu·debian