cara menjalankan tindakan aplikasi tertentu melalui terminal?


13

Saya perlu menjalankan aplikasi android saya dari komputer jarak jauh melalui SSH, tapi saya bukan ahli command-line, jadi saya ingin tahu: bagaimana cara menjalankan tindakan spesifik aplikasi? (tidak hanya membukanya) Yang menyiratkan: bagaimana TAHU sintaks yang tepat dari tindakan yang mungkin dari suatu aplikasi?

misalnya: Saya ingin memulai aplikasi rekaman audio di telepon saya dari komputer saya, DAN mulai merekam dari jarak jauh. Apa itu mungkin?

Terima kasih, Andrea

Jawaban:


12

Gunakan ini:

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

Untuk mengontrol aplikasi, Anda harus meletakkan nilai-nilai <package_name>dan <full_class_name>dalam perintah yang benar. Misalnya, Anda dapat menggunakan com.google.gmail/com.google.gmail.check_mail(Nama hipotetis) sebagai bagian terakhir dari perintah.

Memperoleh nama paket suatu aplikasi itu mudah , tetapi mendapatkan nama kelas tindakan tidak. Ada dua masalah:

  1. Banyak pengembang aplikasi merahasiakan info kelas.

  2. Tidak semua pengembang melakukan pemrograman modular cerdas. Kebiasaan yang baik untuk membagi aplikasi dalam beberapa kelas yang bisa dipicu oleh niat, tetapi tidak semua pengembang cerdas.

Solusi masalah 1: Dekompilasi aplikasi menggunakan apktool dan lihat semua info. Ada juga cara lain, tetapi yang satu ini adalah metode yang selalu berfungsi (kecuali aplikasi didasarkan pada NDK dan bukan SDK).

Solusi masalah 2: Tidak ada.

Jangan khawatir, sebagian besar aplikasi populer mengikuti praktik pemrograman terbaik dan mereka menyediakan Public APIdari mana Anda bisa mendapatkan info kelas.


Bisakah Anda menambahkan beberapa penjelasan tentang parameter <package_name>dan <full_class_name>, dan bagaimana cara mendapatkannya? Bagi saya, setidaknya yang terakhir tidak jelas.
Izzy

@Izzy Menambahkan penjelasan ... Tinjau jawabannya, lagi.
Android Quesito

Terima kasih! +1 dari saya: D Kompak dan mudah dimengerti. Saya akan mengambil kebebasan untuk menambahkan beberapa tautan, jika Anda tidak keberatan, karena apktools(non-pengembang sebaliknya mungkin berpikir itu bagian dari SDK dan tersesat;)
Izzy

@Izzy Inilah masalah saya: Saya tidak dapat meluncurkan Kegiatan ini aplikasi Settings: com.android.settings/.Settings$StorageSettingsActivity. Cobalah sendiri. Sebenarnya, string apa itu setelah $tanda? Apakah ini seperti sub-kelas dalam aktivitas Pengaturan?
Gokul NC

@ GokulNC Anda mungkin perlu mengutip seluruh hal (tanda kutip tunggal), atau $StorageSettingsActivitymungkin dilihat sebagai variabel dan "diperluas" ke string kosong (kecuali ada variabel yang ditentukan oleh nama itu).
Izzy

9

Seperti yang dikatakan Sachin Shekhar, Anda harus menggunakan perintah berikut:

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

Lihat contoh konkret:

  • mendapatkan file apk dari perangkat Android Anda atau tempat Market apa pun
  • menjalankan perintah ini:

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

Saya ingin memulai menu "tethering", jadi saya mencari aktivitas di output:

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

Jadi perintah terakhir adalah:

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

The aaptPerintah merupakan bagian dari SDK Android


1
: D Uji, itu berfungsi sebagai pesona. Ini adalah contoh kerja © ® ™ kehidupan nyata.
Gilles Quenot

2
Keberuntungan dan ilmu komputer sangat bertolak belakang. Itu jalan yang relatif .
Gilles Quenot

2
Tidak, Anda dapat meninggalkan com.android.settingsPATH, itu sebabnya saya mengatakan itu relatif. Uji di aplikasi mana pun yang Anda suka.
Gilles Quenot

2
Saya tidak mengatakan bahwa itu tidak akan berfungsi dengan aplikasi lain. Titik sebelum nama kelas melakukan keajaiban. Tapi, ini seharusnya tidak didorong.
Android Quesito

1
Anda bilang itu keberuntungan, ini bukan. Apakah Anda memiliki sumber untuk pernyataan Anda? Mengapa ini tidak dianjurkan?
Gilles Quenot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.