2017-02-15 4 views
0

Есть ли способ преобразовать/изменить классы и методы, которые аннотируются пользовательской аннотацией? # bytecode-манипуляция (но для dex)Преобразование классов/методов по аннотациям

Каков наилучший способ сделать это?

Прокси - не подходящий способ для чего я ищу.

ответ

0

Работа с базами данных Dex-файлов возможна, но очень сложна и практически нет хорошей оснастки.

Вместо этого вы должны использовать свой код во время сборки, когда он все еще представлен как файлы классов. Для этого существуют различные инструменты. Я написал инструмент под названием Byte Buddy, который позволяет запускать код во время сборки, используя либо плагин Maven, либо Gradle.

Чтобы изменить класс, вы должны реализовать интерфейс библиотеки Plugin, который позволяет указать, какой класс вы хотите изменить и как вы хотите его изменить. Byte Buddy строит весь класс таким образом, что вам не нужно создавать прокси-сервер времени выполнения.

Для Gradle, вы должны создать конфигурацию ссылки код плагина:

configuration { 
    myPlugin 
} 
dependencies { 
    myPlugin "my:plugin:1.0" 
} 
byteBuddy { 
    transformation { 
    plugin "pkg.MyPluginImpl" 
    classpath configuration.myPlugin 
    } 
} 

Я предполагаю, что это то, что вы используете давая вам разработки для Android.

+0

Как получить это для работы с библиотечными модулями? Классы только в основном проекте приложения трансформируются только. – Reymanx

+0

Это невозможно, к сожалению. Библиотеки не являются частью вашего развернутого артефакта. Вам нужно будет их перестроить. Кроме того, вы должны использовать Java-агент во время выполнения (что невозможно на Android). –

Смежные вопросы