Please enable JavaScript.
Coggle requires JavaScript to display documents.
Особенности разработки мобильный приложений - Coggle Diagram
Особенности разработки мобильный приложений
Нативные и кроссплатформенные инструменты разработки
нативные средства разработки обеспечивают максимальную производительность и доступ к возможностям ОС
инструменты кроссплатформенной разработки
максимизируют общую базу кода на едином языке
программирования, чтобы продукт было проще разрабатывать
и поддерживать
используют существующие компетенции и специалистов для
реализации приложений на новых платформах.
инструменты для создания мобильных бизнес-приложений
Общая база кода
Использование существующих компетенций
и команды
понимание механизмов
работы ОС
набор дополнительных библиотек
и инструментов разработки
Связь нативного и кросплатформенного мира - мост(brid-ge)
Архитектура iOS/AndrOid и нативные APi
Главный принцип - деления кода
кроссплатформенную, живущую в виртуальном окружении имеющую ограниченный доступ к возможностям целевой
платформы через специальный мост
нативную, которая обеспечивает инициализацию приложения управление жизненным циклом ключевых объектов и имеет
полный доступ к системным API
Нативный iOS
основана на Mac OS X
OS стоит
воспринимать как полноценную Unix-систему без без командной
строки
Для iOS-разработчика выбор языков
ограничивается
Swift
Objective C
С/С++
подсистемы, которые
имеют значение для кроссплатформенных фреймворков
WebKit используется в гибридных приложениях на базе PhoneGap или аналогов для запуска приложений и фактически
выступает средой выполнения веб-приложений
JavaScript Core используется в ReactNative и аналогах для быстрого выполнения JS-кода и обмена данными между Native и JS
OpenGL ES используется в играх и приложениях на Qt/QML,
Flutter или аналогах для отрисовки интерфейса
UIKit отвечает за нативный пользовательский интерфейс
приложения, что актуально для ReactNative и Xamarin
Нативный Android
виртуальная машина Java (Java Virtual
Machine, JVM)
JVM выступает
посредником между пользовательским кодом и набором
системных API,доступных для Java-приложений
Поддержка языка Kotlin является надстройкой над той
инфраструктурой, которая доступна Java
в Android разработчику доступно сразу целых две
подсистемы
Native Development Kit (Android NDK)
С помощью NDK можно получить доступ к низкоуровневым
механизмам Android. Разработка ведется на С/С++.
Android SDK
При
использовании Android SDK разработчик оказывается внутри Java машины Dalvik (или Android Runtime, ART) и имеет только те
возможности, которые предоставляет Java API
Связующее звено JNI bridge
(Java Native Interface)
JNI снижает производительность приложений, когда
большой поток команд и данных передается через мост
дополнительные подсистемы
WebKit
(для PhoneGap)
OpenGL ES (для Qt, Flutter и игр)
View
System (грубо говоря,iOS UIKit; для ReactNative
и Xamarin)
Нативный Windows UWP
предоставляет механизмы
работы с JavaScript на базе движка Chakra, который
используется в Edge
система имеет WebView
Реализации OpenGL
ES нет, вместо нее доступен только DirectX.
обеспечивает все
необходимые механизмы для работы PhoneGap, Flutter,
ReactNative и Qt
Архитектуры кроссплатформенных
фреймворков
PhoneGap
Решения на базе PhoneGap используют WebView
PhoneGap позволяет разделять практически весь
код между платформами
используется
в популярном фреймворке Ionic,
Интерфейс приложений на основе WebView не является
нативным, а только делается похожим на него с помощью
HTML/CSS-стилей
При разработке приложений на PhoneGap требуется опыт
HTML, JavaScript, CSS, а также Objective C
Для передачи данных через мост их необходимо
сериализовать/десериализовать в Json
Для передачи сложных структур данных и классов между нативной частью и WebView их необходимо
сериализовать/десериализовать в формате JSON
ReactNative
дает
возможность использовать JavaScript для описания нативного
интерфейса и логики работы приложений
JSприложение берет управление в свои руки и при помощи ReactNative
начинает создавать нативные объекты и управлять ими из JavaScript.
позволяет осуществлять
обновление JS-кода без перезапуска приложения (hot reloading)
что из-за ограничений iOS (нет
возможности реализовать JIT) код JavaScript на лету интерпретируется,
а не компилируется.
Для передачи сложных структур данных и классов между нативной частью и WebView их необходимо
сериализовать/десериализовать в формате JSON
Также следует учитывать юность фреймворка – имеются узкие
места или ошибки
Qt
используется очень широко для разработки
embedded и десктопных приложений
Один из главных плюсов Qt – собственная эффективная
система отрисовки пользовательского интерфейса
для доступа к Java API
и управления приложением используется уже знакомый нам мост
JNI
Интерфейс приложений на основе Qt не является нативным,
а только делается похожим на него с помощью стилизации
Из плюсов – высокая производительность кода на C++
Flutter
к был впервые представлен корпорацией
Google только в 2015 году
С точки зрения архитектуры Flutter похож на
Qt – ядро этого фреймворка реализовано на C++,
и пользовательский интерфейс создается с помощью собственного
движка, не являясь нативным
на нативном уровне
приложение состоит из одного экрана показывающего
отрисованную движком Flutter картинку, и, как результат, имеет
очень высокую производительность (до 120 кадров в секунду).
Flutter берет на себя взаимодействие с пользователем
и отлавливает жесты, касания и другие события.
приложение для Flutter необходимо
разрабатывать на языке Dart
Для отрисовки пользовательского интерфейса в iOS/Android
Flutter использует высокропроизводительный графический движок
Skia, работающий поверх OpenGL
Flutter в качестве моста для интеграции с операционной системой использует так называемые каналы платформы (Platform
Channels)
Одним из плюсов Flutter является его легкая портируемость
на новые платформы
приложения на Flutter компилируются
в машинный код (AOT-компиляция)
В целом Flutter является простым и удобным инструментом
для создания мобильных приложений
Xamarin
Xamarin сейчас доступен в open source и появился в качестве
развития проекта Mono
Для взаимодействия с родными (для C) интерфейсами операционных систем в Mono используется механизм P/Invoke
Классический Xamarin предоставляет полный доступ
к нативным API
библиотеки подключаются через механизм
байндинга (Native Library Binding)
Можно также
использовать большое количество .NET-библиотек из NuGet.
предполагает использование JIT
по аналогии с Java
AOT (Ahead
Of Time) является обязательной в Xamarin.iOS
Для достижения большего результата необходимо
использовать Xamarin.Forms
Ключевым преимуществом классического Xamarin является
использование языка C#
Xamarin.Forms
решение,
позволяющее использовать единое описание UI и простые
механизмы доступа к платформенным фичам
Библиотека Xamarin.Forms работает поверх описанного ранее
классического Xamarin
(XF) решает своего рода задачу «последней
мили», предоставляя единый API
Общая (shared) часть на Xamarin.Forms обычно реализуется
в виде библиотеки
Платформенная часть
реализуется на базе Xamarin Classic и имеет полный доступ к API а также возможность подключения сторонних библиотек
Xamarin.Forms можно использовать в режиме Embedded
Xamarin.Forms еще
достаточно молодая и активно развивающаяся