2016-11-12 12 views
0

Я хотел бы написать приложение для 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) ?

ответ

0

Доступ к этим возможностям доступен только пользователю оболочки (пользователю, выполняющему adb), или конечному пользователю root. По дизайну обычное приложение для Android не может получить доступ к этим функциям, поскольку это полностью разрушит изолированную программную среду приложения, которая станет основой модели безопасности приложения в Android.

+0

Означает ли это, если у меня есть доступ к корню, я могу получить эту информацию? Если да, то как? Поскольку приложение будет использоваться только разработчиками, я не против такого. – Giumo

+0

Да, это должно быть возможно при использовании root. Вы должны взглянуть на источник ADM и источник демона adb, запущенного на устройстве, чтобы выяснить, как ADM (через демона adb) выполняет любую функциональность, которую вы хотите. Затем вы сможете имитировать это, используя собственный скрипт/etc/shell. работает на устройстве с правами root. – JesusFreke

+0

Например, https://android.googlesource.com/platform/tools/base/+/908b391a9c006af569dfaff08b37f8fdd6c4da89/ddmlib/src/main/java/com/android/ddmlib/Client.java#283 может быть хорошим местом для начала расследование. Похоже, что он отправляет JDWP-команду процессу, чтобы начать трассировку метода. Таким образом, ваша первая задача, скорее всего, будет выяснить, как заставить JDWP работать на устройстве. – JesusFreke