commande adb shell pour faire apparaître la boîte de dialogue de désinstallation du package Android

126

Je suis en adbcours d' exécution et l'appareil est connecté à mon système en mode débogage,

Je souhaite désinstaller l'application à l'aide du lancement d'intention en utilisant adb shell am start <INTENT>

Je ne veux pas désinstaller en utilisant adb uninstall com.company.apppackageet je ne veux pas le faire même en utilisantadb shell pm uninstall com.company.apppackage

Comment puis-je envoyer une intention avec android.intent.action.DELETEaction pour un package spécifique permettant à l'utilisateur de voir l'invite et de désinstaller le programme?

Rinkal Bhanderi
la source

Réponses:

178

Vous pouvez le faire depuis adb en utilisant cette commande:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>
pcans
la source
2
pouvez-vous s'il vous plaît dire ce que signifie -d package: <votre package d'application>? y a-t-il de la documentation?
Rinkal Bhanderi
11
-d signifie des données. -a signifie action. Vous lancez une intention avec une action comme "Supprimer" et des données comme "package: votre package d'application". Cela démarrera l'activité en charge de la désinstallation des packages et tentera de désinstaller le package fourni dans les données. La documentation peut être trouvée en utilisant la commande "adb shell am".
pcans
Non, si votre application contient un DevicePolicyManager activé, vous devrez d'abord le désactiver manuellement.
pcans
La commande ci-dessus affiche la boîte de dialogue de confirmation Supprimer cette application sur le téléphone. Utilisez adb shell pm uninstall -k com.packagenameplutôt.
ViliusK
1
Cela ne fonctionnerait pas pour les applications système. La boîte de dialogue d'invite s'afficherait, mais l'application ne serait pas désinstallée.
IgorGanapolsky
218

Utilisez cette commande dans cmd:

adb shell pm désinstaller -k com.packagename

Par exemple:

adb shell pm uninstall -k com.fedmich.pagexray

L' -kindicateur indique au gestionnaire de packages de conserver le cache et les répertoires de données, même si l'application est supprimée. Si vous souhaitez une désinstallation propre, ne spécifiez pas -k.

jamais jamais415
la source
8
J'aime mieux cette réponse. Parce que, avec celui-ci, vous n'obtiendrez pas la boîte de dialogue de confirmation de la suppression.
joctee
2
@joctee, Moi aussi mais la question disait spécifiquement qu'ils ne voulaient pas désinstaller en utilisant une intention.
OrhanC1
@Lohoris, Have made it work .. assurez-vous de supprimer le "+" sur la réponse de
Neverever
32
@Johnny_D L'indicateur -k indique au gestionnaire de packages de conserver le cache et les répertoires de données, même si l'application est supprimée. Si vous souhaitez une désinstallation propre, ne spécifiez pas -k.
Yojimbo
2
Je reçois des messages d' échec lorsque j'essaie d'utiliser cette commande.
IgorGanapolsky
12

En utilisant ADB, vous pouvez utiliser l'une des trois commandes suivantes:

adb shell am start -a android.intent.action.UNINSTALL_PACKAGE -d "package:PACKAGE"
adb shell am start -n com.android.packageinstaller/.UninstallerActivity -d "package:PACKAGE"
adb shell am start -a android.intent.action.DELETE -d "package:PACKAGE"

Remplacez PACKAGE par le nom du package de l'application utilisateur installée. L'application ne doit pas être un administrateur de périphérique pour que la commande fonctionne correctement. Toutes ces commandes nécessiteraient la confirmation de l'utilisateur pour la suppression de l'application.

Les détails de ladite commande peuvent être connus en vérifiant l'utilisation de am à l'aide de adb shell am.

J'ai obtenu les informations sur ces commandes en utilisant Elixir 2 (utilisez n'importe quelle application équivalente). Je l'ai utilisé pour afficher les activités de l'application Package Installer (l'interface graphique que vous voyez lors de l'installation et de la suppression des applications) ainsi que les intentions associées. Voilà.

