Я хотел бы написать приложение для Android (а не программу для ПК), которое имеет функции поднабора Android Monitor (ADM), т.е. выберите процесс и проследите его вызовы метода с подробной информацией (вся информация, которую может получить ADM, например трассировка стека и время), в то время как телефон не подключен к компьютеру и не имеет доступа к сети.Как мое приложение для Android получит метод отслеживания другого процесса/приложения на телефоне, который включил параметры разработчика?
Я искал android.os.Debug.startMethodTracing*
, но, похоже, он может отслеживать только текущий процесс, и результат может быть записан только в файл (мне нужна информация в памяти).
Добыча его реализации, я нашел dalvik.system.VMDebug.startMethodTracing*
, но, похоже, он не может быть использован приложениями, и я не нашел способ указать pid
s, ни. Похоже, что он вызывает функции JNI, но я не нашел реализацию.
Возможно, я могу получить информацию на более низком уровне, используя Linux perf events (perf_event_open(2)
). Но прежде чем это сделать, я хотел бы знать, можно ли реализовать такую функцию в Java (может быть, поговорить с каким-то процессом «системного менеджера» или «отладочным сервером» или вызвать некоторые инструменты CLI, затем получить его stdout) ?
Означает ли это, если у меня есть доступ к корню, я могу получить эту информацию? Если да, то как? Поскольку приложение будет использоваться только разработчиками, я не против такого. – Giumo
Да, это должно быть возможно при использовании root. Вы должны взглянуть на источник ADM и источник демона adb, запущенного на устройстве, чтобы выяснить, как ADM (через демона adb) выполняет любую функциональность, которую вы хотите. Затем вы сможете имитировать это, используя собственный скрипт/etc/shell. работает на устройстве с правами root. – JesusFreke
Например, https://android.googlesource.com/platform/tools/base/+/908b391a9c006af569dfaff08b37f8fdd6c4da89/ddmlib/src/main/java/com/android/ddmlib/Client.java#283 может быть хорошим местом для начала расследование. Похоже, что он отправляет JDWP-команду процессу, чтобы начать трассировку метода. Таким образом, ваша первая задача, скорее всего, будет выяснить, как заставить JDWP работать на устройстве. – JesusFreke