Я хочу использовать strace для мониторинга системных вызовов моего приложения. Я запускаю свое приложение на эмуляторе Pixel 3 XL API29, и когда я использую оболочку adb на P C для выполнения команд «su» и «strace», все работает нормально. Но я хочу сделать работу монитора в приложении, чтобы я мог протестировать его на реальном устройстве, не подключаясь к adb на P C. Поэтому моя цель состоит в том, чтобы иметь два приложения, одно из которых является обычным приложением, а другое - приложением-монитором с использованием strace. Я новичок в Android и подумал о нескольких способах, но не знаю, могут ли они сработать, поэтому мне нужен совет. 1. Можно ли использовать команду 'su' и 'strace' на языке Java? Когда я использую Runtime.getRuntime (). Exe c (cmd), это не сработает. Код такой:
Process p=Runtime.getRuntime().exec("su");
DataOutputStream dos = new DataOutputStream(p.getOutputStream());
dos.writeBytes("strace -f -tt -p pidnumber\n");
dos.writeBytes("exit\n");
dos.flush();
dos.close();
p.waitFor();
Обратите внимание, что когда я использую оболочку adb, я могу выполнить 'su 'напрямую. Я проверяю 'su' в / system / xbin, это '-rwsr-x ---', похоже, что другие не имеют разрешения на его выполнение. Поэтому я пытаюсь изменить его разрешение:
adb root
adb remount
failed:/system/bin/remount exited with status 7
mount -o rw,remount /system
failed: mount: '/system' not in /proc/mounts
Я не знаю, что неверно или просто невозможно запустить 'su' в java.
Так как adb имеет возможность использовать strace, возможно ли извлечь эту возможность и добавить ее в мое приложение для монитора? Может быть, как построить библиотеку или просто дать разрешение указанному c приложению в оболочке adb?
На официальном сайте Android есть страница об использовании strace https://source.android.com/devices/tech/debug/strace, но она слишком грубая, и я не знаю, с чего начать. Похоже, мне нужно сначала скомпилировать модуль Strace
mmma -j6 external/strace
доза - это значит, что мне нужно скачать весь исходный код и выполнить команду, после чего я смогу использовать strace в Application?
Еще одно предположение: можно ли вызвать strace в C и использовать JNI в приложении для получения всех системных вызовов? Но я думаю, что, возможно, это столкнется с той же проблемой в методе 1, который не может запускать 'su'.
Ранее было несколько похожих вопросов, но они слишком старые и не помогают в моей ситуации.
Android приложение для strace
'strace' в android
Как использовать strace на Android?
У меня уже есть команда strace и мог бы использовать его в оболочке adb, похожий может быть и такой, но пока нет ответа.
Как вызвать нативную библиотеку Strace в Android приложении?
В общем, мой вопрос: возможно ли использовать strace в приложениях Andriod, и если да, то как я могу это сделать? Кроме того, любой совет относительно осуществимости вышеупомянутых четырех методов был бы полезен. Я с нетерпением жду любого метода, который может сработать, и заранее благодарен.