Тип работы:
Предмет:
Язык работы:


Реализация мультиплатформенного доступа к файловым хранилищам на языке Kotlin

Работа №127727

Тип работы

Бакалаврская работа

Предмет

информатика

Объем работы50
Год сдачи2022
Стоимость4385 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
23
Не подходит работа?

Узнай цену на написание


Введение 4
Постановка задачи 5
1. Обзор 6
1.1. Предметная область 6
1.2. Существующие решения 6
1.2.1 Решения, предоставляющие интерфейс виртуальных файловых систем 7
1.2.2 Key-value решения 9
1.2.3 Решения для мультиплатформенного ввода-вывода (IO) 11
1.2.4 Вывод 12
2. Презентация решения 13
2.1. Архитектура библиотеки 13
2.1.1 Обзор функциональности и особенностей файловых хранилищ 14
2.1.2 Базовые интерфейсы виртуальной файловой системы . 16
2.1.3 Расширения 19
2.1.4 Инварианты и гарантии 21
2.1.5 Преимущества и недостатки выбранного подхода 22
2.2. Файловые хранилища, поддержанные библиотекой 23
2.2.1 SystemFS 23
2.2.2 GoogleDriveFS 24
2.2.3 SqliteFS 26
2.3. Используемые зависимости 27
2.3.1 Ktor 27
2.3.2 Зависимости на платформе Android 27
3. Детали реализации 28
3.1. Структура проекта 28
3.2. GoogleDriveFS 28
3.2.1 GoogleDriveAPI 28
3.2.2 GoogleAuthorizationRequester и его реализации . . . 30
3.3. SqliteFS 32
3.4. Тестирование 34
3.5. Прочее 34
4. Примеры использования библиотеки 35
4.1. Сборка проекта 35
4.2. Multieditor 35
4.2.1 Подключение библиотеки 35
4.2.2 Реализация бизнес-логики в общем модуле приложения 35
4.2.3 Определение списка доступных хранилищ на каждой из
целевых платформ 37
4.2.4 Реализация клиентских приложений на разных плат-формах 40
4.3. gdrive-cli 44
4.3.1 Написание логики приложения с учетом нескольких типовых ограничений на функциональность VFS 44
Заключение 46
Ссылки 47


Современный рынок разработки ИТ-продуктов чрезвычайно конкурентен. От скорости создания минимального жизнеспособного продукта (MVP) может зависеть положение на этом рынке и пользовательский охват. В последнее время популярность набирают языки и инструменты, позволяющие создавать приложения из единой кодовой базы под множество целевых платформ: начиная от настольных компьютеров под управлением операционных систем Windows, Linux и Mac OS X, и заканчивая умными часами (watchOS) или умными телевизорами (tvOS). Такими, например, являются фреймворк Flutter, который написан на языке Dart, а также Kotlin Multiplatform, который является инструментом языка Kotlin. Оба этих инструмента относительно новые — первые публичные версии стали доступны в 2017 году, — и поэтому имеют недостаток в виде отсутствия большого набора готовых библиотек для разных нужд. Одним из недостатков подобных инструментов является также ограниченность доступной из общего кода функциональности, поскольку вся такая функциональность должна иметь реализацию на всех целевых платформах.
Примером такой функциональности является работа с файлами и файловыми системами. В частности, для Kotlin Multiplatform нет стандартного способа работы с файловыми хранилищами из общего кода, а значительным недостатком многих существующих решений является отсутствие поддержки браузерной платформы. Запрос от сообщества разработчиков на подобные решения подтверждается вопросами по этой теме на популярных интернет- площадках[1, 2, 3, 4, 5]. В данной работе изучается изложенная проблема и представляется решение в виде мультиплатформенной Kotlin-библиотеки, предоставляющее доступ к файловым хранилищам и поддерживающее в том числе браузерную платформу.
Структура работы. В разделе 1 осуществлен разбор предметной области и альтернативных решений данной проблемы. В разделе 2 представлена реализованная мультиплатформенная библиотека. В разделе 3 рассказывается о технических деталях её реализации. В разделе 4 представлены примеры приложений, созданных на базе данной библиотеки.
Постановка задачи
Цель работы состоит в разработке мультиплатформенной библиотеки на языке программирования Kotlin, позволяющей разработчику описывать логику работы с различными файловыми хранилищами в общем модуле мультиплатформенного проекта. Библиотека должна предоставлять интерфейс виртуальной файловой системы с иерархической структурой папок и файлов и позволять записывать и читать файлы как массивы байт. Библиотека должна быть достаточно гибкой, чтобы разработчик мог самостоятельно дополнить её функциональность (например, поддержать на базе библиотеки новое хранилище), а также иметь возможность расширения на уровне предоставляемых интерфейсов, когда от целевых хранилищ требуется поддержка особых возможностей (например, наличие у файлов атрибутов прав на чтение/запись).
От конечного продукта ожидается как минимум:
• поддержка трех платформ: JVM (для приложений, работающих в среде операционных систем Windows, Linux, и т.п.), JS (браузерные приложения), Android (мобильные приложения);
• поддержка как минимум одного облачного хранилища, доступного со всех поддерживаемых платформ.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Проведено исследование существующих решений и выявлены их достоинства и недостатки.
Основным результатом данной работы является реализованная мультиплатформенная Kotlin-библиотека multifs, позволяющая описывать логику работы с виртуальной файловой системой в общем коде. Данная библиотека предоставляет поддержку трех файловых хранилищ, среди которых одно облачное, доступное на платформах JVM, Android и JS (browser). Наличие поддержки браузерной платформы является существенным преимуществом разработанного решения.
На базе созданной библиотеки реализовано два приложения, одно из которых мультиплатформенное с клиентами на трёх перечисленных платформах и поддерживающее все три файловых хранилища. Данное приложение демонстрирует возможности и процесс использования multifs с точки зрения разработчика.



