Мне нужно прокси-методы для разных классов классов в Android UI Framework, например TextView
. В частности, TextView#setText(int resId)
. Этот метод не является частью интерфейса. Поэтому Java Proxy не будет работать, поскольку он работает только для интерфейсов. Мне нужно использовать манипуляции с байт-кодом.Прокси-окончательный метод в не финальном классе
Я нашел библиотеку под названием dexmaker, которая казалась многообещающей. Я предполагаю, что мне нужно выполнять манипулирование байтами времени выполнения, поскольку классы Android View фактически доступны на устройстве. Dexmaker может проксировать публичные методы для конкретных классов. Затем я заметил, что TextView#setText(int resId)
необъяснимо final. Сам класс TextView
не является окончательным.
Я думаю, что я мог использовать forx dexmaker для поддержки окончательных методов в не заключительных классах. Это возможно? Я не хочу запускать этот проект, если это не так. Это было бы огромной победой для моей библиотеки, хотя разработчикам не потребовалось бы подклассы, интерфейсы или ручные вызовы статических методов для их представлений. Моя библиотека должна знать, когда текст установлен в определенном представлении. Прокси-сервер - идеальный образец дизайна для этого.
Случайный снимок (так как он не упоминается): Надувной макет позволяет [установить заводский класс] (http://developer.android.com/reference/android/view/LayoutInflater. html # setFactory2 (android.view.LayoutInflater.Factory2)), возможно, это то, что вам нужно. Это используется в [probe] (https://github.com/lucasr/probe/), где фабрика динамически создает прокси с помощью dexmaker для перехвата вызовов. –
Часть моей библиотеки на самом деле использует макет надувной фабричной техники. Вы говорите, что вы можете настроить прокси-сервер там, на объектах представления, созданных через dexmaker? – jophde
Большое спасибо Стефану. Источник зонда - именно то, что мне нужно :). Если я правильно понял, Probe создает совершенно новые классы View, поэтому ограничение Dexmaker Proxybuild на невозможность обработки окончательных методов не является проблемой? Из документов dexmaker ProxyBuilder: «Этот процесс работает только для классов с общедоступным и защищенным уровнем видимости». – jophde