จะเริ่มต้นแอปพลิเคชันโดยใช้เครื่องมือ Android ADB ได้อย่างไร


คำตอบ:


630
adb shell
am start -n com.package.name/com.package.name.ActivityName

หรือคุณสามารถใช้สิ่งนี้โดยตรง:

adb shell am start -n com.package.name/com.package.name.ActivityName

นอกจากนี้คุณยังสามารถระบุการกระทำที่จะกรองโดยตัวกรองเจตนาของคุณ:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 

23
ขอบคุณมากฉันได้ทำให้เชลล์ทำงานใน ~ / .bash_profile ให้เร็วขึ้นfunction androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }และใช้งานได้มากขึ้น androidrun com.example.test
AbdullahDiaa

3
adb shell amจะให้รายการตัวเลือกอื่น ๆ แก่คุณเพื่อส่งไปยังamคำสั่ง คุณสามารถหาข้อมูลเพิ่มเติมได้ที่developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury

1
@shurane ฉันจะค้นหาตัวเลือก -a ได้อย่างไร
ericyoung

21
เป็นไปได้หรือไม่ที่จะเรียกใช้กิจกรรมเริ่มต้นแทนที่จะเป็นกิจกรรมเฉพาะที่ฉันต้องการเริ่มต้น
นักพัฒนา android

1
ฉันมีปัญหาในการค้นหาแอปพลิเคชันและกิจกรรม ฉันใช้ไปป์ไลน์นี้adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedเพื่อแสดงรายการแอปพลิเคชันทั้งหมดที่แสดง
Att

299

เป็นไปได้ที่จะเรียกใช้แอปพลิเคชันที่ระบุชื่อแพ็คเกจโดยใช้เครื่องมือลิงโดยทำตามรูปแบบนี้:

adb shell monkey -p your.app.package.name -c android.intent.category.LAUNCHER 1

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


91
ตัวเรียกใช้เป็นค่าเริ่มต้น คุณสามารถทำให้ง่ายขึ้นadb shell monkey -p your.app.package.name 1
Androiderson

3
เป็นไปได้หรือไม่ที่จะใช้ชื่อไฟล์ APK แทนชื่อแพ็คเกจ สมมติว่าฉันมีไฟล์ APK และฉันต้องการที่จะสามารถติดตั้งและเรียกใช้มันเป็นไปได้หรือไม่
นักพัฒนา Android

1
จะเกิดอะไรขึ้นถ้าฉันได้รับข้อผิดพลาด: ไม่พบกิจกรรมที่เรียกใช้ ยกเลิกหรือไม่
IgorGanapolsky

3
@IgorGanapolsky หากไม่พบกิจกรรมใด ๆ มันเป็นแอปบริการและไม่มีกิจกรรมเลย
m3nda

1
@IgorGanapolsky ถ้าเป็นการใช้บริการadb shell am startservice com.some.package.name/.YourServiceSubClassNameดูที่นี่: stackoverflow.com/a/18703083/211292
ThomasW

122

หรือคุณสามารถใช้สิ่งนี้:

adb shell am start -n com.package.name/.ActivityName

75
เป็นไปได้ไหมที่จะทำโดยไม่ระบุชื่อกิจกรรมเพื่อให้กิจกรรมหลักเริ่มต้นเริ่มต้นขึ้น
นักพัฒนา android

5
@androiddeveloper ดูคำสั่งmonkeyด้านล่างจากdepodefi : ไม่จำเป็นต้องระบุชื่อกิจกรรม!
1111161171159459134

8
ถ้าฉันไม่ทราบActivityName ?
IgorGanapolsky

2
เรียกใช้ ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk ซึ่งจะแสดงรายการต่อไปนี้: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex

17
monkey -p com.package.name 1ผ่านadb shell
Denys Vitali

60

