Sin entrar en los detalles de si se debe o no dejar de autoarrancar aplicaciones, y cuáles podrían ser las consecuencias como se ha comentado en un montón de otras respuestas, aquí están mis soluciones simples que pueden funcionar sin ninguna aplicación de terceros, al menos en Android Pie.
Solución de root:
Uso de aplicaciones BroadcastRceivers
para escuchar la emisión ACTION_BOOT_COMPLETED para que puedan funcionar en el arranque. El receptor de la transmisión es un componente de la aplicación que se puede desactivar con privilegios de Root.
Utilizando Gestor de paquetes lista todos los receptores de difusión que escuchan BOOT_COMPLETED:
~# pm query-receivers --components -a android.intent.action.BOOT_COMPLETED
Dará una lista de receptores de emisión en formato package_name/component_name
. Ver dumpsys activity broadcast-stats
y dumpsys activity broadcasts
para más detalles.
Ahora para desactivar un componente:
~# pm disable <package/component>
Hay aplicaciones como Autostarts
( com.elsdoerfer.Android.autostarts ) y SD Maid
( eu.thedarken.sdm ) que puede hacer lo mismo por ti. Archivo /data/system/users/0/package-restrictions.xml
también se puede editar directamente para desactivar las aplicaciones o sus componentes, pero no se recomienda.
Es posible desactivar varios receptores de emisión de una aplicación, y un solo receptor también puede escuchar varios tipos de eventos de difusión .
SOLUCIÓN NO root: (no universal)
Para recibir android.intent.action.BOOT_COMPLETED
Las aplicaciones necesitan Android.permission.RECEIVE_BOOT_COMPLETED que es un permiso normal y por lo tanto no puede ser revocado por el usuario.
Sin embargo, hay un oculto marco de gestión de permisos, denominado AppOps
que proporciona un control algo más fino de las operaciones (tipo permiso). OP_BOOT_COMPLETED es uno de ellos, pero no forma parte de AOSP, sólo lo añaden algunas ROMs personalizadas como LineageOS. Si estás en una de esas ROMs, puedes controlar el comportamiento del autoarranque a través de adb shell
:
~$ appops set <package> BOOT_COMPLETED deny
Ahora la aplicación no podrá recibir la emisión BOOT_COMPLETED. Hay aplicaciones como App Ops
( rikka.appops ) que puede hacer lo mismo por ti. Algunas ROMs personalizadas tienen incorporados front-ends para AppOps con diferentes nombres como Protección de la intimidad , Gestor de arranque automático etc.
Tenga en cuenta que AppOps :
no está pensado en general para los desarrolladores de aplicaciones de terceros; la mayoría de las funciones sólo están disponibles para las aplicaciones del sistema
Así que su uso sin Root puede ser desautorizado o ser más difícil en las próximas versiones de Android.
Los dos métodos anteriores pueden impedir que las aplicaciones se inicien sólo en el arranque. Una aplicación también puede escuchar otros eventos de difusión y puede seguir reiniciándose si se mata, o ejecutarse en segundo plano continuamente (como un servicio) si está diseñada para ello. Ver dumpsys activity services
para más detalles.
Un enfoque ligeramente diferente sería impedir que las aplicaciones se ejecuten en segundo plano utilizando OP_RUN_IN_BACKGROUND (introducido en Nougat) y/o RUN_ANY_IN_BACKGROUND
(introducido en Pie) que forman parte de AOSP:
~$ appops set <package> RUN_IN_BACKGROUND deny
No tienen un permiso manifiesto equivalente, pero hay un permiso experimental con el mismo nombre.
0 votos
Impedir que una aplicación se inicie en el arranque requiere permisos Root: stackoverflow.com/questions/9715214/