Андроид-приложение, 52-я неделя
Практическая работа на прото-датастор
Я бросил выполнять практическую работу: я застрял и не знаю, как делать дальше...
Подготовка к использованию датастора
Повторю здесь список действий, который я публиковал на сорок девятой неделе, так как мне нужно будет кое в чём исправиться.
Подключение библиотек к проекту
В файл «бильд . грейдль . кей-ти-эс» (build.gradle.kts) добавляю строки внутрь существующего блока «депе́нденсис»:
dependencies { val lifecycle_version = "2.7.0" ... // ViewModel implementation("androidx.lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle-viewmodel-compose:$lifecycle_version") // Proto DataStore implementation("androidx.datastore:datastore:1.0.0") }
Обратите внимание: последнюю строку с прошлого раза я заменил — и там, и тут.
Создание контейнера приложения
Создаю класс контейнера приложения в пакете приложения. Контейнер приложения должен будет стать контейнером и для датастора (нужно проверить, так ли это!)
package com.example.myapp import android.app.Application class AppContainer: Application() { override fun onCreate() { super.onCreate() } }
Правка манифеста приложения
Чтобы содержимое контейнера было доступно работающему приложению, запуск приложения должен происходить по-другому: как — описано в «манифесте приложения»:
...application android:name=".AppContainer"
Теперь точка входа — объект класса «Апп контейнер» (AppContainer). (Это тоже надо проверить...)
Создание схемы данных для прото-датастора
Старый класс «Экза́мпл» (Example, «Пример») я переименовываю как-нибудь.
По пути «СРЦ / мэйн / про́то» (src/main/proto) создаю файл со следующим содержимым:
syntax = "proto3"; option java_package = "com.example.myapp"; option java_multiple_files = true; message Example { string id = 1; string text = 2; }
Автогенерация ява-кода по схеме данных
Устанавливаю плагин.
В файл «бильд . грейдль . кей-ти-эс» (build.gradle.kts), в соответствующие места добавляю текст, который ещё нужно проверить на корректность:
plugins { ... id("com.google.protobuf") version "0.9.4" } ... dependencies { ... // Protobuf implementation("com.google.protobuf:protobuf-javalite:3.25.3") } ... protobuf { protoc { artifact = "com.google.protobuf:protoc:3.25.3" } generateProtoTasks { ofSourceSet("main").forEach { task -> task.builtins { getByName("java") { option("lite") } } } } }
Если мне удастся пересобрать проект, я смогу использовать такой импорт:
import com.example.myapp.datastore.Example
Создание сериализатора
Объект-синглтон «Сериализатор» должен будет обеспечивать автоматическое сохранение структур данных оперативной памяти в формат «сырых данных», помещаемых в файл-хранилище датастора, и обратный процесс, десериализацию. Вот как я определяю такой объект:
package com.example.myapp ... import androidx.datastore.core.Serializer import com.example.myapp.datastore.Example ... object ExampleSerializer : SerializerOfExample { ... }
Заметьте, что SerializerOfExample («Сериала́йзер оф экза́мпл») — это Serializer<Example>.
В планах: лексический поиск
Заметил: словарь «Нэйвера» «не находит» слово 입맛 по запросу 임맏, хотя соответствующая транскрипция в словарной статье есть. Вместо этого правильное слово появляется в поисковой подсказке, под полем ввода запроса.
Мне бы хотелось сделать в своём приложении похожий поиск, с учётом естественных фонетических искажений. Возможно, следует иногда давать пользователю возможность находить слова по их приблизительному написанию...