jak uruchomić działanie konkretnej aplikacji za pośrednictwem terminala?


13

Muszę uruchomić moją aplikację na Androida ze zdalnego komputera przez SSH, ale nie jestem ekspertem od linii poleceń, więc chciałbym wiedzieć: jak uruchomić określone działanie aplikacji? (nie tylko otwórz) Co implikuje: jak WIEDZIEĆ dokładny sintax możliwych działań aplikacji?

np .: Chcę uruchomić aplikację do nagrywania dźwięku na telefonie z komputera ORAZ rozpocząć nagrywanie ze zdalnego. Czy to możliwe?

Dzięki, Andrea

Odpowiedzi:


12

Użyj tego:

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

Aby kontrolować aplikację, musisz wprowadzić poprawne wartości <package_name>i <full_class_name>do polecenia. Na przykład możesz użyć com.google.gmail/com.google.gmail.check_mail(hipotetyczne nazwy) jako ostatniej części polecenia.

Uzyskanie nazwy pakietu aplikacji jest łatwe , ale uzyskanie nazwy klasy akcji nie jest. Istnieją dwa problemy:

  1. Wielu programistów aplikacji zachowuje prywatność informacji o klasie.

  2. Nie wszyscy programiści wykonują inteligentne programowanie modułowe. Dobrym nawykiem jest dzielenie aplikacji na wiele klas, które mogą być wywoływane przez zamiary, ale nie wszyscy programiści są inteligentni.

Rozwiązanie pierwszego problemu: dekompiluj aplikację za pomocą apktool i zobacz wszystkie informacje. Istnieją również inne sposoby, ale ta jest zawsze działającą metodą (chyba że aplikacja jest oparta na NDK zamiast SDK).

Rozwiązanie drugiego problemu: Nic.

Nie martw się, większość popularnych aplikacji jest zgodna z najlepszymi praktykami programistycznymi i zapewniają Public APIod nich informacje o zajęciach.


Czy możesz dodać wyjaśnienie parametrów <package_name>i <full_class_name>, i jak je uzyskać? Dla mnie przynajmniej to drugie nie jest jasne.
Izzy

@Izyzy Dodano wyjaśnienie ... Jeszcze raz przejrzyj odpowiedź.
Android Quesito,

Dzięki! +1 ode mnie: D Kompaktowy i łatwy do zrozumienia. Dołożę swobodę dodawania linków, jeśli nie masz nic przeciwko, ponieważ apktools(w przeciwnym razie deweloperzy mogliby pomyśleć, że to część zestawu SDK i zgubili się;)
Izzy

@Izzy Oto mój problem: Nie mogę uruchomić tej działalności ustawień aplikacji: com.android.settings/.Settings$StorageSettingsActivity. Spróbuj sam. Właściwie, co to za ciąg znaków po $znaku? Czy to jest jak podklasa w ustawieniach?
Gokul NC

@GokulNC może być konieczne zacytowanie całej rzeczy (pojedyncze cudzysłowy), lub $StorageSettingsActivitymoże być postrzegane jako zmienna i „rozwinięta” do pustego łańcucha (chyba że istnieje zmienna zdefiniowana pod tą nazwą).
Izzy

9

Jak powiedział Sachin Shekhar, musisz użyć następującego polecenia:

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

Zobacz konkretny przykład:

  • pobieranie pliku apk z urządzenia z Androidem lub z dowolnego miejsca na rynku
  • uruchomienie tego polecenia:

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

Chciałbym uruchomić menu „Tethering”, więc szukam działania w danych wyjściowych:

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

Ostatnim poleceniem jest:

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

aaptKomenda jest częścią Android SDK


1
: D Przetestuj to, działa jak urok. To jest prawdziwy przykład działania © ® ™.
Gilles Quenot

2
Szczęście i informatyka są zupełnie przeciwne. To ścieżka względna .
Gilles Quenot

2
Nie, możesz pominąć ŚCIEŻKĘ com.android.settings, dlatego powiedziałem, że jest względna. Przetestuj to w dowolnej aplikacji.
Gilles Quenot

2
Nie powiedziałem, że nie będzie działać z innymi aplikacjami. Kropka przed nazwą klasy działa magicznie. Ale nie należy tego zachęcać.
Android Quesito,

1
Powiedziałeś, że to szczęście, to nie jest. Czy masz źródła swojego twierdzenia? Dlaczego nie należy tego zachęcać?
Gilles Quenot
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.