คำสั่ง adb shell เพื่อทำให้กล่องโต้ตอบถอนการติดตั้งแพ็คเกจ Android ปรากฏขึ้น


126

ฉันadbทำงานอยู่และอุปกรณ์เชื่อมต่อกับระบบของฉันในโหมดดีบั๊ก

ฉันต้องการถอนการติดตั้งแอปโดยใช้ Intent Launch โดยใช้ adb shell am start <INTENT>

ฉันไม่ต้องการถอนการติดตั้งโดยใช้adb uninstall com.company.apppackageและฉันไม่ต้องการทำมันด้วยการใช้ไฟล์adb shell pm uninstall com.company.apppackage

ฉันจะส่งความตั้งใจพร้อมandroid.intent.action.DELETEการดำเนินการสำหรับแพ็กเกจเฉพาะเพื่อให้ผู้ใช้เห็นพร้อมต์และถอนการติดตั้งโปรแกรมได้อย่างไร

คำตอบ:


178

คุณสามารถทำได้จาก adb โดยใช้คำสั่งนี้:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>

2
ช่วยบอกหน่อยได้ไหมว่า -d package: <your app package> ย่อมาจากอะไร? มีเอกสารอะไรไหม
Rinkal Bhanderi

11
-d หมายถึงข้อมูล -a หมายถึงการกระทำ คุณกำลังเปิดตัว Intent with action เป็น "Delete" และ data เป็น "package: your app package" การดำเนินการนี้จะเริ่มกิจกรรมที่รับผิดชอบในการถอนการติดตั้งแพ็กเกจและพยายามถอนการติดตั้งแพ็กเกจที่ให้ไว้ในข้อมูล สามารถดูเอกสารประกอบได้โดยใช้คำสั่ง "adb shell am"
pcans

ไม่หากแอปของคุณมี DevicePolicyManager ที่เปิดใช้งานอยู่คุณจะต้องปิดการใช้งานด้วยตนเองก่อน
pcans

คำสั่งด้านบนแสดงกล่องโต้ตอบการยืนยันการลบแอปนี้บนโทรศัพท์ ใช้adb shell pm uninstall -k com.packagenameแทน
ViliusK

1
สิ่งนี้ใช้ไม่ได้กับแอประบบ กล่องโต้ตอบพร้อมท์จะปรากฏขึ้น แต่แอปจะไม่ถูกถอนการติดตั้ง
IgorGanapolsky

218

ใช้คำสั่งนี้ใน cmd:

adb shell pm ถอนการติดตั้ง -k com.packagename

ตัวอย่างเช่น:

adb shell pm uninstall -k com.fedmich.pagexray

-kธงบอกผู้จัดการแพคเกจเพื่อให้แคชและข้อมูลไดเรกทอรีรอบแม้ว่าแอปจะถูกลบออก -kถ้าคุณต้องการถอนการติดตั้งสะอาดไม่ได้ระบุ


8
ฉันชอบคำตอบนี้ดีกว่า เพราะด้วยสิ่งนี้คุณจะไม่ได้รับกล่องโต้ตอบการยืนยันการยกเลิกการลบ
joctee

2
@joctee ฉันก็เช่นกัน แต่คำถามบอกโดยเฉพาะว่าพวกเขาไม่ต้องการถอนการติดตั้งโดยใช้เจตนา
OrhanC1

@ โลโฮริสทำให้มันได้ผล .. อย่าลืมลบ "+" ในคำตอบของ
neverever

32
@Johnny_D แฟล็ก -k บอกให้ผู้จัดการแพ็กเกจเก็บแคชและไดเร็กทอรีข้อมูลไว้แม้ว่าแอปจะถูกลบออก หากคุณต้องการถอนการติดตั้งใหม่ทั้งหมดอย่าระบุ -k
Yojimbo

2
ฉันได้รับข้อความFailureเรื่อย ๆ เมื่อพยายามใช้คำสั่งนี้
IgorGanapolsky

12

