Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Разработка кроссплатформенного
фреймворка на С++ для мобильных
платформ
Владимир Солдатов
Старший разработчик, SAPRUN
Единая	
кодовая	база	
ГОСТ	из	
коробки	
Работаете	
с	SAP
Agenda
•  Мотивы
•  Выбор технологий, почему C++
•  Что получилось, Workflow
•  Плюсы и минусы, интересные моменты
SAP	
МП	
iOS	App	
SQLite	Eclipse	
Первая версия
Первая версия: недостатки
Не	хватало	
производи-
тельности,		
REST	workaround	
ГОСТ	
прикручивается	
костылями	
Неудобно	и...
“Своя” мобильная платформа
Базовые требования к фреймворку
Возможность	разработки	
как	нативных,	так	и	
кроссплатформенных	
приложений	
Шифрование	
Г...
Какие задачи должен решать фреймворк
Аутентификация,	
сетевое	
взаимодействие	
поверх	HTTP	—	
GET/POST	
Сохранение	
локаль...
Выбор технологий
Технология Нативные и кросс
Одна кодовая
база
Возможность
заглянуть под
капот
С++
Xamarin
React Native
Co...
Компилируемая экзотика,
Go on mobile & Rust
Что получилось
JS
Native logs,
callbacks, ORM
C++ core:
сетевой обмен (дельты, докачка, push
messages), многопоточность, р...
Cordova уровень
Native уровень
С++ уровень
Инструменты
попытка убить
трех зайцев
Инструменты
+ Добавили
попытка убить
трех зайцев
target
Инструменты
clang
+ Добавили
попытка убить
трех зайцев
target
Генератор build-скриптов
CMakeLists.txt	
Makefile	
.xcodeproj	
.sln
Отладка
Изменение	в	
коде	
Linux	binary	
CLion	
Отладка	
Релизим,	если	
все	ОК,	иначе	
еще	одна	
итерация
Сборка бинарников
Makefile	 clang	
Linux	
binary	
.xcodeproj	 clang	 iOS	binary	
.sln	 clang	
Windows	
binary	
Android.mk	 ...
Профит!
80%	разработки	и	
тестирования	не	
требует	мобильного	
устройства	
Code	reuse	
на	бэкенде	
(python)	
Jenkins
20 мобильных процентов
Performance	
Callbacks	
Logs	
ORM
Сложности
Кастомные билдовые скрипты под
мобильные таргеты для 3d-party
библиотек: mqtt, libcurl, boost…
Сложности
Нет отлаженных процессов и хороших
средств разработки для написания и
отладки кода на стыке технологий (C++
Java...
Реализованные интересные моменты
Собственный SQLite encryption
codec, который мы подружили с
android.database.sqlite.SQLit...
Реализованные интересные моменты
TableStream – потоковый кодер/
декодер для передачи таблиц БД
как замена JSON
Реализованные интересные моменты
Шардинг SQLite для
распараллеливания записи
в БД
Выводы
Процесс	
разработки	
сложнее,	
чем	
нативных	
решений	
Для	ряда	задач	
реально	единая	
кодовая	база,	
которую	можно...
Полезные ссылки
•  SQLite Android bindings
https://www.sqlite.org/android/doc/trunk/www/index.wiki
•  Boost for android
ht...
Q&A
vladimir.soldatov@saprun.com
skype: mrsoldatov
Upcoming SlideShare
Loading in …5
×

Разработка кроссплатформенного фреймворка на С++ для мобильных платформ / Владимир Солдатов, (САПРАН)

418 views

Published on

В процессе разработки нашего Enterprise-ready продукта HyperHive — http://eigenmethod.com/products/hh/ (бренд EigenMethod создан для продвижения продукта на Запад, не удивляйтесь другому домену) мы столкнулись с необходимостью реализации ряда задач на нескольких платформах: iOS, Android, Cordova (Android и iOS), а в перспективе и под Windows для мобильных устройств.

Был вариант реализации под каждую платформу на родных языках, но мы выбрали путь создания кроссплатформенного фреймворка на C++ с последующим его портированием под все целевые платформы.

Функционал фреймворка:
1. Параллельные потоки загрузки данных с сервера и записи в базу (sqlite) и передачи на сервер в рабочих потоках (без блокирования UI).
2. Поддержка Дельта-обновлений при передаче данных (пересылается только разность между двумя версиями данных).
3. Шифрование трафика и базы данных алгоритмами ГОСТ и RSA.
4. Сжатие трафика.
5. Аутентификация и авторизация на сервере, поддержка сессий.
6. Обработка push-уведомлений (MQTT).
7. API для мобильных приложений для предоставления данных, в том числе в оффлайн-режиме.
8. Логирование действий мобильного клиента на сервере.

С задачей успешно справились, но, так как задача нетривиальна и мало освещена в сети, были сложности — как технические, так и в подходе к разработке.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Разработка кроссплатформенного фреймворка на С++ для мобильных платформ / Владимир Солдатов, (САПРАН)

  1. 1. Разработка кроссплатформенного фреймворка на С++ для мобильных платформ Владимир Солдатов Старший разработчик, SAPRUN
  2. 2. Единая кодовая база ГОСТ из коробки Работаете с SAP
  3. 3. Agenda •  Мотивы •  Выбор технологий, почему C++ •  Что получилось, Workflow •  Плюсы и минусы, интересные моменты
  4. 4. SAP МП iOS App SQLite Eclipse Первая версия
  5. 5. Первая версия: недостатки Не хватало производи- тельности, REST workaround ГОСТ прикручивается костылями Неудобно изменять модели данных в мобильной платформе
  6. 6. “Своя” мобильная платформа
  7. 7. Базовые требования к фреймворку Возможность разработки как нативных, так и кроссплатформенных приложений Шифрование ГОСТ для канала и локальной БД Производи- тельность
  8. 8. Какие задачи должен решать фреймворк Аутентификация, сетевое взаимодействие поверх HTTP — GET/POST Сохранение локальной копии БД в SQLite. Данных много! Загрузка только дельт обновлений Параллельные потоки загрузки данных, обновлений Прием push уведомлений Шифрование локальной БД и канала
  9. 9. Выбор технологий Технология Нативные и кросс Одна кодовая база Возможность заглянуть под капот С++ Xamarin React Native Cordova Native
  10. 10. Компилируемая экзотика, Go on mobile & Rust
  11. 11. Что получилось JS Native logs, callbacks, ORM C++ core: сетевой обмен (дельты, докачка, push messages), многопоточность, работа с БД, шифрование, бизнес-логика
  12. 12. Cordova уровень
  13. 13. Native уровень
  14. 14. С++ уровень
  15. 15. Инструменты попытка убить трех зайцев
  16. 16. Инструменты + Добавили попытка убить трех зайцев target
  17. 17. Инструменты clang + Добавили попытка убить трех зайцев target
  18. 18. Генератор build-скриптов CMakeLists.txt Makefile .xcodeproj .sln
  19. 19. Отладка Изменение в коде Linux binary CLion Отладка Релизим, если все ОК, иначе еще одна итерация
  20. 20. Сборка бинарников Makefile clang Linux binary .xcodeproj clang iOS binary .sln clang Windows binary Android.mk clang Android binary
  21. 21. Профит! 80% разработки и тестирования не требует мобильного устройства Code reuse на бэкенде (python) Jenkins
  22. 22. 20 мобильных процентов Performance Callbacks Logs ORM
  23. 23. Сложности Кастомные билдовые скрипты под мобильные таргеты для 3d-party библиотек: mqtt, libcurl, boost…
  24. 24. Сложности Нет отлаженных процессов и хороших средств разработки для написания и отладки кода на стыке технологий (C++ Java/ObjC JS) Кастомные билдовые скрипты под мобильные таргеты для 3d-party библиотек: mqtt, libcurl, boost…
  25. 25. Реализованные интересные моменты Собственный SQLite encryption codec, который мы подружили с android.database.sqlite.SQLiteDatabase
  26. 26. Реализованные интересные моменты TableStream – потоковый кодер/ декодер для передачи таблиц БД как замена JSON
  27. 27. Реализованные интересные моменты Шардинг SQLite для распараллеливания записи в БД
  28. 28. Выводы Процесс разработки сложнее, чем нативных решений Для ряда задач реально единая кодовая база, которую можно тестировать без мобильного устройства Можно выжать больше производи- тельности Можно «залезать под капот» и дорабатывать существующие решения
  29. 29. Полезные ссылки •  SQLite Android bindings https://www.sqlite.org/android/doc/trunk/www/index.wiki •  Boost for android https://github.com/moritz-wundke/Boost-for-Android •  CMake для Android NDK https://github.com/taka-no-me/android-cmake •  Платформа HyperHive http://eigenmethod.com/products/hh/
  30. 30. Q&A vladimir.soldatov@saprun.com skype: mrsoldatov

×