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?

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


É 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)

-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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.