Como o congelamento de um aplicativo funciona tecnicamente?

22

Aplicativos como Link2SD e Titanium Backup podem "congelar" outros aplicativos, ou seja, desativá-los sem removê-los. O que esses aplicativos fazem para conseguir isso?

Erik
fonte

Respostas:

28

O Titanium Backup etc apenas usa o built-in Package Manager (pm)para congelar um aplicativo. pmtem um recurso para impedir que aplicativos sejam executados e apareçam no Launcher. Para usá-lo, o Titanium Backup etc execute o seguinte comando:

pm desativar {nome_pacote}

Você pode congelar aplicativos sozinho sem usar um aplicativo congelador dedicado. Basta usar o comando acima no Emulador de Terminal ou ADB Shell.

Por exemplo, se você deseja congelar Stock Web Browser, abra Terminal Emulatore mude para root usando o sucomando Então, execute # pm disable com.android.browser.
Vai voltar #Package com.android.browser new state: disabled. Feito!
Reinicie o Launcher (alguns dispositivos podem exigir reinicialização) para ver o ícone do aplicativo desaparecido.

Para descongelar o aplicativo, basta substituir disablepor enableno comando

Android Quesito
fonte
É o mesmo que os comandos kill -STOP, kill -CONT descritos aqui? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Reinicialize seu dispositivo. Alguns dispositivos precisam disso para desativar completamente um aplicativo. E sim, este não é o comando kill.
Android Quesito
Direita. Às vezes, pm disableapenas diz "matado", e o processo inicia novamente imediatamente. kill -STOP pid é melhor. Você pode ver quais estão parados na pssaída.
NoBugs
13

Eu descobri como pm disablefunciona:

Se você executar cat /system/bin/pm, ele fornecerá:

# 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 "$@"

Então, aparentemente, é o mesmo que o PackageManager que usamos do Java, está chamando - apenas em um contexto raiz que nenhum aplicativo de usuário pode acessar diretamente.

Você pode verificar se algo está congelado, usando

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
NoBugs
fonte
-4

Nos sistemas Unix, os arquivos têm três autorizações: leitura, gravação e execução.

(Para três categorias de pessoas: o proprietário do arquivo [geralmente seu criador], um grupo de pessoas e todos os outros, mas está fora do assunto).

Se você remover a autorização de execução do arquivo, ele não poderá mais ser iniciado (executado).

dralpuop
fonte
Olá dralpuop. Os aplicativos Android não são binários; portanto, adicionar ou remover a permissão executável não faz diferença na execução deles.
Firelord
O Android é o System 5 Unix, onde (por exemplo) scripts de shell não são binários, mas a adição ou remoção da permissão executável FAZ A diferença.
dralpuop 22/11
Um script de shell pode ser executado sem o conjunto de bits executável, passando-o como argumento para um intérprete diretamente, portanto, não faz diferença para scripts de shell ou aplicativos. A pergunta e a pergunta são sobre aplicativos para Android, a propósito, não sobre scripts de shell.
Firelord
1
Experimente esta fonte para saber como os aplicativos são executados no Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Firelord