Это далеко не тривиально, но должно работать, когда приложения, которые вы хотите отслеживать, используют базы данных sqlite или, в более общем смысле, записывают сообщения в файл по мере их поступления.
Вам действительно нужно иметь root-доступ кустройство, как это нарушает систему безопасности Android:
Напишите собственный процесс, который работает как демон, используя NDK, и порождает его один раз после загрузки как root.Теперь вам нужно решить 3 основные проблемы:
Как узнать, что-то изменилось?
Это самая простая часть.Вам нужно будет использовать интерфейс Linux Inotify, который должен быть доступен на каждом телефоне Android, так как SDK имеет FileObserver начиная с API 1, так что вы здесь в безопасности.
Другим интересным подходом может быть перехват сообщений C2DM.Я нашел класс NDK с именем BroadcastReceiver , поэтому NDK может их перехватить.Но я лично не стал бы этого делать, потому что неправильно воровать намерения.Также вам придется перераспределить их или позволить отправиться реальным получателям, поэтому я не буду подробно описывать это здесь.Это может работать, но это может быть сложнее и должно быть только запасным вариантом.
Итак, когда вы решили это, возникает следующая проблема:
Как прочитать изменения вбезопасный путь?
У вас есть проблема, большая, здесь.Файл не принадлежит клиенту, и клиент даже не имеет права знать, где он находится (обычно).Таким образом, отслеживаемое приложение не знает о клиенте и будет действовать так, как будто файл принадлежит исключительно ему самому.Если они используют какой-то старый текстовый файл для написания сообщений, вам нужно найти способ безопасного чтения из него, поскольку он может быть перезаписан или расширен в любое время.Но вам может повезти, когда они используют sqlite, в соответствии с этим вполне допустимо иметь более одного читателя одновременно, только одного писателя.Мы в спецификации, все снова хорошо.Теперь, когда вы прочитали новые данные, вам нужно решить еще несколько проблем:
Как вернуть новые данные в основное приложение?
Вы должны сделать толькоМинимум в этой программе C / C ++, потому что она запускается от имени пользователя root.Вы также должны защищать пользователей вашего приложения от нарушений безопасности, поэтому, пожалуйста, напишите программу с учетом этого.Я понятия не имею, что это могло бы работать очень хорошо, но вот некоторые мысли:
- Запись собранных данных в вашу собственную базу данных sqlite (легко в C / C ++ и Java),
- Записать собранные данные в простой файл (совсем не рекомендуется, боль в тылу),
- Отправить намерение, содержащее новые данные (возможно, не так просто в C / C ++, но легко в Java))
- Используйте сокеты / каналы / ..., просто любой механизм RPC, который вы можете себе представить, который вам предлагает Linux (как и файл, не делайте этого)
Как указано в тексте выше, будьте осторожны при написании этого демона, так как это потенциальная угроза безопасности.Это может быть трудно сделать, когда вы вообще ничего не знаете о C / C ++, даже если вы написали простые программы, это должно быть нетривиальной задачей.
При поиске в Интернете я нашелКлассы NDK C ++, о которых я упоминал выше.Его можно найти по адресу Google code .У меня нет опыта работы ни с NDK, ни с оболочкой C ++, но, возможно, стоит посмотреть, когда вы планируете написать это.