Làm thế nào để bắt đầu một ứng dụng bằng các công cụ ADB của Android?


Câu trả lời:


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

Hoặc bạn có thể sử dụng trực tiếp:

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

Bạn cũng có thể chỉ định các hành động được lọc theo các bộ lọc ý định của mình:

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

23
Cảm ơn bạn rất nhiều, tôi đã biến nó thành chức năng shell trong ~ / .bash_profile để nhanh hơn nhiều function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }và cách sử dụngandroidrun com.example.test
AbdullahDiaa

3
adb shell amsẽ cung cấp cho bạn một danh sách các tùy chọn khác để truyền vào amlệnh. Bạn có thể tìm hiểu thêm tại developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury

1
@shurane Làm thế nào tôi có thể tìm thấy tùy chọn -a?
ericyoung

21
có thể chạy hoạt động mặc định, thay vì quá cụ thể đối với hoạt động nào tôi dự định nên bắt đầu?
nhà phát triển Android

1
Tôi gặp vấn đề trong việc tìm kiếm ứng dụng và hoạt động. Tôi đã sử dụng đường ống này adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedđể liệt kê tất cả các ứng dụng đã được hiển thị.
Att Righ

299

Bạn chỉ có thể chạy ứng dụng chỉ định tên gói bằng cách sử dụng công cụ khỉ bằng cách làm theo mẫu này:

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

Lệnh được sử dụng để chạy ứng dụng bằng công cụ khỉ tạo ra đầu vào ngẫu nhiên cho ứng dụng. Phần cuối của lệnh là số nguyên xác định số lượng đầu vào ngẫu nhiên được tạo cho ứng dụng. Trong trường hợp này, số này là 1, trên thực tế được sử dụng để khởi chạy ứng dụng (nhấp vào biểu tượng).


91
Trình khởi chạy là mặc định. Bạn có thể đơn giản hóa thànhadb shell monkey -p your.app.package.name 1
Androiderson

3
Có thể sử dụng tên tệp APK, thay vì tên gói không? Giả sử tôi có một tệp APK và tôi muốn có thể cài đặt và chạy nó, liệu có thể?
nhà phát triển Android

1
Điều gì xảy ra nếu tôi gặp lỗi: không tìm thấy hoạt động nào để chạy. bỏ thai ?
IgorGanapolsky

3
@IgorGanapolsky nếu không tìm thấy hoạt động nào, đó là ứng dụng Dịch vụ và hoàn toàn không có Hoạt động.
m3nda

1
@IgorGanapolsky nếu đó là một dịch vụ sử dụng adb shell am startservice com.some.package.name/.YourServiceSubClassNamexem tại đây: stackoverflow.com/a/18703083/211292
ThomasW

123

Hoặc, bạn có thể sử dụng điều này:

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

76
Có thể làm điều đó mà không chỉ định tên hoạt động, để hoạt động chính mặc định sẽ bắt đầu?
nhà phát triển Android

5
@androiddeveloper Xem lệnh khỉ bên dưới từ depodefi : không cần chỉ định tên hoạt động!
1111161171159459134

8
Nếu tôi không biết ActivityName thì sao?
IgorGanapolsky

2
Run ~ / android-sdk-linux / build-tools / 20.0.0 / aapt bãi huy hiệu yourapp.apk, mà sẽ liệt kê các mục sau đây: launchable-hoạt động: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex

17
monkey -p com.package.name 1thông quaadb shell
Denys Vitali

60

Người dùng linux / mac cũng có thể tạo một tập lệnh để chạy apk với nội dung như sau:

tạo một tệp có tên "adb-run.sh" với 3 dòng sau:

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

sau đó "chmod + x adb-run.sh" để thực hiện.

bây giờ bạn có thể chỉ cần:

adb-run.sh myapp.apk

Lợi ích ở đây là bạn không cần biết tên gói hoặc tên hoạt động có thể khởi chạy. Tương tự, bạn có thể tạo "adb-uninstall.sh myapp.apk"

Lưu ý: Điều này đòi hỏi bạn phải có aapt trong đường dẫn của bạn. Bạn có thể tìm thấy nó trong thư mục công cụ xây dựng mới trong SDK.


đối với các cửa sổ, bạn có thể thử với cygwin (chưa được kiểm tra)
dljava

3
Bài viết của bạn làm tôi tra cứu AWK. Tôi đã đi trước và tạo lại kịch bản của bạn. pastebin.com/X7X1SsFa
Kyle

2
Điều này là tuyệt vời. Tại sao đây không phải là một lệnh adb tiêu chuẩn mà chúng tôi sẽ không bao giờ biết.
John Tyree