L'autre façon que j'ai utilisée était la suivante: j'ai essayé de désinstaller l'application à l'aide de l'interface graphique jusqu'à ce que la confirmation finale me soit présentée. Je n'ai pas confirmé mais exécuté la commande

adb shell dumpsys activity recents   # for Android 4.4 and above
adb shell dumpsys activity activities # for Android 4.2.1

Entre autres choses, il m'a montré des détails utiles sur l'intention passée en arrière-plan. Exemple:

intent={act=android.intent.action.DELETE dat=package:com.bartat.android.elixir#com.bartat.android.elixir.MainActivity flg=0x10800000 cmp=com.android.packageinstaller/.UninstallerActivity}

Ici, vous pouvez voir l'action, les données, l'indicateur et le composant - assez pour l'objectif.

Seigneur du feu
la source
Je comprends que la question est ancienne, donc ma réponse n'est peut-être pas très pertinente. Mais il est totalement pertinent pour les versions d'Android utilisées par la majorité des utilisateurs de nos jours.
Firelord
6

Bien que les réponses ci-dessus fonctionnent, mais au cas où vous auriez plusieurs appareils connectés à votre ordinateur, la commande suivante peut être utilisée pour supprimer l'application de l'un d'entre eux:

adb -s <device-serial> shell pm uninstall <app-package-name>

Si vous souhaitez connaître le numéro de série de l'appareil, utilisez la commande suivante:

adb devices -l

Cela vous donnera une liste des appareils attachés. La colonne de gauche montre les numéros de série de l'appareil.

sttaq
la source
3

Dans mon cas, je fais un adb shell pm list packagespour voir d'abord quels sont les packages / applications installés sur mon appareil Android ou mon émulateur, puis après avoir localisé le package / l'application souhaité, je fais un adb shell pm uninstall -k com.package.name.

warfreak92
la source
3

Je suppose que vous activez developer modesur votre appareil Android et que vous êtes connecté à votre appareil et que vous avez un accès shell ( adb shell).

Une fois que cela est fait, vous pouvez désinstaller l'application avec cette commande pm uninstall --user 0 <package.name>. 0 est l'identifiant root - de cette façon, vous n'avez pas besoin de rooter votre appareil.

Voici un exemple comment j'ai fait sur mon Huawei P110 lite

# gain shell access
$ adb shell

# check who you are
$ whoami
shell

# obtain user id
$ id
uid=2000(shell) gid=2000(shell)

# list packages
$ pm list packages | grep google                                                                                                                                                         
package:com.google.android.youtube
package:com.google.android.ext.services
package:com.google.android.googlequicksearchbox
package:com.google.android.onetimeinitializer
package:com.google.android.ext.shared
package:com.google.android.apps.docs.editors.sheets
package:com.google.android.configupdater
package:com.google.android.marvin.talkback
package:com.google.android.apps.tachyon
package:com.google.android.instantapps.supervisor
package:com.google.android.setupwizard
package:com.google.android.music
package:com.google.android.apps.docs
package:com.google.android.apps.maps
package:com.google.android.webview
package:com.google.android.syncadapters.contacts
package:com.google.android.packageinstaller
package:com.google.android.gm
package:com.google.android.gms
package:com.google.android.gsf
package:com.google.android.tts
package:com.google.android.partnersetup
package:com.google.android.videos
package:com.google.android.feedback
package:com.google.android.printservice.recommendation
package:com.google.android.apps.photos
package:com.google.android.syncadapters.calendar
package:com.google.android.gsf.login
package:com.google.android.backuptransport
package:com.google.android.inputmethod.latin

# uninstall gmail app
pm uninstall --user 0 com.google.android.gms
Lukasz Dynowski
la source
--user 0effectuer la suppression en tant que root est très utile
bw_üezi