Der Befehl adb shell, mit dem das Dialogfeld zur Deinstallation des Android-Pakets angezeigt wird

126

Ich habe adbausgeführt und das Gerät ist im Debugging-Modus mit meinem System verbunden.

Ich möchte die App mit Intent Launch deinstallieren adb shell am start <INTENT>

Ich möchte nicht mit deinstallieren adb uninstall com.company.apppackageund ich möchte es auch nicht mit verwendenadb shell pm uninstall com.company.apppackage

Wie kann ich eine Absicht mit android.intent.action.DELETEAktion für ein bestimmtes Paket senden , damit der Benutzer die Eingabeaufforderung sehen und das Programm deinstallieren kann?

Rinkal Bhanderi
quelle

Antworten:

178

Sie können dies von adb aus mit diesem Befehl tun:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>
pcans
quelle
2
Kannst du bitte sagen, wofür -d Paket: <dein App-Paket> steht? Gibt es eine Dokumentation?
Rinkal Bhanderi
11
-d bedeutet Daten. -a bedeutet Aktion. Sie starten eine Absicht mit der Aktion "Löschen" und Daten als "Paket: Ihr App-Paket". Dadurch wird die für die Deinstallation von Paketen zuständige Aktivität gestartet und versucht, das in den Daten bereitgestellte Paket zu deinstallieren. Die Dokumentation kann mit dem Befehl "adb shell am" gefunden werden.
pcans
Nein, wenn Ihre App einen aktivierten DevicePolicyManager enthält, müssen Sie ihn zuerst manuell deaktivieren.
pcans
Der obige Befehl zeigt das Dialogfeld "Diese App löschen" auf dem Telefon an. Verwenden Sie adb shell pm uninstall -k com.packagenamestattdessen.
ViliusK
1
Dies würde für System-Apps nicht funktionieren. Der Eingabeaufforderungsdialog wird angezeigt, die App wird jedoch nicht deinstalliert.
IgorGanapolsky
218

Verwenden Sie diesen Befehl in cmd:

adb shell pm deinstalliere -k com.packagename

Beispielsweise:

adb shell pm uninstall -k com.fedmich.pagexray

Das -kFlag weist den Paketmanager an, den Cache und die Datenverzeichnisse beizubehalten, obwohl die App entfernt wurde. Wenn Sie eine saubere Deinstallation wünschen, geben Sie dies nicht an -k.

nie415
quelle
8
Diese Antwort gefällt mir besser. Denn mit diesem erhalten Sie nicht das Dialogfeld zur Bestätigung der Wiederherstellung.
Joctee
2
@joctee, ich auch, aber die Frage sagte ausdrücklich, dass sie nicht mit einer Absicht deinstallieren wollten.
OrhanC1
@ Lohoris, haben es funktioniert .. stellen Sie sicher, dass Sie das "+" auf nie Antwort entfernen
fedmich
32
@Johnny_D Das Flag -k weist den Paketmanager an, den Cache und die Datenverzeichnisse beizubehalten, obwohl die App entfernt wurde. Wenn Sie eine saubere Deinstallation wünschen, geben Sie -k nicht an.
Yojimbo
2
Ich erhalte immer wieder Fehlermeldungen , wenn ich versuche, diesen Befehl zu verwenden.
IgorGanapolsky
12

Mit ADB können Sie einen der folgenden drei Befehle verwenden:

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"

Ersetzen Sie PACKAGE durch den Paketnamen der installierten Benutzer-App. Die App darf kein Geräteadministrator sein, damit der Befehl erfolgreich ausgeführt werden kann. Alle diese Befehle erfordern eine Bestätigung des Benutzers zum Entfernen der App.

Einzelheiten des Befehls können durch Überprüfen der Verwendung von am bekannt werden adb shell am.

Ich habe die Informationen zu diesen Befehlen mit Elixir 2 erhalten (verwenden Sie eine entsprechende App). Ich habe es verwendet, um die Aktivitäten der Package Installer-App (die GUI, die Sie beim Installieren und Entfernen von Apps sehen) sowie die damit verbundenen Absichten anzuzeigen. Los geht's.

Die alternative Methode war: Ich habe versucht, die App über die GUI zu deinstallieren, bis mir die endgültige Bestätigung angezeigt wurde. Ich habe den Befehl nicht bestätigt, sondern ausgeführt

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

Unter anderem zeigte es mir nützliche Details der im Hintergrund verabschiedeten Absicht. Beispiel:

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

Hier sehen Sie die Aktion, Daten, Flag und Komponente - genug für das Ziel.

Feuerlord
quelle
Ich verstehe, dass die Frage alt ist, daher ist meine Antwort möglicherweise nicht sehr relevant. Es ist jedoch absolut relevant für die Android-Versionen, die heutzutage von den meisten Benutzern verwendet werden.
Feuerlord
6

Die obigen Antworten funktionieren zwar, aber wenn Sie mehrere Geräte an Ihren Computer angeschlossen haben, können Sie die App mit dem folgenden Befehl von einem entfernen:

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

Wenn Sie die Seriennummer des Geräts ermitteln möchten, verwenden Sie den folgenden Befehl:

adb devices -l

Dadurch erhalten Sie eine Liste der angeschlossenen Geräte. Die linke Spalte zeigt die Geräteserien.

sttaq
quelle
3

In meinem Fall mache ich eine adb shell pm list packages, um zuerst zu sehen, welche Pakete / Apps auf meinem Android-Gerät oder Emulator installiert sind, und dann, nachdem ich das gewünschte Paket / die gewünschte App gefunden habe, mache ich eine adb shell pm uninstall -k com.package.name.

Warfreak92
quelle
3

Ich gehe davon aus, dass Sie developer modeauf Ihrem Android-Gerät aktivieren und Sie mit Ihrem Gerät verbunden sind und Shell-Zugriff haben ( adb shell).

Sobald dies erledigt ist, können Sie die Anwendung mit diesem Befehl deinstallieren pm uninstall --user 0 <package.name>. 0 ist die Root-ID - auf diese Weise müssen Sie Ihr Gerät nicht zu rooten.

Hier ist ein Beispiel, wie ich es auf meinem Huawei P110 Lite gemacht habe

# 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
quelle
--user 0Das Löschen als root durchzuführen ist sehr nützlich
bw_üezi