Bạn sẽ không cần phải có dấu vết trong đường dẫn của mình (miễn là "android") nếu bạn đặt PATH trong tập lệnh adb-run.sh, như thế này: PATH = $ (dirname $ (mà android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke

@dljava tại sao điều này không hoạt động trên play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS

21

Ngoài ra, tôi muốn đề cập đến một điều nữa.

Khi bạn khởi động một ứng dụng từ đóadb shell am , nó sẽ tự động thêm cờ FLAG_ACTIVITY_NEW_TASK để thay đổi hành vi. Xem .

Ví dụ: nếu bạn khởi chạy hoạt động Cửa hàng Play từ đó adb shell am, nhấn nút ' Quay lại ' (nút quay lại phần cứng) sẽ không đưa bạn đến ứng dụng của bạn, thay vào đó, nó sẽ đưa bạn hoạt động Cửa hàng Play trước đó nếu có một số (Nếu không có nhiệm vụ Cửa hàng Play , sau đó nó sẽ đưa bạn ứng dụng của bạn). Tài liệu FLAG_ACTIVITY_NEW_TASK nói:

nếu một tác vụ đã chạy cho hoạt động mà bạn hiện đang bắt đầu, thì một hoạt động mới sẽ không được bắt đầu; thay vào đó, tác vụ hiện tại sẽ đơn giản được đưa ra phía trước màn hình với trạng thái cuối cùng

Điều này khiến tôi mất vài giờ để tìm hiểu những gì đã sai.

Vì vậy, hãy nhớ rằng adb shell am thêm cờ FLAG_ACTIVITY_NEW_TASK .


1
Ngoài ra, đáng nói là không có cách nào để xóa cờ nói, điều này gây khó chịu
Kedar Paranjape

16

Chúng ta cũng có thể bắt đầu một ứng dụng bằng cách biết loại ứng dụng và cung cấp cho nó dữ liệu:

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

Lệnh này hiển thị Trình phát video có sẵn để phát tệp sample.3gp


15

Bước 1: Trước tiên, lấy tất cả tên gói của các ứng dụng được cài đặt trong Thiết bị của bạn, bằng cách sử dụng:

adb shell pm list packages

Bước 2: Bạn sẽ nhận được tất cả các tên gói, sao chép tên bạn muốn bắt đầu sử dụng adb.

Bước 3: Thêm tên gói mong muốn của bạn trong lệnh bên dưới.

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

Ví dụ:
adb shell monkey -p com.estrongs.android.pop -v 500 để bắt đầu trình thám hiểm Es.


11
Điều này sẽ khởi chạy ứng dụng của bạn và gửi 500 sự kiện giả ngẫu nhiên đến nó. Vì vậy, sử dụng '1' để thay thế '500' là tốt hơn.
Lyn

14

mở ~ / .bash_profile và thêm các hàm bash này vào cuối tệp

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

sau đó mở thư mục dự án Android

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

2
Bạn có thể giải thích những gì app-debugkhông?
JayQuerie.com

3
@TrevorSenior app-debug là tiêu đề của tệp apk, thông thường ở chế độ gỡ lỗi, tệp apk được tạo có tiêu đề "TÊN ỨNG DỤNG-debug.apk"
AbdullahDiaa

7

monkey --pct-syskeys 0 cho các ban phát triển

Không có đối số này, ứng dụng sẽ không mở trên bảng phát triển mà không có khóa / màn hình:

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

và không thành công với lỗi:

SYS_KEYS has no physical keys but with factor 2.0%

Đã thử nghiệm trên HiKey960, Android O AOSP.

Học từ: https://github.com/ARM-software/lisa/pull/408

Cũng được hỏi tại: kiểm tra khỉ: Nếu hệ thống Android không có khóa vật lý, các tham số cần được đưa vào lệnh là gì


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

Ví dụ:

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

Bạn có thể sử dụng ứng dụng APK-INFO để biết danh sách Hoạt động ứng dụng liên quan đến từng Gói ứng dụng


0

Hãy thử điều này, để mở một ứng dụng ảnh android & với tệp hình ảnh cụ thể để mở dưới dạng tham số.

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

Nó sẽ hoạt động trên Android mới nhất, không có cửa sổ bật lên nào sẽ chọn một ứng dụng để mở vì bạn đang cung cấp ứng dụng cụ thể mà bạn muốn mở hình ảnh của mình


Tôi có một ứng dụng trình phát, có thể truyền phát video từ url, làm cách nào tôi có thể truyền url này dưới dạng tham số và truyền phát từ url đó? giả sử một url từ youtube?
Vishnu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.