如何查看已禁用功能/组件的列表
有时候我们需要针对某些特定应用,如谷歌移动服务(Google Mobile Services, GMS),禁用其中的相关模块或是功能以提高手机运行效率或者出于安全考虑。当我们完成某些组件的禁止操作后,如何方便地获得禁用状态下的详情,包括哪些具体的组件已被关闭?
一、使用Adb命令查看已禁用的package
通过adb shell pm list packages -d
可以列出所有当前设备中被标记为“Disabled”的应用程序包名。但是这还不足以满足您的需求——我们需要进一步探究特定包内的功能或者组件是否也被封锁起来。
二、获取package内部禁用的feature或component信息
要获得更为具体的信息,就要深入到单个应用中去查询了。这里提供一种方法来解析并获取指定软件包内禁用组件的详细列表。具体的实现在一个工具(Adebar)里进行,并且由IzzySoft开发。
让我们看看实现此功能的具体代码示例:
local comps
local myline
scriptname="${OUTDIR}/deadReceivers.sh"
echo "#!${BASH_LOCATION}" > "${scriptname}"
echo -e "
#
# Disabled components for ${DEVICE_NAME} as of $(date '+%Y-%m-%d %H:%M')
#"
>>"${scriptname}"
for pkg in $(adb ${ADBOPTS} shell "pm list packages 2>/dev/null"); do
pkg=${pkg//[$' \t\r\n']}
pkg=${pkg##*:}
# 忽略Android系统包
[[ "$pkg" = "android" ]] && continue
comps=$(adb ${ADBOPTS} shell "dumpsys package ${pkg}" | grep -E -A99999 "disabledComponents:" | grep -E -B99999 "enabledComponents:")
if [ ! -z "$comps" ]; then
echo >>"${scriptname}"
echo "# ${pkg}" >>"${scriptname}"
for myline in $comps; do
myline=${myline//[$' \t\r\n']}
# 排除特定组件定义项
[[ "$myline" = "disabledComponents:" || "$myline" = "enabledComponents:" ]] && continue
echo "adb ${ADBOPTS} shell \"pm disable $pkg/$myline\"" >>"${scriptname}"
done
fi
done
这段代码的作用是什么?
- 定义了一个脚本文件路径变量。
- 列出所有已禁用应用的包名。
- 对每一个指定的包,执行
dumpsys package
命令获取其完整的信息,并特别关注“disabledComponents:”部分的内容。 - 进一步过滤掉未被禁用的相关定义项后,将其余的所有禁用组件输出为adb命令条目。每一步都通过适配后的参数格式化并保存至我们的脚本中。
三、如何使用生成的脚本
上述过程完成后,将得到一个由pm disable $pkg/$myline
构成的脚本文件。该脚本将按照之前提供的命令格式重新启用了所有被禁止的应用组件或者功能,并提供了详细的执行日志记录。此结果不仅适用于回顾性检查,还可以在需要时用于恢复状态。
四、总结
通过这种方法,我们可以获得一个关于应用内禁用组件的清晰列表,这对于管理设备上的应用及其功能部分尤其有用。使用这样的工具,无论是出于安全还是性能考虑,用户都拥有更多控制权来调节运行环境。
请注意实际操作中可能需要适配您的开发环境和具体需求。以上只是基础结构供参考实现,请根据实际场景调整完善细节。
通过上述步骤及提供的代码示例,我们可以有效地列出并监控应用内特定组件或功能的禁用状态,并确保我们的设备保持在一个安全且高效的使用状态下。
正文完