В чистой Java с помощью агентов внедрения и java существует способ заменить тело метода на время выполнения .
Недоступно java.lang.instrument.Instrumentation
недоступно для Android.
Я проверил все другие альтернативы, например, описанную здесь в stackoverflow , которая указывает на устаревшую реализацию javassist-android . Что удивительно работает, но только для новых классов.
Существует также статья под названием Код горячей замены в Android , в которой описывается, как снова загружать классы во время выполнения, а не как заменять существующие методы классов.
Единственной статьей, посвященной этой проблеме, является статья под названием Взлом Android: замена методов системных классов собственным , который пропускает исходный код и ссылается на Dalvik, а не на ART (поэтому он не будет работать) на современном оборудовании).
Итак, есть ли способ сделать это?
...
Итог : причина, по которой я хочу это, состоит в том, чтобы отслеживать специфические вызовы методов в моем приложении, например, когда этот метод вызывается (и выполнять некоторые действия перед ним), и просто когда этот метод завершается (и также выполняет некоторые действия с ним). Эти методы определены во время выполнения, поэтому невозможно знать их заранее, во время компиляции.