30 votos

pm hide VS pm disable -- la crisis de identidad

¿Cuál es la necesidad de pm disable cuando pm hide ¿ya hace su trabajo?

He recopilado algo de información basada en mi búsqueda e investigación: pulse aquí para ver la tabla ( editado ).

Como puedes ver, pm hide puede lograr lo que pm disable puede, pero sin necesidad de acceso Root . Además, basándome en mis pruebas, he llegado a la conclusión de que cuando pm hide se realiza, a diferencia de pm disable No importa, la aplicación no se cargará de nuevo en la memoria.

Yo opino que ocultar descendiente de bloque . Bloque se introdujo por primera vez en KitKat 4.4.0 , permaneció hasta Avance de Android L y posteriormente fue sustituido por ocultar en Android 5.0.0. No me queda claro qué llevó a cambiar el nombre de bloque a ocultar ¿y por qué era necesario?

Independientemente, si alguien sin acceso a Root puede lograr la funcionalidad de desactivar Entonces, ¿por qué desactivar ¿existe en absoluto?

Además, ¿por qué ocultar ¿existe? Si ocultar fue construido supuestamente para ayudar a los usuarios a deshacerse de lo que quieran, sin desinstalar y sin rootear el dispositivo, entonces en la GUI deberíamos tener una opción relevante, pero sólo tenemos la opción de desactivar .

Entrelaza las preguntas:

  • ¿Cuáles son los méritos y deméritos de ellos, excluyendo los señalados en mi pregunta?

  • ¿Por qué existen ambos y a qué o a quién sirven?

  • ¿Es técnicamente cierto que ocultar supera la funcionalidad de desactivar y puede desactivar realmente cualquier aplicación ¿al ser ejecutado en él?

  • Nuevo : Teniendo en cuenta las conclusiones de Andrew T. y mis pruebas que se muestran en la tabla, es componente que se muestra en ocultar ¿es un error o no he entendido el uso de este último?

    Con fines históricos: ocultar El uso que se hace de él en este momento es el siguiente

      pm hide [--user USER_ID] PACKAGE_OR_COMPONENT

Nota: La pregunta no busca, de ninguna manera, opiniones sin fundamento, sino respuestas directas al grano. Si tienes que escribir una opinión, asegúrate de respaldarla utilizando fuentes creíbles y técnicas con un razonamiento sólido para distinguir entre lo que es técnico y real y lo que es especulativo.


Pruebas realizadas con Carbon ROM (Android 5.1.1) y COS12 (Android 5.0.2) para OnePlus One.

3voto

Jeff Luyet Puntos 6

No tengo suficientes puntos para comentar todavía.. Esto no es una respuesta... más bien... información:

pm hide does este

pm disable does este y si puede encontrar el nombre del componente entonces este .

Puedo ver cómo algunas personas pueden haber pensado que pm hide haría una desinstalación.

ex. Si ejecuta este comando después de una ocultación de pm

diff <(adb shell pm list packages -u) <(adb shell pm list packages)

Verás tu paquete oculto. -u es una lista de paquetes previamente desinstalados.

Estos comandos de pm que aparecen a continuación invocan la clase Intent de Androids.

pm hide <package>
pm unhide <package>
pm enable <package>
pm disable <package>

Este comando de abajo:

pm hide <package>

invoca:

android.intent.action.PACKAGE_REMOVED.  

Este comando de abajo:

pm unhide <package>

invoca:

android.intent.action.PACKAGE_ADDED.

pm disable y pm enable ambos invocan:

android.intent.action.PACKAGE_CHANGED.

Gracias @Irfan Latif por las correcciones. Puedo verificar lo que decía. En los ajustes de Android: Si miras las aplicaciones instaladas, incluso después de ocultar pm, puedes ver que la aplicación está instalada. Curiosamente, con pm disable, la app desaparece de las apps instaladas. Estos comandos no parecen crear ningún cambio obvio en el sistema de archivos.

Estos directorios:

/mnt/sdcard/Android/data/
/data/data

y otros directorios misc...

Una posible hipótesis... Tal vez su mejor práctica para llamar siempre a ambos comandos para desactivar cualquier paquete:

pm disable <package>;pm hide <package>

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X