1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/numeron-brick

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Brick

Текущая версия:

Пример многомодульного 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-проект, что исключает проблемы с увеличением размера приложения.

Область применения

  • Использование androidx вместо support библиотек.
  • Применение компонентов ViewModel из JetPack.
  • Использование Retrofit как библиотеки сетевых запросов.
  • Возможность использования фреймворка ROOM (необязательно).
  • Проект с несколькими портами и IP-адресами на сервере (необязательно).

Установка

  1. В файле build.gradle в корне вашего 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' }
    }
}
  1. В модуле, где вы хотите использовать Brick, найдите файл build.gradle и добавьте следующую строку под всеми apply:
apply from: 'https://gitee.com/numeron/brick/raw/master/brick.gradle'
  1. Если вы хотите ускорить процесс компиляции, вы можете загрузить скрипт brick.gradle и поместить его в ту же папку, что и settings.gradle, а затем изменить apply на:
apply from: '../brick.gradle'

Примечание: для настройки Brick достаточно выполнить один из пунктов 2 или 3.

Использование

1. Использование аннотации @Provide

  1. Добавьте аннотацию @Provide к вашему классу ViewModel:
@Provide
class WxAuthorViewModel: ViewModel() {
    ...
}
  1. Есть три способа запустить обработчик аннотаций Brick:
  • Введите gradlew :[ModuleName]:kaptDebugKotlin в терминале.
  • Найдите [PrjectName] -> [ModuneName] -> Tasks -> other -> kaptDebugKotlin в Gradle панели инструментов Android Studio и дважды щёлкните по нему.
  • Нажмите Ctrl + F9 для компиляции всего проекта. Любой из этих способов запустит обработчик аннотаций.
  1. После завершения работы скрипта будут созданы два метода уровня пакета:
  • Метод lazyWxAuthorViewModel(), который можно вызвать напрямую в Activity или Fragment.
  • Метод getWxAuthorViewModel() для получения экземпляра ViewModel, если метод lazy не подходит. Обратите внимание, что метод lazyWxAuthorViewModel является обёрткой для метода getWxAuthorViewModel(). Вы можете создать экземпляр ViewModel следующим образом:
private val wxAuthorViewModel by lazyWxAuthorViewModel()

Или после onCreate():

private lateinit var wxAuthorViewModel: WxAuthorViewModel

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    wxAuthorViewModel = getWxAuthorViewModel(this)
}

2. Использование аннотации @Inject

-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, либо на уровне пакета.

  1. Предположим, у вас уже есть интерфейс Api для Retrofit и класс WxAuthorRepo:
interface WxAuthorApi {
    @GET("wxarticle/chapters/json  ")
    suspend fun getWxAuthorList(): List<WxAuthor>
}

class WxAuthorRepo {
    ...
}
  1. Создайте поле WxAuthorApi в классе WxAuthorRepo с аннотацией @Inject:
class WxAuthorRepo {

    @Inject
    lateinit var wxAuthorApi: WxAuthorApi

}
  1. Создайте поле WxAuthorRepo в классе ViewModel с аннотацией @Inject:
@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 )

Вы можете оставить комментарий после Вход в систему

Введение

Помогаем разработчикам Android создавать MVVM-фреймворк на основе компонентов JetPack. Автоматически генерируем класс Factory для ViewModel, метод lazy и т. д. с помощью аннотаций. Поддерживаем внедрение интерфейса слоя dao ROOM в любом месте проекта, а также API-интерфейса библиотеки Retrofit и произвольных экземпляров без параметров. Развернуть Свернуть
Apache-2.0
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/numeron-brick.git
git@api.gitlife.ru:oschina-mirror/numeron-brick.git
oschina-mirror
numeron-brick
numeron-brick
master