[1] File IO with Kotlin multiplatform - Stack Overflow. URL:https : //stackoverflow.com/q/68191209. (дата обращения 04.05.2022).
[2] Read/Writefile in kotlin native - IOS side - Stack Overflow. URL:https://stackoverflow.com/q/61078285. (дата обращения 04.05.2022).
[3] Multiplatform File I/O - r/Kotlin (reddit). URL:https : //www. reddit. com/r/Kotlin/comments/g0hjsw/multiplatform_file_io/. (дата обращения 04.05.2022).
[4] Kotlin/native: library for file io? - r/Kotlin (reddit). URL:https : //www.reddit.com/r/Kotlin/comments/s3wzmt/kotlinnative_library_for_file_io/. (дата обращения 04.05.2022).
[5] Looking for a library or an alternative for basic multiplatform File I/O - Kotlin Discussions. URL:https://discuss.kotlinlang.org/Vlooking-for-a-library-or-an-alternative-for-basic-multiplatform-file-i-o/21472. (дата обращения 04.05.2022).
[6] Kotlin Multiplatform. URL:https : //kotlinlang. org/docs/multiplatform.html. (дата обращения 13.05.2022).
[7] Kotlin for JavaScript. URL:https : //kotlinlang. org/docs/js-overview.html. (дата обращения 13.05.2022).
[8] Differences between Node.js and the Browser. URL:https : //nodejs. dev/learn/differences-between-nodejs-and-the-browser. (дата обращения 13.05.2022).
[9] Virtual file system. URL:https : //en. wikipedia. org/wiki/Virtual_file_system. (дата обращения 11.05.2022).
[10] StackOverflow. URL:https : //stackoverflow. com. (дата обращения 04.05.2022).
[11] GitHub. URL:https://github.com. (дата обращения 04.05.2022).
[12] Kotlin Multiplatform Libraries. URL:https://github.com/AAkira/Kotlin-Multiplatform-Libraries. (дата обращения 04.05.2022).
[13] kile. URL:https : //github . com/realad/kile.(дата обращения 04.05.2022).
[14] File Transfer Protocol - Wikipedia. URL:https://en.wikipedia. org/wiki/File_Transfer_Protocol. (дата обращения 04.05.2022).
[15] aSoft-Ltd/files. URL:https : / /github . com/aSoft - Ltd/files. (дата обращения 04.05.2022).
[16] kotlinx-fs. URL:https : / /github . com/qwwdfsad/kotlinx - fs. (дата обращения 04.05.2022).
[17] supernatural-fs. URL:https : //github. com/suparngp/kotlin-multiplatform-projects. (дата обращения 04.05.2022).
[18] korio. URL:https : //github . com/korlibs/korio. (дата обращения 04.05.2022).
[19] Korlibs. URL:https : / / docs . korge . org/. (дата обращения 04.05.2022).
[20] okio. URL:https : //github . com/square/okio. (дата обращения 04.05.2022).
[21] multiplatform-settings. URL:https : //github. com/russhwolf/multiplatform-settings. (дата обращения 04.05.2022).
[22] KVault. URL:https : //github . com/Liftric/KVault. (дата обращения 04.05.2022).
[23] Kissme. URL:https : //github. com/netguru/Kissme. (дата обращения 04.05.2022).
[24] Multiplatform-Preferences. URL:https : //github . com/florent37/Multiplatform-Preferences. (дата обращения 04.05.2022).
[25] Kotlin Data Storage. URL:https : //github. com/kotlingang/kds. (дата обращения 04.05.2022).
[26] Delegated properties I Kotlin. URL:https://kotlinlang.org/docs/delegated-properties.html. (дата обращения 04.05.2022).
[27] asoft-storage. URL:https ://github. com/andylamax/asoft-storage.(дата обращения 04.05.2022).
[28] kached. URL:https : //github . com/faogustavo/kached. (дата обращения 04.05.2022).
[29] Amazon S3. Cloud Object Storage. URL:https : //aws . amazon. com/s3/. (дата обращения 04.05.2022).
[30] kotlinx-io. URL:https : //github . com/Kotlin/kotlinx-io. (дата обращения 04.05.2022).
[31] kotlinx-io. Is this library active/supported? URL:https : //github. com/Kotlin/kotlinx-io/issues/54. (дата обращения 04.05.2022).
[32] Ktor Framework. URL:https : / / ktor . io/. (дата обращения 04.05.2022).
[33] Tinlok. URL:https : //github . com/Fuyukai/Tinlok. (дата обра¬щения 04.05.2022).
[34] mutifs. URL:https : / /github . com/vsalavatov/multifs. (дата обращения 04.05.2022).
[35] Window.localStorage - Интерфейсы Web API I MDN. URL:https ://developer.mozilla.org/ru/docs/Web/API/Window/localStorage. (дата обращения 10.05.2022).
[36] Representational state transfer - Wikipedia. URL:https :/ /en. wikipedia . org/wiki/Representational _state_transfer. (дата обращения 11.05.2022).
[37] Files and folders overview I Drive API I Google Developers. URL:https://developers.google.com/drive/api/guides/about-files. (дата обращения 11.05.2022).
[38] API Яндекс.Диска.URL:https : //yandex. ru/dev/disk/api/concepts/about.html. (дата обращения 11.05.2022).
[39] Dropbox API v2. URL:https://www.dropbox. com/developers/documentation/http/documentation. (дата обращения 11.05.2022).
[40] Amazon Simple Storage Service Documentation. URL:https : //docs.aws.amazon.com/s3/index.html. (дата обращения 11.05.2022).
[41] Case Sensitivity I Microsoft Docs. URL:https : //docs . microsoft. com/en-us/windows/wsl/case-sensitivity.(дата обращения 11.05.2022).
[42] Kotlin. Properties. Getters and setters. URL:https : / / kotlinlang. org/docs/properties . html # getters - and - setters. (дата обращения 13.05.2022).
[43] Kotlin. Сопрограммы.URL:https : //kotlinlang.ru/docs/reference/coroutines.html. (дата обращения 13.05.2022).
[44] Kotlin. Generics. URL:https : //kotlinlang. org/docs/generics.html. (дата обращения 14.05.2022).
[45] KT-13108. Denotable union and intersection types. URL:https : //youtrack.jetbrains.com/issue/KT-13108/Denotable-union-and-intersection-types#focus=Comments-27-5474923.0-0. (дата обращения 15.05.2022).
[46] Google Cloud Platform. URL:https : //console. cloud. google. com. (дата обращения 15.05.2022).
[47] Using OAuth 2.0 to Access Google APIs. URL:https : //developers . google . com/identity/protocols/oauth2. (дата обращения 16.05.2022).
[48] Android KTX. URL:https: //developer. android. com/kotlin/ktx. (дата обращения 16.05.2022).
[49] Set up Google Play services. URL:https://developers.google.com/android/guides/setup. (дата обращения 16.05.2022).
[50] Promise - JavaScript I MDN. URL:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise. (дата обращения 22.05.2022).
[51] Inline functions. Reified type parameters. URL:https://kotlinlang.org/docs/inline-functions.html#reified-type-parameters. (дата обращения 23.05.2022).
[52] Gradle Build Tool. URL:https : //gradle . org/. (дата обращения 17.05.2022).
[53] Multieditor. URL:https : //github . com/vsalavatov/multieditor. (дата обращения 22.05.2022).
[54] Compose Multiplatform, by JetBrains. URL:https : / /github . com/JetBrains/compose-jb. (дата обращения 24.05.2022).
[55] VerticalScrollbar wrong behavior in AlertDialog. URL:https : //github. com/JetBrains/compose-jb/issues/976. (дата обращения 24.05.2022).
[56] Using LazyColumn in AlertDialog causes IllegalStateException. URL: https : / /github . com/ JetBrains / compose - jb/ issues / 1111. (дата обращения 24.05.2022).
[57] gdrive-cli. URL:https : //github . com/vsalavatov/gdrive-cli. (дата обращения 22.05.2022).


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