技术上冻结应用程序如何工作?


22

诸如Link2SD和Titanium Backup之类的应用程序可以“冻结”其他应用程序,即在不删除它们的情况下将其禁用。这些应用程序如何实现这一目标?

Answers:


28

Titanium Backup等仅用于内置Package Manager (pm)冻结应用程序。pm具有阻止应用程序运行以及无法在启动器中显示的功能。要使用它,Titanium Backup等执行以下命令:

pm禁用{package_name}

您可以自己冻结应用程序,而无需使用专用的冰箱应用程序。只需在Terminal Emulator或中使用上述命令ADB Shell

例如,如果要冻结Stock Web Browser,请Terminal Emulator使用su命令打开并切换到root 。然后,执行# pm disable com.android.browser
它会回来的#Package com.android.browser new state: disabled。做完了!
重新启动启动器(某些设备可能需要重新启动)以查看该应用程序图标已消失。

要解冻应用程序,只需在命令中替换disableenable


这与此处描述的kill -STOP,kill -CONT命令相同吗?linuxpoison.blogspot.com/2007/11/...
NoBugs

@NoBugs重新启动设备。某些设备需要此功能才能完全禁用应用程序。是的,这不是杀死命令。
Android Quesito

对。有时pm disable只说“ killed”,然后该过程立即再次启动。kill -STOP pid更好。您可以在ps输出中看到哪些已停止。
NoBugs

13

我发现如何pm disable工作:

如果运行cat /system/bin/pm,它将给出:

# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"

显然,它与我们在Java中使用的PackageManager相同,只是在没有用户应用程序可以直接访问的根上下文中调用它。

您可以使用以下方法检查是否冻结了某些东西

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)

-4

在Unix系统中,文件具有3个授权:读取,写入和执行。

(对于3类人员:文件的所有者(通常是文件的创建者),一组人以及其他所有人,但这不在主题之内。)

如果删除文件的执行授权,则无法再启动(执行)该文件。


你好dralpuop。Android应用不是二进制文件,因此添加或删除可执行权限不会影响它们的执行。
Firelord

Android是System 5 Unix,其中(例如)shell脚本不是二进制文件,但是添加或删除可执行文件权限却有所不同。
dralpuop

通过直接将shell变量作为参数传递给解释器,可以在不设置可执行位的情况下执行shell脚本,因此对于shell脚本或应用程序没有任何区别。疑问是关于Android应用程序的问题,而不是关于Shell脚本的问题。
Firelord

1
尝试使用此资源来了解应用程序如何在Android中运行。github.com/dogriffiths/HeadFirstAndroid/wiki/...
火焰领主
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.