Làm thế nào để chạy hành động của một ứng dụng cụ thể thông qua thiết bị đầu cuối?


13

Tôi cần chạy ứng dụng Android của mình từ máy tính từ xa thông qua SSH, nhưng tôi không phải là chuyên gia về dòng lệnh, vì vậy tôi muốn biết: làm thế nào để chạy một hành động cụ thể của ứng dụng? (không chỉ mở nó) Điều này ngụ ý: làm thế nào để BIẾT chính xác các hành động có thể có của một ứng dụng?

ví dụ: Tôi muốn bắt đầu một ứng dụng ghi âm trên điện thoại từ máy tính của mình VÀ bắt đầu ghi từ xa. Có thể không?

Cảm ơn, Andrea

Câu trả lời:


12

Dùng cái này:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Để kiểm soát một ứng dụng, bạn sẽ phải đặt các giá trị chính xác của <package_name><full_class_name>trong lệnh. Ví dụ: bạn có thể sử dụng com.google.gmail/com.google.gmail.check_mail(tên giả thuyết) làm phần cuối của lệnh.

Lấy tên gói của ứng dụng thì dễ , nhưng lấy tên lớp của hành động thì không. Có hai vấn đề:

  1. Nhiều nhà phát triển ứng dụng giữ thông tin lớp riêng tư.

  2. Không phải tất cả các nhà phát triển làm lập trình mô-đun thông minh. Thói quen tốt của nó là phân chia một ứng dụng trong nhiều lớp có thể được kích hoạt bởi ý định, nhưng không phải tất cả các nhà phát triển đều thông minh.

Giải pháp cho vấn đề thứ 1: Biên dịch ứng dụng bằng apktool và xem tất cả thông tin. Cũng có những cách khác, nhưng cách này luôn là phương pháp hoạt động (trừ khi ứng dụng dựa trên NDK thay vì SDK).

Giải pháp cho vấn đề thứ 2: Không có gì.

Đừng lo lắng, hầu hết các ứng dụng phổ biến đều tuân theo thực tiễn lập trình tốt nhất và chúng cung cấp Public APItừ đó bạn có thể nhận thông tin về lớp học.


Bạn có thể thêm một số giải thích về các thông số <package_name><full_class_name>, và làm thế nào để có được chúng? Đối với tôi, ít nhất là sau này không rõ ràng.
Izzy

@Izzy Đã thêm lời giải thích ... Xem lại câu trả lời.
Android Quesito

Cảm ơn! +1 từ tôi: D Nhỏ gọn và dễ hiểu. Tôi sẽ tự do thêm một số liên kết, nếu bạn không phiền, vì apktools(những người không phải là nhà phát triển có thể nghĩ đó là một phần của SDK và bị mất;)
Izzy

@Izzy Đây là vấn đề của tôi: Tôi không thể khởi chạy ứng dụng Activity of Settings này : com.android.settings/.Settings$StorageSettingsActivity. Hãy thử nó. Trên thực tế, chuỗi đó sau khi $ký là gì? Có giống như một lớp con trong hoạt động Cài đặt không?
Gokul NC

@GokulNC bạn có thể cần trích dẫn toàn bộ nội dung (trích dẫn đơn) hoặc $StorageSettingsActivitycó thể được xem là một biến và "mở rộng" thành một chuỗi trống (trừ khi có một biến được xác định bởi tên đó).
Izzy

9

Giống như Sachin Shekhar đã nói, bạn phải sử dụng lệnh sau:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Xem một ví dụ cụ thể:

  • nhận tệp apk từ thiết bị Android của bạn hoặc bất kỳ địa điểm nào trên Thị trường
  • chạy lệnh này:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

Tôi muốn bắt đầu menu "tethering", vì vậy tôi tìm kiếm một hoạt động trong đầu ra:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

Vì vậy, lệnh cuối cùng là:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

Các aaptlệnh là một phần của Android SDK


1
: D Kiểm tra nó, nó hoạt động như một nét duyên dáng. Đây là một ví dụ làm việc thực tế © ® ™.
Gilles Quenot

2
May mắn và khoa học máy tính hoàn toàn trái ngược. Đó là một con đường tương đối .
Gilles Quenot

2
Không, bạn có thể sử dụng com.android.settingsPATH, đó là lý do tại sao tôi nói nó tương đối. Kiểm tra nó trên bất kỳ ứng dụng nào bạn muốn.
Gilles Quenot

2
Tôi đã không nói rằng nó sẽ không hoạt động với các ứng dụng khác. Dấu chấm trước tên lớp làm phép thuật. Nhưng, điều này không nên được khuyến khích.
Android Quesito

1
Bạn nói rằng đó là may mắn, đây không phải là. Bạn có nguồn để khẳng định của bạn? Tại sao điều này không nên được khuyến khích?
Gilles Quenot
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.