#!/system/bin/sh local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus") if [ "$activity" = "$id_activity | awk '{print $2}'" ] then am start -n ""$id_activity" | awk '{print $4}'" --display "$id_activity | awk '{print $3}'" else am start -n ""$id_activity" | awk '{print $2}'" --display "$id_activity | awk '{print $1}'" fi
时间: 2024-04-27 13:24:31 浏览: 18
这是一个 Shell 脚本,主要作用是获取当前正在运行的应用程序的窗口信息,并启动另一个应用程序。脚本首先使用 `dumpsys window` 命令获取当前输入法窗口和焦点窗口的信息,然后比较这两个窗口信息,以确定当前应用程序的名称和 ID。接着,脚本使用 `am start` 命令启动目标应用程序,并根据当前应用程序的显示 ID 指定启动目标应用程序的显示 ID。
需要注意的是,这个脚本中有一些错误的命令和语法错误,例如 `"$activity" = "$id_activity | awk '{print $2}'"`,这个语句中应该使用 `echo` 命令将 `$id_activity` 和 `$activity` 的值输出到管道中,然后再使用 `awk` 命令提取需要的值,所以应该改为 `echo "$activity" | awk '{print $2}'`。此外,`am start` 命令中的应用程序包名和类名应该使用正确的值。
相关问题
#!/system/bin/sh local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus") if["$activity" = "$id_activity | awk '{print $2}'"] am start -n $id_activity | awk '{print $3}' --display $id_activity | awk '{print $4}' fi 优化一下
这段代码看起来像是一个 Android 系统的 shell 脚本,主要作用是获取当前输入法和应用的焦点,并在需要时打开输入法。
首先,需要在 `if` 的前面加一个空格,否则会报错。然后,可以将 `grep` 和 `awk` 命令合并,避免使用管道符 `|`。另外,可以将 `awk` 命令中的 `'{print $2}'` 和 `'{print $3}'` 合并为一个,这样可以避免使用多个管道符,提高效率。最后,建议在 `am start` 命令中加上参数 `-W`,可以等待应用启动完成后再返回。
优化后的代码如下:
```
#!/system/bin/sh
local id_activity=$(dumpsys window | awk '/display/ && /imeInputTarget/ {print $4,$7}' | cut -d'}' -f1)
local focus=$(dumpsys window | awk '/mCurrentFocus/ {print $NF}' | cut -d'}' -f1)
local activity=$(echo "$id_activity" | awk -v focus="$focus" '$0 ~ focus {print $2}')
if [ "$activity" = "$(echo "$id_activity" | awk '{print $2,$3,$4}')" ]; then
am start -n $activity --display $(echo "$id_activity" | awk '{print $4}') -W
fi
```
#!/system/bin/sh # 获取当前活跃窗口 get_display_id() { local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) focus是否和activity一样可以返回一个布尔类型 } get_display_id_activity() { local displays=$(dumpsys window | grep display | grep 'imeInputTarget') dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1 local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}') local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) echo $display_id $activity } get_display_id_activity # 判断窗口所在的显示器 display_id=$(get_display_id) case esac 优化一下
可以将 `get_display_id_activity()` 函数中的冗余代码去掉,同时在 `case` 语句中添加具体的操作。代码优化后如下所示:
```shell
#!/system/bin/sh
# 获取当前活跃窗口的显示器 ID 和活动
get_display_id_activity() {
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}')
local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$display_id $activity"
}
# 获取当前活跃窗口所在的显示器 ID
get_display_id() {
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$activity"
}
# 获取当前活跃窗口所在的显示器 ID,然后根据不同的显示器 ID 执行不同的操作
display_id=$(get_display_id)
case "$display_id" in
"display_id_1")
# 执行显示器1的操作
;;
"display_id_2")
# 执行显示器2的操作
;;
*)
# 默认操作
;;
esac
```
这样代码更加简洁,可读性也更好了。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)