Я понимаю, что это невозможно, поскольку в Android нет JVM, но есть ли решение этой проблемы? Мне нужно выполнить операцию внедрения байт-кода для приложения Android. Какие-либо предложения?
Внедрение байт-кода Java на Android
Ответы (3)
Вы не можете напрямую вводить байт-код в уже загруженные классы/методы. Однако вы можете динамически создавать новые классы, записывать их в dex-файл, а затем динамически загружать их.
См. эту запись в блоге для получения дополнительной информации. при динамической загрузке классов из dex файла на диск.
Чтобы динамически создать новый файл dex, вы можете использовать dexlib, который является частью кодовой базы smali/baksmali, которая является общей целевая библиотека для чтения/записи файлов dex.
Или, в качестве альтернативы, вы можете включить smali в свое приложение и сгенерировать свои классы в формате сборки smali и использовать smali непосредственно для их сборки в новый файл dex.
Внедрение кода возможно в Android, ознакомьтесь с проектом Disabler, размещенным на Github.
Disabler позволяет оптимизировать, отслеживать и модифицировать проект Android на лету, используя вставку кода в существующий проект. Код внедряется на лету, нет необходимости модифицировать старые функции для добавления ведения журнала/профилирования или отключения части потока.
Основные функции инструмента:
- трассировка: вход/выход в/из метода, сбор параметров и выходное значение)
- profile: измерение частоты и продолжительности вызовов методов
- отключить: отключение/пропуск части потока программы путем переопределения возвращаемого значения из методов, определенных пользователем
- задержка: ввести задержки в определенных участках кода (т.е. для определенных пакетов)
Под капотом используется механизм сборки AspectJ и Eclipse (javac заменен на ajc).
Вы хотите внедрить во время выполнения или во время компиляции?
Для времени компиляции - есть несколько очень зрелых решений для управления исходным кодом / байт-кодом Java - ASM, java-assist и т. Д.
Конкретно для андроида попробуйте ASMDEX
http://asm.ow2.org/doc/tutorial-asmdex.html