Коммит 1b3dd6b1 создал по автору Зарубин Виталий Викторович's avatar Зарубин Виталий Викторович
Просмотр файлов

feat: add docs install libs, example

владелец 08fbfb2c
......@@ -5,9 +5,10 @@
# Kotlin Multiplatform
- [QtBindings](./docs/qt_bindings/main.md)
- [Подключение](./docs/qt_bindings/connection.md)
- [Использование](./docs/qt_bindings/demo.md)
- [QtBindings](./docs/qt-bindings/main.md)
- [Подключение](./docs/qt-bindings/connection.md)
- [Использование](./docs/qt-bindings/demo.md)
- [Поддержка](./docs/qt-bindings/support.md)
# Библиотеки
......
/* Fonts */
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap');
/* Icons */
@import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200');
html,
body {
......@@ -34,18 +37,34 @@ html.rust {
--sidebar-nonactive-focus: #47494b;
}
.sidebar {
z-index: 1;
}
.chapter li a {
font-weight: bold;
}
a {
text-decoration: none;
position: relative;
}
a:hover {
text-decoration: underline;
}
a:has(span.icon) {
padding-left: 28px;
}
a span.icon {
position: absolute;
display: inline-block;
padding-right: 3px;
left: 0;
}
.preview {
border-radius: 10px;
}
......@@ -123,6 +142,10 @@ blockquote {
padding: 1px 20px;
}
blockquote code.hljs {
background: var(--bg);
}
/* Hide Index */
.chapter strong,
.chapter > .chapter-item:first-child {
......
# StudentBox
## StudentBox
- Что делает
- Что демонстрирует
**[<span class="icon material-symbols-outlined">link</span>GitLab](@todo)**
StudentBox - приложение позволяющие записывать и редактировать список уроков на день для студента/ученика.
Приложение является примером создания приложения с использованием QtBindings в KMP.
Основная цель - показать как создать и использовать QtBindings в проекте для ОС Аврора.
Включает:
- Запись уроков на день.
- Редактирование списка уроков.
### Структура проекта
<p>
<img class="preview2" src="/assets/images/examples/student-box/structure_ru.png"/>
</p>
### KMP
- Получение названия приложения в зависимости от платформы.
- База данных
- Получение дней с уроками.
- Получения дня с уроками.
- Обновление уроков.
- Сборка библиотеки aar.
- Сборка статической С библиотеки.
- Создание bindings для Qt.
- Http запрос с использованием Ktor.
#### Libs
* [Ktor](https://ktor.io/docs/welcome.html).
* [SQLDelight](https://sqldelight.github.io/sqldelight/2.0.2/).
* [Coroutines](https://kotlinlang.org/docs/coroutines-overview.html).
* [Serialization](https://kotlinlang.org/docs/serialization.html).
* [kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime).
* [Ksp](https://kotlinlang.org/docs/ksp-overview.html).
* [QtBindings](../qt-bindings/main.md).
### Android
Нативное для платформы приложение Android с использованием библиотеки KMP.
#### Libs
* [Ktor](https://ktor.io/docs/welcome.html).
* [Jetpack Compose](https://developer.android.com/compose).
* [Hilt](https://developer.android.com/training/dependency-injection/hilt-android).
* [Navigation](https://developer.android.com/develop/ui/compose/navigation).
* [Serialization](https://kotlinlang.org/docs/serialization.html).
* [kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime).
* [Ksp](https://kotlinlang.org/docs/ksp-overview.html).
### ОС Аврора
Нативное приложение ОС Аврора c использованием статической библиотеки KMP и созданных привязок QtBindings.
В проекте привязки отделены от самого проекта через субдиректории Qt.
Субдиректория с привязками собирается в статическую библиотеку и добавляется в основной проект.
### Снимки экранов
<img height="600px" src="/assets/images/examples/student-box/preview_android_ru.png"/>
<img height="600px" src="/assets/images/examples/student-box/preview_aurora_ru.png"/>
# Ktor
- Что такое
- Где взять
- Как подключить
**[<span class="icon material-symbols-outlined">link</span>GitLab](@todo)**
[Ktor](https://ktor.io/docs/client-create-multiplatform-application.html)
доступен на ОС Аврора через [Engine Curl](https://ktor.io/docs/client-engines.html#curl).
Он потребовал некоторых доработок для работы на ОС Аврора.
Для работы с ним необходимо будет собрать и опубликовать в [Maven Local Repositories](https://maven.apache.org/repositories/local.html).
## Публикация в Maven Local
Для сборки и публикации в `Maven Local` нужно клонировать открытый проект из GitLab:
```shell
git clone @todo
```
Затем перейти в директорию с проектом и выполнить команду:
```shell
./gradlew ktor-client:ktor-client-curl:publishLinuxPublicationsToMavenLocal \
ktor-client:ktor-client-curl:publishKotlinMultiplatformPublicationToMavenLocal \
--no-scan
```
Эта команда соберет проект и опубликует его в `Maven Local`.
## Подключение Maven Local
Для активации `Maven Local` в проекте, необходимо добавить `mavenLocal()` в файле `settings.gradle.kts`:
```kotlin
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
mavenLocal()
}
}
```
## Подключение Engine Curl
> Для работы `ktor-client-curl` требуется динамическая библиотека `zlib`, подключить ее можно указав в qmake (*.pro файл) `LIBS += -lz`.
После публикации плагина в `Maven Local` плагин можно подключить:
```kotlin
nativeMain.dependencies {
implementation("io.ktor:ktor-client-curl:3.1.2-aurora")
}
```
Остальные компоненты Ktor не требуют модификаций и нужно использовать upstream версию.
......@@ -12,7 +12,7 @@
Был разработан плагин `QtBindings` для облегчения использования нативных целей `linuxX64` & `linuxArm64`
для реализации приложений ОС Аврора с использованием KMP.
[Подробнее](./kotlin/qt_bindings/main.md)
[Подробнее](./qt-bindings/main.md)
<style>
/** Hide preview to home page **/
......
# Подключение QtBindings
**[<span class="icon material-symbols-outlined">link</span>GitLab](@todo)**
QtBindings - плагин предназначенный для облегчения работы с библиотеками
[Kotlin Multiplatform](https://www.jetbrains.com/kotlin-multiplatform/) в [Qt](https://www.qt.io/).
Он создает привязки низкоуровневых библиотек Linux для Qt.
## Публикация в Maven Local
Для использования QtBindings необходимо использовать [Maven Local Repositories](https://maven.apache.org/repositories/local.html).
Для сборки и публикации в `Maven Local` нужно клонировать открытый проект из GitLab:
```shell
git clone @todo
```
Затем перейти в директорию с проектом и выполнить команду:
```shell
./gradlew publishToMavenLocal
```
Эта команда соберет проект и опубликует его в `Maven Local`.
## Подключение Maven Local
Для активации `Maven Local` в проекте, необходимо добавить `mavenLocal()` в файле `settings.gradle.kts`:
```kotlin
pluginManagement {
repositories {
google()
gradlePluginPortal()
mavenCentral()
mavenLocal()
}
}
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
mavenLocal()
}
}
```
## Подключение QtBindings
> Для работы плагина требуется [Kotlin Symbol Processing](https://kotlinlang.org/docs/ksp-quickstart.html).
После публикации плагина в `Maven Local` плагин можно подключить:
```kotlin
plugins {
id("ru.aurora.kmp.qtbindings") version "0.1.0"
}
```
Необходимо настроить плагин, указав название библиотеки:
```kotlin
qtBindings {
libName = "my_library"
}
```
> Указанное название библиотеки, должно совпадать с названием определённым в блоке настройки цели Linux.
Далее можно ознакомиться со страницей документации [Использование](demo.md).
# Hello, QtBindings!
**[<span class="icon material-symbols-outlined">link</span>GitLab](@todo)**
> В этом разделе описан процесс создания приложения с использованием
> **QtBindings** и нативного для Linux таргета (_linuxX64_ и _linuxArm64_) для ОС Аврора.
>
> Уже установили необходимые зависимости в [local maven](./connection.md)?
> Уже установили необходимые зависимости в [Maven Local](./connection.md)?
> Время написать первое приложение на KMP для ОС Аврора!
### Структура
......@@ -36,7 +38,7 @@
Необходимый шаблон библиотеки называется **Multiplatform Library**:
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw1.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw1.png"/>
</p>
Скачав его, вы увидите все доступные платформы, но для проекта ОС Аврора необходимо оставить только цель `linuxX64Main`.
......@@ -167,7 +169,7 @@ kotlin {
Для этого необходимо открыть Aurora IDE, нажать `New` в разделе `Welcome` -> `Projects`.
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw2.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw2.png"/>
</p>
После конфигурации проекта структура проекта должна выглядеть:
......@@ -208,7 +210,7 @@ kotlin {
Попробуем собрать проект, нажав 🔨 (слева в низу).
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw3.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw3.png"/>
</p>
Если проект собрался без ошибок, можно заняться объединением проектов.
......@@ -305,7 +307,7 @@ fun generateFibiWrapper(take: Int): List<Int> {
}
```
> Более подробно с информацией о поддержке можно ознакомиться [здесь](@todo).
> Более подробно с информацией о поддержке можно ознакомиться [здесь](./support.md).
Все необходимое для генерации привязок в наличии, запустим сборку библиотеки Multiplatform:
......@@ -412,7 +414,7 @@ CONFIG += ordered
Затем в Аврора IDE можно открыть файл `demo_kmp.pro` и указать необходимые цели сборки:
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw4.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw4.png"/>
</p>
#### Объединение проектов
......@@ -643,7 +645,7 @@ LIBS += -L$$PWD/../$${LIB_DEMO_KMP} -ldemo_kmp
Теперь ОС Аврора проект можно собрать:
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw5.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw5.png"/>
</p>
### 4: Выполнение метода
......@@ -703,7 +705,7 @@ int main(int argc, char *argv[])
После запуска приложения в логах можно наблюдать выполнение функции `generateFibiWrapper` привязок **QtBindings** из библиотеки Multiplatform:
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw6.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw6.png"/>
</p>
### 5: Использование Coroutines
......@@ -742,7 +744,7 @@ QObject::connect(fibiWrapperAsync, &QFutureWatcher<QList<int>>::finished, [=]()
```
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw7.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw7.png"/>
</p>
**QtBindings** позволяет завершать запросы и получать исключения из `suspend` функций.
......@@ -773,7 +775,7 @@ testCatchAsyncCancel->cancel();
```
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw8.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw8.png"/>
</p>
Для перехвата ошибки в функции `testCatchAsync` укажем параметр `isError`, как `true`, и воспользуемся `try/catch`:
......@@ -793,7 +795,7 @@ QObject::connect(testCatchAsyncError, &QFutureWatcher<bool>::canceled, [=]() {
```
<p>
<img class="preview2" src="/assets/images/qt_bindings/hw9.png"/>
<img class="preview2" src="/assets/images/qt-bindings/hw9.png"/>
</p>
#### Заключение
......@@ -803,5 +805,3 @@ QtBindings позволяют взаимодействовать с библио
Это серьезно упрощает разработку приложений без необходимости погружаться в низкоуровневую логику С-библиотеки.
Развитие поддержки Kotlin Multiplatform в ОС Аврора только начинается,
но уже можно писать приложения с использованием целей `linuxX64` и `linuxArm64` на ОС Аврора!
**Демонстрационный проект доступен [GitLab](@todo).**
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать