polecenie powłoki adb, aby wyświetlić okno dialogowe odinstalowywania pakietu Androida

126

Mam adburuchomiony i urządzenie jest podłączone do mojego systemu w trybie debugowania,

Chcę odinstalować aplikację za pomocą zamierzonego uruchomienia za pomocą adb shell am start <INTENT>

Nie chcę odinstalowywać za pomocą adb uninstall com.company.apppackagei nie chcę tego robić nawet przy użyciuadb shell pm uninstall com.company.apppackage

Jak mogę wysłać intencję z android.intent.action.DELETEakcją dla określonego pakietu, umożliwiając użytkownikowi wyświetlenie monitu i odinstalowanie programu?

Rinkal Bhanderi
źródło

Odpowiedzi:

178

Możesz to zrobić z adb za pomocą tego polecenia:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>
pcans
źródło
2
czy możesz powiedzieć, co oznacza pakiet -d: <pakiet aplikacji> oznacza? jest jakaś dokumentacja?
Rinkal Bhanderi
11
-d oznacza dane. -a oznacza działanie. Uruchamiasz intencję z akcją „Usuń” i danymi jako „pakiet: pakiet aplikacji”. Spowoduje to rozpoczęcie czynności odpowiedzialnej za odinstalowywanie pakietów i próbę odinstalowania pakietu dostarczonego w danych. Dokumentację można znaleźć za pomocą polecenia „adb shell am”.
pcans
Nie, jeśli Twoja aplikacja zawiera aktywowany DevicePolicyManager, musisz najpierw ręcznie go wyłączyć.
pcans
Powyższe polecenie pokazuje w telefonie okno dialogowe potwierdzenia Usuń tę aplikację. Użyj adb shell pm uninstall -k com.packagenamezamiast tego.
ViliusK,
1
To nie zadziała w przypadku aplikacji systemowych. Pojawiło się okno dialogowe, ale aplikacja nie została odinstalowana.
IgorGanapolsky
218

Użyj tego polecenia w cmd:

powłoka adb pm odinstaluj -k nazwa_pakietu com

Na przykład:

adb shell pm uninstall -k com.fedmich.pagexray

-kFlaga informuje menedżera pakietów zachować wokół pamięć podręczną i dane katalogi, mimo że aplikacja zostanie usunięta. Jeśli chcesz przeprowadzić czystą dezinstalację, nie określaj -k.

neverever415
źródło
8
Ta odpowiedź podoba mi się bardziej. Ponieważ z tym nie otrzymasz okna dialogowego z potwierdzeniem przywrócenia.
joctee
2
@joctee, Ja też, ale pytanie mówiło konkretnie, że nie chcą odinstalować za pomocą intencji.
OrhanC1
@Lohoris, Zrobiłem to… upewnij się, że usunąłeś znak „+” przy odpowiedzi
nigdy
32
@Johnny_D Flaga -k mówi menedżerowi pakietów, aby zachował pamięć podręczną i katalogi danych, nawet jeśli aplikacja jest usunięta. Jeśli chcesz przeprowadzić czystą dezinstalację, nie określaj opcji -k.
Yojimbo,
2
Podczas próby użycia tego polecenia wciąż otrzymuję komunikaty o niepowodzeniach .
IgorGanapolsky
12

Korzystając z ADB, możesz użyć dowolnego z następujących trzech poleceń:

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"

Zastąp PAKIET nazwą pakietu zainstalowanej aplikacji użytkownika. Aplikacja nie może być administratorem urządzenia, aby polecenie działało pomyślnie. Wszystkie te polecenia wymagałyby potwierdzenia przez użytkownika usunięcia aplikacji.

Szczegóły tego polecenia można poznać, sprawdzając użycie am za pomocą adb shell am.

Otrzymałem informacje o tych poleceniach przy użyciu Elixir 2 (użyj dowolnej równoważnej aplikacji). Użyłem go do pokazania działań aplikacji Package Installer (GUI, który widzisz podczas instalacji i usuwania aplikacji), a także związanych z tym intencji. Proszę bardzo.

Alternatywny sposób, którego użyłem, był: próbowałem odinstalować aplikację za pomocą GUI, dopóki nie pojawiło się ostateczne potwierdzenie. Nie potwierdziłem, ale wykonałem polecenie

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

Między innymi pokazał mi przydatne szczegóły intencji przekazanej w tle. Przykład:

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

Tutaj możesz zobaczyć akcję, dane, flagę i komponent - wystarczy do celu.

Pan ognia
źródło
Rozumiem, że pytanie jest stare, więc moja odpowiedź może nie być zbyt trafna. Ale jest to całkowicie istotne dla wersji Androida używanych obecnie przez większość użytkowników.
Władca Ognia
6

Chociaż powyższe odpowiedzi działają, ale jeśli masz wiele urządzeń podłączonych do komputera, możesz użyć następującego polecenia, aby usunąć aplikację z jednego z nich:

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

Jeśli chcesz poznać numer seryjny urządzenia, użyj następującego polecenia:

adb devices -l

Spowoduje to wyświetlenie listy podłączonych urządzeń. Lewa kolumna pokazuje numery seryjne urządzeń.

sttaq
źródło
3

W moim przypadku adb shell pm list packagesnajpierw sprawdzam, jakie pakiety / aplikacje są zainstalowane na moim urządzeniu z Androidem lub emulatorze, a następnie po zlokalizowaniu żądanego pakietu / aplikacji wykonuję plik adb shell pm uninstall -k com.package.name.

warfreak92
źródło
3

Zakładam, że włączasz developer modena swoim urządzeniu z Androidem i jesteś połączony z urządzeniem i masz dostęp do powłoki ( adb shell).

Gdy to zrobisz, możesz odinstalować aplikację za pomocą tego polecenia pm uninstall --user 0 <package.name>. 0 to identyfikator roota - w ten sposób nie musisz rootować swojego urządzenia.

Oto przykład, jak zrobiłem na moim 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
Łukasz Dynowski
źródło
--user 0wykonanie usunięcia jako root jest bardzo przydatne
bw_üezi