下面是一个 shell 脚本,它使用 参数将包名称作为参数--app
,识别相应应用程序进程的 PID,使用 终止该进程adb shell kill
,最后使用 重新启动该应用程序adb shell am start
:
#!/bin/bash# Check if package name is provided
if [ -z "$1" ]; thenecho "Usage: $0 --app=<package_name>"exit 1
fi# Extract package name from argument
package_name=$(echo $1 | cut -d '=' -f 2)# Check if package name is valid
if [ -z "$package_name" ]; thenecho "Invalid package name: $package_name"exit 1
fi# Get PID of the app process
pid=$(adb shell ps | grep "$package_name" | grep -v "grep" | awk '{print $2}')# Kill the app process if it's running
if [ -n "$pid" ]; thenecho "Killing process with PID $pid for package $package_name"adb shell kill $pid# Introduce a 3-second delayecho "Waiting for 3 seconds..."sleep 3
elseecho "App with package $package_name not running"
fi# Restart the app
echo "Restarting app with package $package_name"
adb shell am start -W $package_name
解释:
- 检查包名称参数: 脚本首先检查是否
--app
提供了参数以及是否包含包名称。如果没有,它会显示错误消息并退出。 - 提取包名称: 如果提供了包名称,则使用命令从参数中提取包名称
cut
。 - 检查包名有效性: 检查提取的包名是否为空。如果是,则显示错误消息并退出。
- 获取PID: 使用
adb shell ps | grep "$package_name" | grep -v "grep" | awk '{print $2}'
命令检索与指定包名关联的应用程序进程的PID。 - 终止进程: 如果找到 PID,则表示应用程序正在运行。然后执行
adb shell kill $pid
命令以终止应用程序进程。 - 引入睡眠命令: 在该adb shell kill $pid命令之后,脚本现在包含该sleep 3命令。该命令暂停脚本的执行 3 秒。
- 重启应用程序: 无论应用程序是否正在运行,它都会执行
adb shell am start -W $package_name
重启应用程序的命令。
要使用脚本:
- **保存脚本:**将脚本保存为
.sh
文件,例如。kill_and_restart_app.sh
- **使脚本可执行:**使用命令使脚本可执行
chmod +x kill_and_restart_app.sh
。 - **运行脚本:**使用以下语法从命令行运行脚本:
./kill_and_restart_app.sh --app=com.your.app.package.name
将其替换com.your.app.package.name
为您要终止并重新启动的应用程序的实际包名称。
- LaunchState表示冷、热、温启动;
- TotalTime表示新应用启动的耗时,包括新进程的启动和Activity的启动耗时(包括创建进程 + Application初始化 + Activity初始化到界面显示的时间),但不包括前一个应用Activity pause的耗时;
- WaitTime就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;因此,WaitTime比TotalTime稍大;
开发者一般只要关心TotalTime即可,这个时间才是自己应用真正启动的耗时。为了得到的结果更准确,可以写一个脚本重复执行am start命令,计算平均值。