Perché le app disabilitate sono ancora in esecuzione?


8

Ho notato che le app (come Google Contacts Sync) che sono state disabilitate utilizzando il gestore app Android (KitKat) stock risultano ancora in esecuzione quando si utilizzano gli strumenti di osservatore dei processi. Ciò è vero anche dopo il riavvio del dispositivo.

Perché le app disabilitate sono ancora in esecuzione? Esiste un modo efficace (e sicuro) per disabilitarli effettivamente?

Le soluzioni che richiedono privilegi di root sono accettabili.

(Nota che per l'esempio specifico sopra, puoi dire ad Android di non sincronizzare i tuoi contatti, ma esegue comunque il processo di sincronizzazione dei contatti di Google. Ma non soffermiamoci su quell'esempio ... è solo un esempio.)


Accanto al pulsante "Disabilita" c'è un pulsante "Forza arresto". Premerlo e il processo dovrebbe terminare e non iniziare più.
GiantTree

@GiantTree Grazie. Dopo un riavvio, non ricomincerà?
RockPaperLizard,

4
Nel tuo caso, perché un'app di sistema ha esplicitamente chiamato un servizio esportato di quel pacchetto e l'unico modo per uccidere in modo affidabile quel processo (e qualsiasi altro) è ucciderlo attivamente usando Greenify, Amplify (richiede Xposed) o app simili. Nota: ciò non dovrebbe accadere e dovrebbe essere considerato un bug, poiché PackageManager ha il compito di non consentire l'esecuzione di un'app disabilitata.
GiantTree

1
A tal proposito, ho disabilitato tutti i servizi, i ricevitori, le attività e i fornitori di contenuti e ho disabilitato l'app SystemUI. Riavvia il dispositivo e indovina cosa l'app è ancora stata caricata in memoria (come non è il caso di pm block/hide), il che mi fa chiedere cosa sta causando il caricamento dell'app ora. È un'altra cosa che mentre è stato caricato nella memoria è possibile osservare la sua assenza superficiale per mancanza di sfondo, temi, barra di stato e altro ancora. Forse, una nuova domanda può essere forgiata da questo.
Firelord

1
@Firelord Immagino sia quello che ho sottolineato sopra: se disabiliti un'app è solo "contrassegnato come disabilitato" (e non mostrato nel programma di avvio ecc.) - ma è ancora registrato con il sistema (gestore dei pacchetti), quindi altre app possono trovarlo e chiama i suoi intenti. Sembra che nascondere / bloccare sia piuttosto paragonabile a una "disinstallazione di partenza .apke dati nascosti ", quindi l'app diventa "completamente non registrata e invisibile a tutto tranne che al gestore dei file", quindi altre app non sono più in grado di chiamare i suoi intenti come possono li trovi.
Izzy

Risposte:


7

Il tuo Android non deve disporre dell'accesso root per disabilitare veramente un'app, se hai la versione 4.4.xo successiva. Tutto ciò che serve èconfigurazione in PC e debug USB abilitati in un dispositivo non rootato o in un'app di emulazione terminale per un dispositivo rootato (puoi usare anche adb).

Se controlli l' pmutilizzo di Package Manger ( ), vedresti

pm block [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm sbloccare [--user USER_ID] PACKAGE_OR_COMPONENT ")

Per Lollipop, lo sarebbe

pm hide [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm scopri [--user USER_ID] PACKAGE_OR_COMPONENT ")

Per bloccare o nascondere un pacchetto (è sicuro), semplicemente

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

Per sbloccare o scoprire il pacchetto, fare

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE→ nome del pacchetto di un'app. Per conoscere il nome del pacchetto di un'app:

Accoda adb shellprima del comando per eseguirli dal PC.

La funzione dietro hide ha il seguente commento all'interno del codice sorgente

Mette il pacchetto in uno stato nascosto, che è quasi come uno stato disinstallato, rendendo il pacchetto non disponibile, ma non rimuove i dati o il file del pacchetto effettivo. L'applicazione può essere nascosta ripristinando lo stato nascosto o installandolo

Commenti simili vengono fatti per il blocco qui .

Al fine di verificare l'affermazione, è possibile utilizzare alcuni servizi di sistema, come meminfo, procstatse activitycon il dumpsys strumento o anche elencare tutti i processi che utilizzano ps. Non troverai una presenza attiva dell'app bloccata / nascosta.

Lo stesso vale per molte app di sistema disabilitate utilizzando la GUI o pm disablenon per tutte le app poiché anche un'app disabilitata può ricevere trasmissioni per le quali è stata registrata, cosa che può essere fatta solo se è caricata nella memoria 1 . Tuttavia, un'app disabilitata non può agire da sola, né può essere eseguita da nessun'altra app.

Ho discusso alcune differenze tra hide / block e disable sulla mia domanda pm hide VS pm disable - la crisi dell'identità . Fornisce solo informazioni supplementari a questa risposta in modo da poterle saltare.

MODIFICARE:

Sembra che la tecnica non funzioni per tutte le app su Android KitKat. In tal caso, è sufficiente revocare l'autorizzazione di lettura dall'APK dell'app o rimuovere l'estensione .APK dal nome del file dell'app (quest'ultimo suggerito una volta da Jaskaranbir), seguito da un riavvio soft / completo. Ciò equivale a eliminare un'app dal sistema, con la sola differenza che tutti i file rimarrebbero al loro posto.

Entrambi i passaggi possono essere eseguiti utilizzando qualsiasi app di gestione file radice. La riga di comando è:

adb shell su -c 'chmod 000 /data/app/PACKAGE*'             # 000 means no read-write-executable permission to user,group and others. 
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE'  # doing renaming by moving the file
adb reboot

1: mancanza di prove tecniche a supporto del fatto


Bella risposta! Grazie! È meglio disabilitare prima l'app utilizzando l'app stock manager Android o meglio assicurarsi che non sia disabilitata lì?
RockPaperLizard,

Non è necessario disabilitare l'app se si sta optando per pm block/hidelasciarla intatta.
Firelord

Se è già disabilitato, è meglio riattivarlo?
RockPaperLizard,

1
Questo è bizzarro. Ho testato il blocco del sistemaui sul mio Kitkat e con mia sorpresa, il blocco funziona proprio come disabilitare, questa app rimane in memoria. Il processo SystemUI è stato biforcuto anche se l'ho ucciso. Non so che è un bug o un comportamento desiderato, ma in ogni caso, è in contrasto con i miei risultati correlati a Lollipop indicati nella risposta. Immagino che la risposta sia piuttosto inutile ora.
Firelord

1
@RockPaperLizard, ho dimenticato di dirti un trucco molto semplice. Revoca le autorizzazioni di lettura del file del pacchetto (o della directory di base, in caso di Lollipop), riavvia e fatto per sempre. Ad esempio, con i permessi di root, ci si può fermare SystemUI in questo modo, adb shell su -c "chmod 111 /system/app/SystemUI.apk". 111 significa impostare solo autorizzazioni eseguibili per il proprietario, il gruppo e altri. Riavvia e l'app mancherà nel sistema. Puoi anche impostarlo su 000.
Firelord
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.