Пример многомодульного Android-проекта: https://github.com/xiazunyang/Wandroid.git
Brick — это вспомогательный инструмент для разработчиков Android, который позволяет создавать приложения на основе JetPack компонентов, используя MVVM-фреймворк. С помощью аннотаций Brick автоматически генерирует классы Factory для ViewModel и методы lazy. Brick также позволяет внедрять интерфейсы dao слоя ROOM и api интерфейса Retrofit в любом месте проекта.
Для разработчиков Android Brick представляет собой лёгкий инструмент внедрения, простой в использовании. Для работы с ним достаточно 4–6 аннотаций. Brick работает на этапе компиляции, не вызывая дополнительных затрат производительности во время выполнения приложения, и только одна библиотека аннотаций будет включена в ваш Android-проект, что исключает проблемы с увеличением размера приложения.
buildscript {
...
repositories {
...
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.gitee.numeron.brick:plugin:0.3.4'
}
}
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
apply from: 'https://gitee.com/numeron/brick/raw/master/brick.gradle'
apply from: '../brick.gradle'
Примечание: для настройки Brick достаточно выполнить один из пунктов 2 или 3.
@Provide
class WxAuthorViewModel: ViewModel() {
...
}
private val wxAuthorViewModel by lazyWxAuthorViewModel()
Или после onCreate():
private lateinit var wxAuthorViewModel: WxAuthorViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
wxAuthorViewModel = getWxAuthorViewModel(this)
}
-2. (Обязательно) Добавьте аннотацию @RetrofitInstance к методам получения экземпляра Retrofit, например:
@RetrofitInstance
val retrofit: Retrofit by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
Retrofit.Builder()
.client(okHttpClient)
.baseUrl(WANDROID_BASE_URL)
.addConverterFactory(MoshiConverterFactory.create())
.build()
}
val okHttpClient: OkHttpClient by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
val logInterceptor = HttpLoggingInterceptor()
logInterceptor.level = HttpLoggingInterceptor.Level.BODY
OkHttpClient.Builder()
.addInterceptor(logInterceptor)
.callTimeout(15, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.connectTimeout(15, TimeUnit.SECONDS)
.build()
}
Обратите внимание, что аннотация @RetrofitInstance может быть применена только к публичным свойствам или методам, которые могут быть объявлены в объекте singleton или companion object, либо на уровне пакета.
-1. (Необязательно) Добавьте аннотацию @RoomInstance к методам или свойствам получения экземпляра RoomDatabase, например:
@RoomInstance
val wandroidDatabase: WandroidDatabase by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
Room.databaseBuilder(CONTEXT, WandroidDatabase::class.java, "wandroid.db")
.build()
}
Обратите внимание, что аннотация @RoomInstance может быть применена только к публичным свойствам или методам, которые могут быть объявлены в объекте singleton или companion object, либо на уровне пакета.
interface WxAuthorApi {
@GET("wxarticle/chapters/json ")
suspend fun getWxAuthorList(): List<WxAuthor>
}
class WxAuthorRepo {
...
}
class WxAuthorRepo {
@Inject
lateinit var wxAuthorApi: WxAuthorApi
}
@Provide
class WxAuthorViewModel: ViewModel() {
...
``` **После внедрения**
Продолжайте писать бизнес-код. Все поля, помеченные @Inject, будут автоматически получать или создавать экземпляры во время компиляции, и вам не нужно беспокоиться о том, когда им будет присвоено значение.
Примечание: хотя это поля с модификатором lateinit var, не пытайтесь присвоить им значения, это приведёт к фатальной ошибке.
Примечание: @Inject может внедрять только типы Retrofit api интерфейса и ROOM dao интерфейса, а также классы без параметров конструктора.
#### **Три: обработка для нескольких серверов или нескольких портов**
Предположим, что есть ещё один интерфейс Retrofit api, адрес доступа или порт которого отличается от указанного в baseUrl. В этом случае вы можете добавить аннотации @Port и @Url к интерфейсу api Retrofit, чтобы установить их URL или порт.
1. Использование @Port:
После добавления этой аннотации brick пересоздаст экземпляр Retrofit во время компиляции на основе экземпляра Retrofit с пометкой @RetrofitInstance и номера порта @Port. Затем он создаст экземпляр ArticleApi с использованием нового экземпляра Retrofit.
2. Использование @Url:
Использование аналогично @Port, принцип реализации тот же.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )