terminal aracılığıyla belirli bir uygulamanın eylemini nasıl çalıştırabilirim?


13

Android uygulamamı SSH üzerinden uzak bir bilgisayardan çalıştırmam gerekiyor, ancak bir komut satırı uzmanı değilim, bu yüzden bilmek istiyorum: bir uygulamanın belirli bir eylemini nasıl çalıştırırım ? (sadece açmakla kalmaz) Hangi anlama gelir: Bir uygulamanın olası eylemlerinin tam sözdizimini nasıl öğrenirsiniz?

örneğin: Telefonumdan bilgisayarımdan bir ses kaydı uygulaması başlatmak ve uzaktan kumandadan kayıt başlatmak istiyorum. Mümkün mü?

Teşekkürler, Andrea

Yanıtlar:


12

Bunu kullan:

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

Bir uygulamayı denetlemek için, doğru değerler koymak gerekecek <package_name>ve <full_class_name>komuta. Örneğin, com.google.gmail/com.google.gmail.check_mailkomutun son parçası olarak (Varsayımsal adlar) kullanabilirsiniz .

Bir uygulamanın paket adını edinmek kolaydır , ancak sınıf işlem adı almak kolay değildir. İki sorun var:

  1. Birçok uygulama geliştiricisi sınıf bilgilerini gizli tutar.

  2. Tüm geliştiriciler akıllı modüler programlama yapmaz. Bir uygulamayı amaçlarla tetiklenebilecek birden fazla sınıfa bölmek iyi bir alışkanlıktır, ancak tüm geliştiriciler akıllı değildir.

1. sorunun çözümü: apktool kullanarak uygulamayı decompile ve tüm bilgileri görmek. Başka yollar da var, ancak bu her zaman çalışan bir yöntemdir (uygulama SDK yerine NDK'yi temel almadıkça).

2. sorunun çözümü: Hiçbir şey.

Endişelenmeyin, popüler uygulamaların çoğu en iyi programlama uygulamalarını takip eder ve Public APIsınıf bilgilerini alabileceğinizi sağlar.


Eğer parametreleri üzerinde bazı açıklama eklemek Could <package_name>ve <full_class_name>ve bunların nasıl elde edilir? Bana göre, en azından ikincisi net değil.
Izzy

@Izzy Açıklama eklendi ... Cevabı tekrar gözden geçirin.
Android Quesito

Teşekkürler! Benden +1: D Kompakt ve kolay anlaşılır. Eğer sakıncası yoksa, bazı bağlantılar ekleme özgürlüğünü alacağım apktools(geliştiriciler olmayanlar aksi takdirde SDK'nın bir parçası olduğunu düşünebilir ve kaybolabilir;)
Izzy

@Izzy İşte benim sorunum: I Ayarlar uygulamasının bu Aktivite başlatmak yapamıyorum: com.android.settings/.Settings$StorageSettingsActivity. Kendin dene. Aslında, $işaretten sonra bu dize nedir? Ayarlar etkinliğinde bir alt sınıf gibi mi?
Gokul NC

@GokulNC, her şeyi (tek tırnak) alıntılamanız $StorageSettingsActivitygerekebilir veya bir değişken olarak görülebilir ve boş bir dizeye "genişletilmiş" olabilir (bu adla tanımlanan bir değişken olmadığı sürece).
Izzy

9

Sachin Shekhar'ın dediği gibi, aşağıdaki komutu kullanmalısınız:

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

Somut bir örneğe bakın:

  • apk dosyasını Android cihazınızdan veya herhangi bir Market'ten alma
  • bu komutu çalıştırmak:

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

Ben "tethering" menüsünü başlatmak istiyorum, bu yüzden çıktı bir aktivite arama:

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

Yani son komut:

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

aaptKomut parçası olan Android SDK


1
: D Test et, çekicilik olarak çalışıyor. Bu gerçek hayat © ® ™ çalışma örneğidir.
Gilles Quenot

2
Şans ve bilgisayar bilimi tam tersidir. Bu bir var göreli yolu.
Gilles Quenot

2
Hayır, PATH'ı ommitleyebilirsiniz com.android.settings, bu yüzden göreceli olduğunu söyledim. İstediğiniz herhangi bir uygulamada test edin.
Gilles Quenot

2
Diğer uygulamalarla çalışmayacağını söylemedim. Sınıf adından önceki nokta sihri yapar. Ancak, bu teşvik edilmemelidir.
Android Quesito

1
Bunun şans olduğunu söyledin, değil. İddian için kaynakların var mı? Bu neden teşvik edilmemeli?
Gilles Quenot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.