82 votes

Activer et désactiver les applications système via ADB

Y a-t-il une commande adb pour activer/désactiver une application système ?

Merci

94voto

David Negron Points 971

Oui. La commande est pm disable . Vous devez être root pour pouvoir le faire :

Ouvrez le shell et obtenez les droits root :

PC> adb shell
shell@hammerhead:/ $ su

Listez toutes les applications activées, filtrez par "calculatrice" :

root@hammerhead:/ # pm list packages -e | grep 'calculatrice'
package:com.android.calculator2

Désactivez l'application :

root@hammerhead:/ # pm disable com.android.calculator2
Package com.android.calculator2 nouvel état : désactivé

Listez toutes les applications désactivées :

root@hammerhead:/ # pm list packages -d
package:com.android.calculator2
package:com.google.android.apps.inputmethod.hindi
package:jp.co.omronsoft.iwnnime.ml
package:com.google.android.inputmethod.pinyin
package:com.google.android.inputmethod.korean
package:com.google.earth
root@hammerhead:/ #

Quelques autres points importants à noter :

  1. Dans mes tests, les applications désactivées de cette manière disparaissent complètement de la liste Paramètres > Applications. Elles ne semblent même pas être affichées dans l'onglet "Désactivées"
  2. Vous pouvez réactiver les applications avec pm enable . En fait, cela semble être la seule façon de les réactiver, d'après mon expérience.

1 votes

Est-il possible d'éviter de masquer l'application sélectionnée lors de sa désactivation?

1 votes

@androiddeveloper Non. Cacher l'application complètement, y compris de l'interface utilisateur, est l'idée principale derrière cela.

1 votes

@Izzy Je vois. Est-il possible de faire l'inverse, c'est-à-dire simplement masquer, sans désactiver ?

23voto

Firelord Points 23064

Cela devrait fonctionner que l'application soit une application système ou une application tierce (installée par l'utilisateur).


Consultez ma réponse sur Déterminer le nom du package de votre application pour obtenir le nom du package de l'application concernée et utilisez adb shell pour exécuter ces commandes (nécessite un accès root):

adb shell
su
pm disable PACKAGE              # désactive l'application et la cache dans Paramètres -> Applications 
pm hide PACKAGE                 # alternative; pour Android Lollipop et versions supérieures
cmd package suspend PACKAGE     # alternative; le package reste visible dans le lanceur et l'application Paramètres mais ne peut pas être utilisé; une fonctionnalité de l'administration des appareils

PACKAGE fait référence au nom du package de l'application

Pour rétablir l'application, remplacez désactiver par activer, cacher par afficher et suspendre par rétablir dans la commande et exécutez-la avec les privilèges root.

Si vous avez Android KitKat ou une version ultérieure et que vous n'avez pas accès root, utilisez adb sur PC pour exécuter cette commande:

adb shell pm block PACKAGE         # pour Android KitKat
adb shell pm hide  PACKAGE         # pour Android Lollipop seulement
adb shell pm disable-user PACKAGE  # alternative à \`pm hide\`; pour Android Lollipop et versions supérieures; fonctionne comme la désactivation d'une application via l'application Paramètres

Pour rétablir l'application:

adb shell pm unblock PACKAGE   # pour Android KitKat
adb shell pm unhide PACKAGE    # pour Android Lollipop et seulement si vous avez utilisé \`pm hide\` précédemment
adb shell pm enable PACKAGE    # pour Android Lollipop et versions supérieures

Les changements prendraient effet immédiatement.

0 votes

En dehors de tout le reste sur cette page, seule cmd package suspend a fonctionné comme prévu. Tout le reste provoquait des exceptions

0 votes

@iSWORD quel appareil Android et quelle version d'Android utilisez-vous?

1 votes

Je suis en train d'utiliser un Lenovo P2a42 fonctionnant sous AOSP 11

11voto

starfry Points 395

Suite à la réponse de @eldarerathis, vous pouvez désactiver une application pour un utilisateur spécifique. J'ai utilisé cette méthode pour supprimer certaines applications d'un utilisateur restreint qui ne figuraient pas sur l'écran des paramètres utilisateur. Toutes les commandes sont exécutées à partir d'un adb shell. Un accès root est requis pour apporter les modifications.

Tout d'abord, obtenez l'identifiant de l'utilisateur :

$ pm list users
Users:
  UserInfo{0:Alice:13} running
  UserInfo{11:Bob:18} running

Ensuite

$ pm disable --user 11 com.cyanogenmod.filemanager
Package com.cyanogenmod.filemanager nouvel état : désactivé-utilisateur

Pour réactiver

# pm enable --user 11 com.cyanogenmod.filemanager

Dans cet exemple, Alice peut utiliser le gestionnaire de fichiers mais Bob ne le peut pas.

Vous pouvez faire une chose similaire avec hide au lieu de disable. Je ne suis pas sûr duquel est le meilleur, mais consultez cette réponse. Le contraire de hide est unhide (un redémarrage peut être nécessaire pour effectuer unhide).

Vous pouvez lister les packages avec pm list packages --user 11. Ajoutez -e pour lister les packages activés ou -d si vous voulez voir les désactivés. Il semble qu'il n'y ait pas de filtre pour les packages masqués.

Pour ce que ça vaut : J'ai essayé ce qui précède sur Lollipop avec CM 12.1 sur un Amazon Fire (KFFOWI).

1 votes

L'accès root n'est pas obligatoire, j'ai désactivé une application système LineageOS en exécutant pm disable-user --user 0 org.lineageos.audiofx (dans adb shell).

0 votes

^ Android 13 / LineageOS 20 ; peut "cacher" au lieu de désactiver.

3voto

S.Goswami Points 121

J'ai voulu désactiver le Play Store sur le téléphone Vivo car ma nièce installe toujours plusieurs gigaoctets de jeux. Pour certains d'entre vous, cela pourrait fonctionner, aucun root n'est requis.

Pour désactiver le Play Store :

$ adb shell pm uninstall --user 0 -k com.android.vending
Success

Cela désinstalle l'application. Mais il y a aussi un moyen de restaurer l'application :

$ adb shell pm install-existing com.android.vending
Package com.android.vending installed for user: 0

Bien sûr, le Play Store est un exemple. Cela devrait fonctionner pour la plupart des applications système. Depuis le PC, vous pouvez exécuter cela directement, ou si vous êtes dans un shell ADB, exécutez la commande après adb shell.

Vous pouvez utiliser adb shell pm list packages, le rediriger vers grep pour rechercher le package facilement.

Remarque que cela désinstalle l'application, le drapeau -k devrait conserver les données. Mais dans mon cas, toutes les données ont été purgées/supprimées. Donc il pourrait y avoir une perte de données pendant le processus de désinstallation des applications système.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X