Введение
DRouter — это Android-фреймворк маршрутизации, разработанный командой Didi в 2018 году для мобильного приложения пассажиров. Он основан на концепции декомпозиции платформы для взаимодействия компонентов. Проект ориентирован на полноту функциональности и удобство использования, поддерживающий различные сценарии маршрутизации, такие как маршрутизация страниц, получение сервисов и фильтрация, межпроцессное взаимодействие и использование плагинов VirtualApk. На данный момент DRouter используется более чем в десятках приложений Didi, таких как приложение пассажиров, Didi Chuxing, Didi Bike, международные версии и Didi Custom Cars.

Поддерживаемые возможности- Навигация URI-строками для Activity, Fragment, View, RouterHandler с поддержкой регулярных выражений и заполнителей
- Совместимость с ActivityResultLauncher
- Поддержка ожидания завершения асинхронной операции (hold) для RouterHandler и Activity с возможностью установки времени ожидания
- Указание исполнительного потока для RouterHandler
- Инъекция промежуточных модулей (interceptors), поддерживающая глобальные и локальные промежуточные модули, программирование через аспекты, где промежуточные модули могут быть указаны по имени строки
- Расширенные возможности перехода между Fragment-ами
- Навигация до реализации Service через интерфейсы или базовые классы
- Поддержка псевдонимов Service и многомерных фильтров для поиска
- Возможность указания любого конструктора для навигации Service и поддержка одиночного экземпляра
- Динамическая регистрация RouterHandler и Service с автоматическим отключением при окончании жизненного цикла
- Простое и эффективное межпроцессное выполнение RouterHandler и Service
- Межпроцессное взаимодействие без необходимости предварительного связывания, как если бы это был вызов локального метода
- Автоматическое восстановление соединения между клиентским и серверным процессами
- Общий доступ к памяти
- Поддержка VirtualApk
- Совместимость с AndroidX### Технические особенности
- Поддержка инкрементальной сборки, многопоточной проверки, повышение производительности сборки
- Инициализация точки-к-точке для загрузки таблиц маршрутизации без использования рефлексии и перебора, асинхронная загрузка, повышение производительности старта
- Полная функциональность маршрутизатора
- Высокая производительность создания и фильтрации экземпляров Service
- Лёгкий и эффективный механизм межпроцессного взаимодействия, синхронное выполнение, как если бы это был вызов локального метода
- Минимизация использования рефлексии внутри фреймворка для повышения производительности выполнения
- Динамическая загрузка плагинов, совместимых с API, без необходимости обновления версий плагинов
- Отсутствие необходимости вручную добавлять правила шифрования
Основной модуль
Модуль |
Функционал |
Router |
Нативные и H5 навигационные Activity, Fragment, View, RouterHandler, поддерживают врезание и перехват |
Service |
На основе SPI через интерфейсы находят реализующие классы, поддерживают фильтрацию и конфигурацию приоритетов |
Page |
Поддерживают одиночный Page, стек Page, три формы загрузки Fragment |
Process |
Кросс-процессный доступ к Router, Service, общей памяти |
Документация по использованию
Для подключения и получения документации перейдите на Wiki```java
/** Плагин **/
classpath "io.github.didi:drouter-plugin:1.3.5" // agp 1.x - 7.x
classpath "io.github.didi:drouter-plugin:1.4.0" // agp 8.x и выше
/** Библиотеки зависимостей **/
api "io.github.didi:drouter-api:2.4.6" // Router, Service
api "io.github.didi:drouter-api-page:1.0.0" // Page
api "io.github.didi:drouter-api-process:1.0.0" // Process
## Группа общения в WeChat
[Ссылка QR-кода группы WeChat](http://p-bim-img.bytedance.net/tos-cn-i-hf6qmptvc7/drouter/drouter.png~tplv-hf6qmptvc7-image.image)
или найдите автора gwball в WeChat (укажите DRouter для входа в группу)
## Статьи
[Открытый проект Didi DRouter: высокоэффективный Android-маршрутизатор](https://juejin.cn/post/6975818153381068831)
## Лицензия
<img alt="Лицензия Apache-2.0" src="https://www.apache.org/img/ASF20thAnniversary.jpg" width="128">
Проект DRouter распространяется и используется на условиях лицензии Apache-2.0, подробнее см. [лицензионное соглашение](LICENSE)
Комментарии ( 0 )