2017-08-31 3 views
0

Lors de la décompilation d'une application, je trouve récemment que quelques manifestes d'applications ne semblent pas avoir d'activités désignées pour la vue que je veux. Par exemple, si com.example.app est sur le point de vue que je veux et j'exécutez la commande suivante:Trouver toutes les activités/fragments disponibles pour une application qui n'est pas la vôtre

dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' 

la sortie résultante sera quelque chose comme:

mCurrentFocus=Window{9280f2a u0 com.example.app/com.example.app.MainSubMenu} 
mFocusedApp=AppWindowToken{da37759 token=Token{9d56fa0 ActivityRecord{5c490a3 u0 com.example.app/.MainSubMenu t98}}} 

Cela est bien, mais quand l'écran sur lequel je suis est évidemment une sous-activité/sous-vue/fragment, dumpsys ni logcat me montreront le chemin complet de cette vue. Bref, j'aimerais trouver le nom du fragment/vue et le lancer directement. Cette syntaxe semble prometteur pour obtenir une vue fragment lancement (peut-être avec une certaine variation):

am start -n com.example.app/.MainSubMenu -e :android:show_fragment com.example.app.somefragmentview 

mais je ne suis pas sûr de la façon de trouver tous les noms fragment pour chaque activité de l'application.

+0

des fragments sont également répertoriés dans le manifeste. mais connaître les noms de fragments ne vous aidera pas beaucoup. La plupart du temps, les fragments nécessitent des extras de types non supportés par la commande 'am' pour être affichés correctement. –

+0

Merci Alex P. J'ai découvert que je posais la même question ici: https://stackoverflow.com/questions/18522733/how-to-get-extras-of-currently-running-activity-through-adb – itsthegrimace

+0

Pour être plus précis, logcat affichera quelque chose comme: I/ActivityManager (530): START u0 {cmp = com.example.app/.MainSubMenu (a des extras)} from uid 10083 sur l'affichage 0. J'ai besoin de quelque chose pour vider le ' a des informations supplémentaires. – itsthegrimace

Répondre

0

J'ai fini par utiliser AutoInput en combinaison avec MacroDroid pour sélectionner des éléments spécifiques de l'écran principal (de lancement) de l'application, en fonction du texte. Cela me permet d'accéder à n'importe quel écran d'une application sans avoir à compter sur les coordonnées des événements tactiles, car les développeurs de ces applications basculent généralement les emplacements des éléments de menu avec les mises à jour ultérieures.

Voici le processus AutoSaisie en détail (que j'imagine peut être intégré avec Tasker ainsi):

  1. Installer les deux applications mentionnées ci-dessus.
  2. Lorsque vous sélectionnez une action pour MacroDroid, choisissez l'option 'Locale/Tasker Plugin'. Cela liste les options d'AutoInput, et toutes les autres options pour les différents plugins que vous avez téléchargés, je suppose. Choisissez l'option 'AutoInput Action' dans la liste.
  3. Sélectionnez 'Action' dans l'écran suivant, puis 'Click'. Pour 'Type de champ' choisissez 'Texte', ou toute autre information que vous connaissez sur le menu/bouton/élément que vous auriez normalement choisi pour accéder à l'écran que vous voulez. Nous parlons d'un menu/bouton/élément qui existe sur l'écran principal (lancement) de votre application.
  4. Remplissez 'Field Text' avec le menu/bouton/texte de l'élément.
  5. Cochez la case en haut à droite lorsque vous avez terminé, et vous reviendrez à MacroDroid.

Quelques notes:

  • Le menu/bouton/élément doit être visible sur l'écran principal (lancement) pour AutoSaisie d'identifier et de sélectionner. L'élément de menu initial que j'essayais d'ouvrir ne pouvait être atteint qu'en défilant en premier. Pour y remédier, j'ai demandé à MacroDroid d'exécuter un script avec une commande 'input swipe' en premier pour rendre l'élément de menu visible.
  • Si votre menu/bouton/élément cible n'est pas sur l'écran principal (lancement), vous devrez suivre votre action AutoInput initiale avec les actions AutoInput suivantes jusqu'à ce que vous atteigniez le menu/bouton/élément/écran souhaité. L'écran que je voulais a été retiré deux fois de l'écran principal (lancement).Peut-être que cela va de soi, mais j'ai séparé chaque action AutoInput avec une pause appropriée (dans MacroDroid, Actions -> 'Attendre avant l'action suivante') pour sélectionner chaque menu/bouton/élément en tenant compte du temps de chargement de l'écran .

Tout cela est un peu obtus, je me rends compte, mais sans savoir comment extraire le (a extras) informations de Logcat, ce fut la seule solution qui ne m'a pas forcé à compter sur les coordonnées pour toucher événements. Espérons que cela offre une alternative viable jusqu'à ce que quelqu'un trouve/offre un moyen de tirer des données supplémentaires brutes des activités.