Мобильная кроссплатформенная разработка.
Рынок мобильных операционных систем:
- Android + iOS: 99% рынка
- Android: ~2.5 млн. приложений в Google Play Store
- iOS: ~1.8 млн. приложений в App Store
- Еще варианты: Windows Phone, Аврора
- Мобильные телефоны на основе ОС Linux: PinePhone
- Рассмотрим: android + iOS.
Отдельные нативные приложения
- Android: Java, Kotlin.
- iOS: Objective-C, Swift.
- Доступ к функциям ОС "из коробки" (календарь, файловая система, контакты и др.).
- Высокая производительность.
- "Родной" интерфейс.
Отдельные нативные приложения: недостатки.
- Две кодовые базы: поддерживать две команды разработчиков.
- Дорого.
- Необходимо "выравнивать" приложения по функциональности.
Прогрессивное веб-приложение.
- Трансформация сайта в веб-приложение.
- Обычно на отдельном домене (определение по User-Agent).
- Не нужно устанавливать отдельное приложение.
- Нет доступа к функциям ОС.
- Нет возможности использовать другие приложения (например, для входа).
- Браузер для ОС достаточно много потребляет энергии.
Общая архитектура.
Соrdova.
- Ресурс: https://cordova.apache.org/.
- Появился в 2009.
- Наследовался от PhoneGap.
- Открытая лицензия.
- Поддержка платформ: android, iOS, Windows Phone.
- Технологии: HTML, CSS, JS
- Любой UI фреймворк: React, Angular, Vue, jQuery.
- Рендеринг с помощью WebView.
- Ядро и набор плагинов.
Соrdova. Архитектурная схема.
Соrdova. Первое приложение.
:> sudo npm install -g cordova
:> cordova create MyApp
:> cd MyApp
:> ls
config.xml package.json www
:> cordova platform
Installed platforms:
Available platforms:
android ^9.0.0
browser ^6.0.0
electron ^1.0.0
> cordova platform add browser
> cordova run browser
startPage = index.html
Static file server running @ http://localhost:8000/index.html
CTRL + C to shut down
Соrdova. Как выглядит приложение.
Набор UI компонент.
- Сверстанные на HTML/JS/CSS элементы под платформу
- Пример: Onsen UI
Xamarin.
- Ресурс: https://dotnet.microsoft.com/apps/xamarin
- Язык разработки: C#.
- Платформы: Android, iOS, Windows Phone
- UI отдельный для каждой платформы.
- Достигается возможность сделать максимально нативно выглядящее приложение.
- Бизнес логика - общая.
- Разработка может идти на macOS, Windows.
Xamarin. Архитектура.
Native script.
- Ресурс: https://nativescript.org/
- Появился в 2014.
- Платформы: android, iOS
- Веб-фрейморки: Angular, Vue.
- Готовый набор UI компонент.
- Плагин для VS Code.
Native script. Архитектура.
React native.
- Ресурс: https://reactnative.dev/
- Появился в 2015.
- Веб-фрейморк: React (JSX).
- Могут быть отличия ios/android.
- Поддерживается механизм hot-reload.
React native. Архитектура.
React native. Пример.
import React from 'react';
import { Text, View } from 'react-native';
const YourApp = () => {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>
Some text
</Text>
</View>
);
}
export default YourApp;
Flutter.
- Ресурс: https://flutter.dev
- Первый релиз 2018 год.
- Язык программирования Dart (компилируется в машинный код).
- Набор виджетов: Material для Android и Cupertino для iOS.
- Взаимодействие с платформой через Platform Channels.
- Свой CI/CD: https://codemagic.io/
- Считается на данный момент самым перспективным.
Flutter. Архитектура.
Flutter. Dart.
- Ресурс: https://dart.dev
- АОТ-компиляция. В результате имеем АРМ или х86 код с высоким быстродействием на пользовательском устройстве.
- JIT-компиляция. Дает возможность запускать проект в виртуальной машине на эмуляторе и реализовать hot reload длительностью менее одной секунды с сохранением состояния приложения.
- Строгая система типов. Позволяет забыть о выборе между TS и Flow.
- Tree shaking compiler. При сборке приложения удаляет весь неиспользуемый код.
- Generational garbage collection. Быстрое выделение и очистка памяти.
Dart. Архитектура.
Dart. Пример.
import 'package:flutter/material.dart';
void main() async {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: MyApp(),
),
),
);
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
Flutter. "За".
- Собственный рендеринг, независимость от ОЕМ-виджетов и богатый инструментарий разработчика существенно ускоряет написание кода и поддержку двух платформ одновременно.
- Web и desktop — в активной разработке.
- За счет pixel perfect rendering, тестирование и устранение платформо-зависимых багов и нюансов верстки будет проходить существенно быстрее.
- Быстродействие.
- Одинаковый UI на всех устройствах. При необходимости написать приложение с уникальным дизайном, который должен быть одинаковым на двух мобильных платформах.
Flutter. "Против".
- Молодость платформы.
- Dart добавляет накладные затраты на внедрение Flutter за счет необходимости изучать и вникать в новый язык.
- В случае с React Native, они могут быть подключены в проект достаточно быстро. Во Flutter все новые появляющиеся на стороне платформы элементы UI должны быть заново отрисованы.
- Отсутствие вакансий на рынке.