Upload
codefest
View
811
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
Marmalade SDKЧто под капотом?
Marmalade SDK открытый и гибкий
Черный ящик
Альтернативные движки
Доступны плагины с закрытым кодом
Marmalade System
Marmalade
Доступны плагины с открытым кодом
Модули Marmalade
Модули с открытым кодом
Программный стек Marmalade: Устройства
Типичное место, откуда обычно разработчик без Marmalade SDK начинает строить приложениеВсе устрйства/ОС разные и требуют от разработчика редизайна приложения для каждой конкретной платформы
ОСДрайверыOpenGL ESУстройство
Marmalade Система
Быстрый и эффективный доступ к API ОС, управление памятью и графической подсистемой устройства.Одинаковый набор API на всех поддерживаемых платформах
Графика Кросс платформ. APIMarmaladeСистема
ОСДрайверыOpenGL ESУстройство
Стандартные C/C++ библиотеки
Подавляющее большинство существующего С/С++ кода портируется сразу, с минимальными изменениями или без них вообще
C/C++ стандартные библиотеки
Графика Кросс платформ. API
ОСДрайверыOpenGL ESУстройство
Графика Кросс платформ. APIMarmaladeСистема
Модули Marmalade Studio
Marmalade Studio предоставляет стандартный набор модулей для быстрой разработки приложений
“Marmalade Studio”
C/C++ стандартные библиотеки
ОСДрайверыOpenGL ESУстройство
Графика Кросс платформ. APIMarmaladeСистема
Интеграция модулей
Выбирайте среди разнообразия сторонних модулей которые работают с Marmalade прямо «из коробки»
Другие модули“Marmalade Studio”
C/C++ стандартные библиотеки
ОСДрайверыOpenGL ESУстройство
Графика Кросс платформ. APIMarmaladeСистема
РасширенияПолучайте доступ к платформенно зависимым функциям и коду, используя расширения MarmaladeВыбирайте из набора предустановленных расширений или создавайте свои собственные используя EDK
Платформ. расширения
Другие модули“Marmalade Studio”
C/C++ стандартные библиотеки
ОСДрайверыOpenGL ESУстройство
Графика Кросс платформ. APIMarmaladeСистема
Ваше приложениеИспользовать модули Marmalade Studio, API партнерских проектов или получить доступ к низкоуровневым APIs напрямую – ваш выбор
Платформ. расширения
Код вашего приложения
Другие модули“Marmalade Studio”
C/C++ стандартные библиотеки
ОСДрайверыOpenGL ESУстройство
Графика Кросс платформ. APIMarmaladeСистема
Концепции Marmalade: загрузчикГрафикаЗагрузчик Кросс-платформенные API
Платформенно зависимый загрузчик который компонуется с вашим приложением во время упаковки, чтобы создать платформенно зависимый установочный пакет
Хранит платформенно зависимые реализации системы Marmalade для стандартного набора низкоуровневых API
Приложения получают доступ к API напрямую или через набор высокоуровневых модулей
Совсем крошечный дополнительный объем к вашему приложению, обычно около 400kb
Концепции Marmalade: бинарник приложения
Кросс-платформенный, ОС-независимый пакетСодержит ваш код и дополнительные модулиКомпилируется в нативные инструкции CPUНеиспользуемый функционал выбрасывается. Приложение зря не раздуваетсяПодтверждает, что 97% кода приложения – это идентичные инструкции CPU на всех устройствахКомпонуется с платформенно зависимым загрузчиком на этапе упаковки для создания готового пакета приложенияMarmalade поддерживает сборку под ARM, x86 или MIPS
Бинарник приложения (s3e/s86 файл)
Код вашего приложения
Другие модули“Marmalade Studio”
C/C++ std lib
Концепции Marmalade: Упаковка
Нативное приложение(.ipa .apk .bar etc.)
Ваши ресурсы
Используйте инструмент упаковки чтобы скомпоновать бинарник вашего приложения, ресурсы и платформенно зависимый загрузчик для каждой из целевых платформ
Бинарник приложения (s3e/s86 файл)
Код вашего приложения
Другие модули“Marmalade Studio”
C/C++ std lib
Платформ. расширенияГрафика Кросс платформ. API
MarmaladeСистема
Упаковка проекта в Marmalade SDK
iOS Loader
iOS App
GCC
.mkb проект
бинарник
SCons
Android App
Android Loader
Симулятор
BlackBerry App
Загрузчик BlackBerry
Инструмент упаковки
MKB
IDE
MKB – Файл проекта Marmalade
Система MKB – генерирует рабочий проект для IDE из MKB файлов
IDE – Visual Studio или Xcode
Scons – система сборки проектов без участия IDE
GCC – Типичный компилятор для сборки под ARM, другие компиляторы используются для прочих архитектур
Бинарник – собранное приложение, может запускаться в симуляторе или упаковываться для устройства
Ваше приложение: структура
Операционная система
Платформенная реализация
Стандартные API
Код приложения
C++ библиотеки
LoadImage(const char* path)
libpng
Platform fopen
LoadImage(const char* path)
libpng
Custom fopen
Platform fopen
Проблема: путь к файлу должен меняться в зависимости от платформы
Подмена функция в std lib
LoadImage
App Code
fopennewlib
_openglue
fopenOS
Поддержка 19 системных вызовов_exitcloseenvironexecveforkfstat
getpidisattykilllinklseekopen
readsbrkstattimesunlinkwait
write
Ошибка линковщика: символ ‘fopen’ определен несколько раз
Прелинковка библиотек
Перемещаемая линковка • ld –r
Контроль видимости символов• -B reduce
Вторая линковка к системным библиотекам
prelink
link
Исполнимый файл
Код приложения libpng
newlib
Библиотеки приложения
Платформенные библиотеки
Системные бибилотеки
Отделяем бинарник
• Бинарник приложения полностью платформенно независим
• Подключается к плаформенным библиотекам на этапе выполнения
• Виртуальное окружение без дополнительных затрат производительности
Загрузчик
Динамическая подгрузка
кода
Библиотека приложения
Динамическая загрузка кода
Бинарник формата ELF (Executable and Linkable Format)
Global offset table
Procedure linkage table
.dysym .dynstr
Richer apps are
Marmalade200 St. John Street,London, EC1V 4RNUnited Kingdome: [email protected]
www.madewithmarmalade.com