come eseguire l'azione di un'app specifica tramite terminale?


13

Devo eseguire la mia app Android da un computer remoto tramite SSH, ma non sono un esperto della riga di comando, quindi vorrei sapere: come eseguire un'azione specifica di un'app? (non solo aprirlo) Il che implica: come CONOSCERE l'esatta sintassi delle possibili azioni di un'app?

ad esempio: voglio avviare un'app di registrazione audio sul mio telefono dal mio computer e iniziare la registrazione dal telecomando. È possibile?

Grazie Andrea

Risposte:


12

Usa questo:

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

Per controllare un'app, devi inserire i valori corretti di <package_name>e <full_class_name>nel comando. Ad esempio, è possibile utilizzare com.google.gmail/com.google.gmail.check_mail(Nomi ipotetici) come ultima parte del comando.

Ottenere il nome del pacchetto di un'app è facile , ma non lo è ottenere il nome della classe di azione. Ci sono due problemi:

  1. Molti sviluppatori di app mantengono private le informazioni sulla classe.

  2. Non tutti gli sviluppatori eseguono una programmazione modulare intelligente. È buona abitudine dividere un'app in più classi che potrebbe essere innescata da intenzioni, ma non tutti gli sviluppatori sono intelligenti.

Soluzione del primo problema: decompilare l'app usando apktool e vedere tutte le informazioni. Esistono anche altri modi, ma questo è un metodo sempre funzionante (a meno che l'app non sia basata su NDK anziché su SDK).

Soluzione del secondo problema: nulla.

Non preoccuparti, la maggior parte delle app popolari segue le migliori pratiche di programmazione e forniscono Public APIda cui è possibile ottenere informazioni sulla classe.


Potresti aggiungere qualche spiegazione sui parametri <package_name>e <full_class_name>, e come ottenerli? Per me, almeno quest'ultimo non è chiaro.
Izzy

@Izzy Aggiunta la spiegazione ... Rivedi di nuovo la risposta.
Android Quesito,

Grazie! +1 da parte mia: D Compatto e facile da capire. Mi prenderò la libertà di aggiungere alcuni collegamenti, se non ti dispiace, perché apktools(i non sviluppatori altrimenti potrebbero pensare che faccia parte dell'SDK e perdersi;)
Izzy

@Izzy Ecco il mio problema: io sono in grado di lanciare questa attività di Impostazioni app: com.android.settings/.Settings$StorageSettingsActivity. Provate voi stessi. In realtà, cos'è quella stringa dopo $segno? È come una sottoclasse nell'attività Impostazioni?
Gokul NC,

@GokulNC potresti aver bisogno di citare l'intera cosa (virgolette singole), o $StorageSettingsActivitypotrebbe essere visto come una variabile e "espanso" in una stringa vuota (a meno che non ci sia una variabile definita da quel nome).
Izzy

9

Come ha detto Sachin Shekhar, è necessario utilizzare il seguente comando:

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

Vedi un esempio concreto:

  • ottenere il file apk dal tuo dispositivo Android o da qualsiasi marketplace
  • eseguendo questo comando:

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

Vorrei iniziare il menu "tethering", quindi cerco un'attività nell'output:

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

Quindi il comando finale è:

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

Il aaptcomando fa parte dell'SDK Android


1
: D Provalo, funziona come un incantesimo. Questo è un esempio di lavoro nella vita reale © ® ™.
Gilles Quenot,

2
La fortuna e l'informatica sono piuttosto opposte. È un percorso relativo .
Gilles Quenot,

2
No, puoi inserire il com.android.settingsPERCORSO, ecco perché ho detto che è relativo. Provalo su qualsiasi app che desideri.
Gilles Quenot,

2
Non ho detto che non funzionerà con altre app. Il punto prima del nome della classe fa la magia. Ma questo non dovrebbe essere incoraggiato.
Android Quesito,

1
Hai detto che è fortuna, non lo è. Hai fonti per la tua affermazione? Perché questo non dovrebbe essere incoraggiato?
Gilles Quenot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.