ผู้ใช้ linux / mac ยังสามารถสร้างสคริปต์เพื่อเรียกใช้ apk ด้วยสิ่งต่อไปนี้:

สร้างไฟล์ชื่อ "adb-run.sh" ด้วย 3 บรรทัดเหล่านี้:

pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act

จากนั้น "chmod + x adb-run.sh" เพื่อให้สามารถเรียกใช้งานได้

ตอนนี้คุณสามารถ:

adb-run.sh myapp.apk

ประโยชน์ที่ได้รับคือคุณไม่จำเป็นต้องรู้ชื่อแพ็คเกจหรือชื่อกิจกรรมที่เรียกใช้งานได้ ในทำนองเดียวกันคุณสามารถสร้าง "adb-uninstall.sh myapp.apk"

หมายเหตุ: สิ่งนี้ต้องการให้คุณมี aapt ในเส้นทางของคุณ คุณสามารถค้นหาได้ภายใต้โฟลเดอร์เครื่องมือสร้างใหม่ใน SDK


สำหรับ Windows คุณสามารถลองกับ cygwin (ทดสอบ)
dljava

3
โพสต์ของคุณทำให้ฉันค้นหา AWK ฉันไปข้างหน้าและสร้างสคริปต์ของคุณใหม่ pastebin.com/X7X1SsFa
Kyle

2
นี่เป็นนิยาย ทำไมนี่ไม่ใช่คำสั่ง adb มาตรฐานที่เราจะไม่มีทางรู้
John Tyree

คุณไม่จำเป็นต้องมี aapt ในเส้นทางของคุณ (ตราบใดที่ "android" เป็น) หากคุณตั้งค่า PATH ในสคริปต์ adb-run.sh เช่นนี้: PATH = $ (dirname $ (ซึ่ง android)) / ./build-tools/20.0.0:$PATH
Steve Lemke

@dljava นี้ทำไมไม่ทำงานบนplay.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS

21

นอกจากนี้ฉันต้องการพูดถึงอีกสิ่งหนึ่ง

เมื่อคุณเริ่มต้นโปรแกรมจากadb shell am, มันจะเพิ่มธง FLAG_ACTIVITY_NEW_TASKซึ่งจะทำให้การเปลี่ยนแปลงพฤติกรรม ดูรหัสรหัส

ตัวอย่างเช่นหากคุณเปิดกิจกรรม Play Store จากadb shell amการกดปุ่ม ' ย้อนกลับ ' (ปุ่มย้อนกลับฮาร์ดแวร์) จะไม่นำแอปของคุณมาแทนที่กิจกรรมก่อนหน้านี้จะเป็นกิจกรรม Play Store ของคุณหากมีบางอย่าง (ถ้าไม่มีงาน Play store แล้วมันจะพาคุณแอปของคุณ)เอกสารประกอบ FLAG_ACTIVITY_NEW_TASKพูดว่า:

หากภารกิจกำลังทำงานอยู่สำหรับกิจกรรมที่คุณเริ่มแล้วกิจกรรมใหม่จะไม่เริ่มขึ้น แทนงานปัจจุบันจะถูกนำไปที่ด้านหน้าของหน้าจอโดยมีสถานะเป็นครั้งสุดท้าย

นี่ทำให้ฉันใช้เวลาสองสามชั่วโมงเพื่อค้นหาว่ามีอะไรผิดพลาด

ดังนั้นจำไว้ว่าธงเพิ่มadb shell am FLAG_ACTIVITY_NEW_TASK


1
นอกจากนี้มูลค่าการกล่าวขวัญว่าไม่มีทางที่จะล้างธงกล่าวซึ่งเป็นที่น่ารำคาญ
Kedar Paranjape

16

เราสามารถเริ่มต้นแอปพลิเคชันได้ด้วยการรู้ประเภทแอปพลิเคชันและป้อนข้อมูลด้วย:

adb shell am start -d "file:///sdcard/sample.3gp" -t "video/3gp" -a android.intent.action.VIEW

