J'ai besoin d'aide sur les applications Android dans l'émulateur SDK. P>
Voici ma configuration: p>
J'ai un émulateur d'Android SDK exécutant l'API Android 4.03 ADB Shell connecté à l'émulateur. P>
Je suis capable d'installer un APK en utilisant le nom de fichier d'installation adb.apk p>
Je suis capable d'exécuter l'application à l'aide de la coquille adb J'essaie de dormir en utilisant (adb shell) Comment retrouvez-vous le comportement d'exécution des applications Android et de leur installation? P>
(P.s. L'application de test est située ici . P> am démarrage -a android.inent.action.main -n com.akproduction.notepad / com.akproduction.notepad.noteliste code> p >
strace am démarrage -a android.inent.action.main -n com.akproduction.notepad / com.akproduction.notepad.noteliste code> mais je n'ai rien ! p>
7 Réponses :
La commande "AM START" n'exécute pas directement votre application; Il dit simplement Android de faire tout ce qui est nécessaire, dans votre exemple, de commencer une activité spécifique. P>
La commande Si vous tapez Si vous besoin em> pour attraper des choses tôt dans le processus, vous devez modifier le code pour le faire retarder jusqu'à ce que vous soyez prêt à le retrouver, ou au moins besoin d'obtenir le processus en cours d'exécution avant de commencer l'activité. La deuxième option est souvent aussi simple que de démarrer l'activité, puis utilisez le bouton arrière, puis de préparer votre trace, puis de démarrer l'activité à nouveau - mais ceci est toujours spécifique au code à l'application. P> strace code> est normalement utilisée comme dans la commande
Strace CommandName CommandName Commande Args CODE> et il lance
CommandName code> - facile, mais dans ce cas d'utilisation Android , inutile. Cependant, la strace a une option
-p code> qui vous est utile:
strace -p
PS code> sur votre système Android, vous pouvez localiser le processus avec le nom
com.akproduction.notepad code> (probablement; par défaut les processus sont nommés pour leur paquet Android. , mais il est possible de changer cela dans le manifeste). Ensuite, vous pouvez commencer à le contrôler, où que ce soit. P>
Ceci est un piratage laids One-Liner, j'ai utilisé aujourd'hui pour résoudre ce problème. En supposant que le programme ait un nom connu, essayez simplement de joindre au processus dès qu'il apparaît. Dans cet exemple, je suis intéressé par tous les appels à ouvrir.
Voici un one-liner que attrape l'ID de processus et tue-le à la rythme juste après am code> lance l'application. Vous n'obtiendrez pas les premières instructions exécutées, mais cela frappe assez tôt pour mes besoins. P>
am démarrage -n com.packagename.here \activitéName && ensemble `ps | grep com.packagename.here` && strace -p $ 2
code> p>
Les applications Android sont effectivement démarrées par le processus zygote, de sorte que vous pouvez tracer l'initialisation de l'application en traçant le processus zygote et en suivant les processus enfants ('-f'):
Face au même problème mentionné par Aaron. Est-ce que quelqu'un sait comment gérer / résoudre ce problème?
Je ne vois aucun problème à utiliser Benno.id.au/android/strace pour tracer zygote sur Android 5.1. Quelle version de Strace / Android rencontrez-vous des problèmes? Une trace de pile ou toute autre information utile est-elle indiquée par ADB Logcat lorsque Zygote se bloque? Notez que Zygote peut lancer et attraper SIGSEGV en interne pour gérer les pointeurs NULL ou certaines fonctionnalités de collecte des ordures, et la strace détectera et imprime cela, mais cela n'indique pas nécessairement que Zygote se bloque. Vous voyez-vous simplement SIGSEGV dans la sortie de la strace et en supposant que Zygote s'écrase ou êtes-vous sûr que Zygote se bloque en réalité?
Je recommanderais avant de commencer votre application Start Strace sur le processus Zygote et suivez les fourches. Zygote Process est le processus principal à partir duquel chaque nouveau processus Forks in Android, y compris votre application. Ensuite, vous voudrez peut-être filtrer le journal en fonction des PID qui vous intéressent. Exemple: p>
ps Zygote p> blockQuote>
Obtenez le zygote pid, puis p>
strace -f -p
p> blockQuote>
J'ai trouvé un moyen délicat de le faire et de garantir que tous les systèmes SysCalls vont être attrapés. Il peut être fait même si l'application n'est pas débordée:
am code>) pour mettre l'application en mode de débogage avec une option -w code> qui arrête son exécution jusqu'à ce qu'elle soit attachée à un débogueur li>
- Démarrez la demande manuellement (vous pouvez simplement cliquer sur l'écran de son icône ou l'appeler avec
am Démarrer CODE> LI>
- avec l'application arrêtée, obtenez son PID LI>
- avec son PID obtenu, appelez la strace pour tracer ce processus li>
- Enfin, joignez le débogueur afin que l'exécution commence. li>
ul>
Voici les étapes suivantes: P>
adb shell # shell into the device
am set-debug-app -w com.package.name # put app to debug mode
am start com.package.name/com.path.to.MainActivity # start the app
ps -A | grep com.package.name # this will show you the PID
strace -p <PID> > appoutput.txt 2> appstrace.txt
# strace the program and record its output and strace in txt files
Si vous avez un accès root ou que l'appareil est en cours d'exécution sans Selinux activé, vous pouvez suivre le site Android: P>
Configurez l'appareil afin que vous puissiez courir de la ronde. Vous devez être root, désactiver SELINUX et redémarrer le temps d'exécution pour supprimer le filtre SECCOMP qui autrement empêcher la course à la randonnée: racine adb adb shell setenforce 0 ADB Shell Stop ADB Shell Début p>
Configurez un répertoire mondial inscriptible pour les journaux de la strace, car Strace fonctionnera sous l'UID de l'application: ADB Shell MKDIR -M 777 / Data / Local / TMP / Strace P>
Choisissez le processus de trace et de la lancer: adb shell setprop wrap.com.android.calendar '"LOWWRAPPER strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"' p>
Lancez le processus normalement. P>
https://source.android.com/devices/tech / Débogou / Strace # App-Strace P>