เมื่อใช้ ADB คุณสามารถใช้คำสั่งใด ๆ จากสามคำสั่งต่อไปนี้:

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"

แทนที่ PACKAGE ด้วยชื่อแพ็กเกจของแอพผู้ใช้ที่ติดตั้ง แอปจะต้องไม่เป็นผู้ดูแลระบบอุปกรณ์เพื่อให้คำสั่งทำงานได้สำเร็จ คำสั่งเหล่านั้นทั้งหมดจะต้องมีการยืนยันจากผู้ใช้เพื่อลบแอป

รายละเอียดของคำสั่งดังกล่าวสามารถเป็นที่รู้จักโดยการตรวจสอบ 's adb shell amการใช้งานโดยใช้

ฉันได้รับข้อมูลเกี่ยวกับคำสั่งเหล่านั้นโดยใช้Elixir 2 (ใช้แอพที่เทียบเท่า) ฉันใช้มันเพื่อแสดงกิจกรรมของแอพ Package Installer (GUI ที่คุณเห็นระหว่างการติดตั้งและลบแอพ) รวมถึงเจตนาที่เกี่ยวข้อง ไปเลย

วิธีอื่นที่ฉันใช้คือ: ฉันพยายามถอนการติดตั้งแอปโดยใช้ GUI จนกว่าฉันจะได้รับการยืนยันขั้นสุดท้าย ฉันไม่ได้ยืนยัน แต่ดำเนินการตามคำสั่ง

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

เหนือสิ่งอื่นใดมันแสดงให้ฉันเห็นถึงรายละเอียดที่เป็นประโยชน์ของเจตนาที่ส่งผ่านมาในเบื้องหลัง ตัวอย่าง:

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

ที่นี่คุณจะเห็นการดำเนินการข้อมูลการตั้งค่าสถานะและองค์ประกอบเพียงพอสำหรับเป้าหมาย


ฉันเข้าใจว่าคำถามเก่าดังนั้นคำตอบของฉันอาจไม่ตรงประเด็นมากนัก แต่มีความเกี่ยวข้องโดยสิ้นเชิงกับเวอร์ชัน Android ที่ผู้ใช้ส่วนใหญ่ใช้ในปัจจุบัน
Firelord

6

แม้ว่าคำตอบข้างต้นจะใช้ได้ผล แต่ในกรณีที่คุณมีอุปกรณ์หลายเครื่องที่เชื่อมต่อกับคอมพิวเตอร์ของคุณคุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบแอพออกจากหนึ่งในนั้น:

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

หากคุณต้องการค้นหาซีเรียลของอุปกรณ์ให้ใช้คำสั่งต่อไปนี้:

adb devices -l

นี่จะแสดงรายการอุปกรณ์ที่แนบมา คอลัมน์ด้านซ้ายแสดงซีเรียลของอุปกรณ์


3

ในกรณีของฉันฉันadb shell pm list packagesจะดูก่อนว่าแพ็คเกจ / แอพที่ติดตั้งในอุปกรณ์ Android หรือโปรแกรมจำลองของฉันคืออะไรจากนั้นเมื่อค้นหาแพ็คเกจ / แอพที่ต้องการฉันจะทำadb shell pm uninstall -k com.package.nameไฟล์.


3

ฉันคิดว่าคุณเปิดใช้งานdeveloper modeบนอุปกรณ์ Android ของคุณและคุณเชื่อมต่อกับอุปกรณ์ของคุณและคุณมีการเข้าถึงเชลล์ ( adb shell)

เมื่อเสร็จแล้วคุณสามารถถอนการติดตั้งแอปพลิเคชันด้วยคำสั่งpm uninstall --user 0 <package.name>นี้ 0 คือรหัสรูท - วิธีนี้คุณไม่จำเป็นต้องรูทอุปกรณ์ของคุณมากเกินไป

นี่คือตัวอย่างที่ฉันทำกับ 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

--user 0เพื่อทำการลบในฐานะรูทมีประโยชน์มาก
bw_üezi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.