คำสั่งนี้แสดงเครื่องเล่นวิดีโอที่มีอยู่เพื่อเล่นไฟล์sample.3gp


15

ขั้นตอนที่ 1: รับชื่อแพ็กเกจทั้งหมดของแอพที่ติดตั้งในอุปกรณ์ของคุณโดยใช้:

adb shell pm list packages

ขั้นตอนที่ 2: คุณจะได้รับชื่อแพ็กเกจทั้งหมดคัดลอกชื่อที่คุณต้องการเริ่มใช้ adb

ขั้นตอนที่ 3: เพิ่มชื่อแพ็คเกจที่คุณต้องการในคำสั่งด้านล่าง

adb shell monkey -p 'your package name' -v 500

ตัวอย่างเช่น:
adb shell monkey -p com.estrongs.android.pop -v 500 เพื่อเริ่มต้น Es explorer


11
วิธีนี้จะเปิดแอปพลิเคชันของคุณและส่งกิจกรรมสุ่มหลอก 500 รายการ ดังนั้นใช้ '1' เพื่อแทนที่ '500' จะดีกว่า
Lyn

14

เปิด~ / .bash_profile และเพิ่มฟังก์ชั่นทุบตีเหล่านี้ในตอนท้ายของไฟล์

function androidinstall(){
   adb install -r ./bin/$1.apk
}
function androidrun(){
   ant clean debug
   adb shell am start -n $1/$1.$2
}

จากนั้นเปิดโฟลเดอร์โครงการ Android

androidinstall app-debug && androidrun com.example.app MainActivity

2
คุณช่วยอธิบายอะไรได้app-debugบ้าง?
JayQuerie.com

3
@TrevorSenior app-debug เป็นชื่อของไฟล์ apk ซึ่งโดยปกติจะอยู่ในโหมดดีบักไฟล์ apk ที่สร้างขึ้นจะมีชื่อว่า "APPLICATION NAME-debug.apk"
AbdullahDiaa

7

monkey --pct-syskeys 0 สำหรับบอร์ดพัฒนา

หากไม่มีอาร์กิวเมนต์นี้แอปจะไม่เปิดบนบอร์ดพัฒนาโดยไม่ใช้คีย์ / จอแสดงผล:

adb shell monkey --pct-syskeys 0 -p com.cirosantilli.android_cheat.textviewbold 1

และล้มเหลวด้วยข้อผิดพลาด:

SYS_KEYS has no physical keys but with factor 2.0%

ทดสอบกับ HiKey960, Android O AOSP

เรียนรู้จาก: https://github.com/ARM-software/lisa/pull/408

ถามเพิ่มเติมได้ที่: การทดสอบลิง: หากระบบ Android ไม่มีปุ่มทางกายภาพจำเป็นต้องรวมพารามิเตอร์อะไรในคำสั่ง


2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

adb shell am start -n 'com.android.settings/.wifi.WifiStatusTest'

คุณสามารถใช้แอพพลิเคชั่น APK-INFO เพื่อรับทราบรายการกิจกรรมแอพที่เกี่ยวกับแต่ละแอพแพ็คเกจ


0

ลองทำเช่นนี้เพื่อเปิดแอปพลิเคชั่นภาพถ่ายแอนดรอยด์ & ด้วยไฟล์รูปภาพเฉพาะเพื่อเปิดเป็นพารามิเตอร์

adb shell am start -n com.google.android.apps.photos/.home.HomeActivity -d file:///mnt/user/0/primary/Pictures/Screenshots/Screenshot.png

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


ฉันมีแอพผู้เล่นซึ่งสามารถสตรีมวิดีโอจาก url ฉันจะส่ง URL นี้เป็นพารามิเตอร์และสตรีมจาก url นั้นได้อย่างไร สมมติว่ามี URL จาก youtube หรือ
พระนารายณ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.