Jak technicznie działa zamrażanie aplikacji?

22

Aplikacje takie jak Link2SD i Titanium Backup mogą „zamrozić” inne aplikacje, czyli wyłączyć je bez ich usuwania. Co te aplikacje robią, aby to osiągnąć?

Erik
źródło

Odpowiedzi:

28

Titanium Backup itp. Wystarczy użyć wbudowanego, Package Manager (pm)aby zamrozić aplikację. pmma funkcję zapobiegającą uruchamianiu i pojawianiu się aplikacji w Launcherze. Aby z niego skorzystać, Titanium Backup itp. Wykonaj następujące polecenie:

pm wyłącz {nazwa_pakietu}

Możesz samodzielnie zamrozić aplikacje bez użycia dedykowanej aplikacji do zamrażania. Wystarczy użyć powyższego polecenia w emulatorze terminali lub ADB Shell.

Na przykład, jeśli chcesz zamrozić Stock Web Browser, otwórz Terminal Emulatori przełącz na rootowanie za pomocą supolecenia. Następnie wykonaj # pm disable com.android.browser.
Wróci #Package com.android.browser new state: disabled. Gotowy!
Uruchom ponownie program uruchamiający (niektóre urządzenia mogą wymagać ponownego uruchomienia), aby ikona zniknęła.

Rozmrażać aplikację, wystarczy zamienić disableze enablew poleceniu.

Android Quesito
źródło
Czy to to samo, co komendy kill -STOP, kill -CONT opisane tutaj? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Uruchom ponownie urządzenie. Niektóre urządzenia potrzebują tego, aby całkowicie wyłączyć aplikację. I tak, to nie jest polecenie zabicia.
Android Quesito
Dobrze. Czasami pm disablemówi tylko „zabity”, a następnie proces rozpoczyna się od razu. zabij -STOP pid jest lepszy. Możesz zobaczyć, które są zatrzymane na pswyjściu.
NoBugs
13

Odkryłem, jak pm disabledziała:

Jeśli uruchomisz cat /system/bin/pm, daje:

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

Najwyraźniej jest to to samo, co program PackageManager, którego używamy z języka Java, wywołuje go - tylko w kontekście katalogu głównego, do którego żadna aplikacja użytkownika nie ma bezpośredniego dostępu.

Możesz sprawdzić, czy coś jest zamrożone, używając

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
NoBugs
źródło
-4

W systemach Unix pliki mają 3 autoryzacje: odczyt, zapis i wykonanie.

(Dla 3 kategorii osób: właściciela pliku [zwykle jego twórcy], grupy osób i wszystkich innych, ale nie jest to objęte tematem).

Jeśli usuniesz autoryzację wykonania pliku, nie będzie już można go uruchomić (wykonać).

dralpuop
źródło
Cześć dralpuop. Aplikacje na Androida nie są plikami binarnymi, więc dodanie lub usunięcie uprawnienia do pliku wykonywalnego nie ma wpływu na ich wykonanie.
Firelord
Android to System 5 Unix, w którym (na przykład) skrypty powłoki nie są plikami binarnymi, ale dodanie lub usunięcie uprawnienia wykonywalnego robi różnicę.
dralpuop
Skrypt powłoki można wykonać bez ustawionego bitu wykonywalnego, przekazując go jako argument bezpośrednio do interpretera, więc nie robi to różnicy dla skryptów powłoki lub aplikacji. Nawiasem mówiąc, pytanie dotyczy aplikacji Aplikacje na Androida, a nie skryptów powłoki.
Firelord
1
Wypróbuj to źródło, aby dowiedzieć się, jak aplikacje działają w systemie Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Firelord