Внедрение Java-байт-кода на Android - PullRequest
2 голосов
/ 22 ноября 2011

Я понимаю, что это невозможно, поскольку в Android нет JVM, но есть ли способ обойти эту проблему? Мне нужно выполнить операцию внедрения байтового кода для приложения Android. Есть предложения?

Ответы [ 3 ]

3 голосов
/ 13 января 2013

Возможно внедрение кода в Android, посмотрите Disabler проект, размещенный на Github.

Disabler позволяет оптимизировать, отслеживать и изменять проект Android на лету, используя внедрение кодасуществующий проект.Код вводится на лету, нет необходимости изменять старые функции для добавления регистрации / профилирования или отключения части потока.

Основные функции инструмента:

  1. trace: вход / выход в / из метода, сбор параметров и выход из значения)
  2. profile: измерение частоты и продолжительности вызовов метода
  3. disable: отключение / пропуск части процесса программыпереопределяя возвращаемое значение из методов, определенных пользователем
  4. delay: вводить задержки в определенных разделах кода (т. е. для определенных пакетов)Механизм сборки AspectJ и Eclipse ( javac заменен на ajc )
3 голосов
/ 22 ноября 2011

Вы не можете напрямую внедрить байт-код в уже загруженные классы / методы.Однако вы можете динамически создавать новые классы, записывать их в файл dex, а затем динамически загружать их

См. этот блог сообщение для получения дополнительной информации о динамической загрузке классов из файла dex вdisk.

Чтобы динамически создать новый файл dex, вы можете использовать компонент dexlib , который является частью кодовой базы smali / baksmali , котораяуниверсальная библиотека для чтения / записи файлов dex.

Или, в качестве альтернативы, вы можете включить smali в ваше приложение и сгенерировать ваши классы в формате сборки smali и использовать smali напрямую для сборки их в новый файл dex.

0 голосов
/ 07 сентября 2016

Вы хотите внедрить во время выполнения или компиляции?

Для времени компиляции - есть несколько очень зрелых решений для манипулирования исходным кодом / байт-кодом Java - ASM, java-assist и т. Д.

Специально для Android, попробуйте ASMDEX

http://asm.ow2.org/doc/tutorial-asmdex.html

...