Изучаването на принципите на взаимодействие убунту докосване и Android

Преди няколко месеца, аз бях ангажиран в пренасянето на Ubuntu Touch на платформата Allwinner A10,
в процеса на вземане на бележки за спомен. Сега, по мое мнение, те все още са уместни, докато Ubuntu Touch накрая се премества в графичния си Мир на сървъра и така нататък.

Стилът на представяне е далеч от техническа, но ако нямате нищо против,
Каня котка.

Какво е libhybris


libhybris - слой, който позволява да се зареди в Glibc потребителската библиотека от Bionic потребителското пространство, по-лети чрез замяна на някои от героите версии на Glibc. Казано по-просто, това решение позволява използването на патентована библиотека за Android е Linux-пространството. Naibólshaya полза, разбира се, възможността за използване на патентовани GPU-шофьори, сглобени от производителя само под Android.

Какво е SurfaceFlinger


SurfaceFlinger - роден услуга андроид композитен мениджър графични слоеве.

Ubuntu Touch


Ubuntu Touch Developer Preview се е базиран на Android, той заема необходимите услуги за работа с желязо. Преглед на отношенията може да се прочете тук - Ubuntu Touch Пренасянето или в бележка към OpenNet.

При нормална употреба Android JB 4.2 като основна операционна система. по-скоро CyagenMod-10.1 (хранилище под-CM - phablet.ubuntu.com/gitweb). От него се отстранява всичко, свързано с Dalvik и Java - оставяйки само родния си част, състояща се от системни услуги и HAL. AOSP 4.1 може да се използва, ако се желае. но да бъдат подготвени за адаптиране към родния API от 4,1, то не се покрива от всякаква документация, както и все по спецификация промените от освобождаващ.

UT компоненти, разположени в Chroot. употребяван samopisnaya полезност uchroot. откъс:

За среди Android-взаимодействие и Ubuntu Chroot-екологични механизми, участващи libhybris.

Ubuntu Touch Компоненти


Супа на различните компоненти може да се види в UT lanchpad-хранилища

фаблет-екип.
Ние сме заинтересовани от следните два компонента, които са отговорни за работата на платформата Android:
  • платформено-API
  • qtubuntu

Изтеглете най-новата версия на изходния код:
Ubuntu Platform API


Ubuntu платформа API - ниско ниво API за изпълнение на основни операции с използването на платформата (Android) функции.

Примери на методи:
  • ubuntu_application_ui_show_surface
  • ubuntu_application_ui_hide_surface
  • ubuntu_application_ui_move_surface_to
  • ubuntu_application_ui_resize_surface_to

От док документация файл / mainpage.md научат, че източникът на дърво платформа-API може да бъде разделена на две части:
  • включва - абстрактен платформа декларация API
  • платформа API изпълнение за Android (бих казал - - за Android 4.2) андроид

И единственото нещо, което може да се разчита на трета страна на разработчиците да работят с API - заглавията на
включва / Ubuntu / приложение директория. и всичко останало включва промяна във времето.

Да, това е така, ако се съди по андроид / hybris / Android.mk. платформа изпълнение API се събира като bibloteki libubuntu_application_api грешки връзката с родния libami андроид и се поставя в андроид потребителското пространство:

Без внимание остана директория платформено-API / SRC / андроид. гледам на него по-подробно. Ако се съди по досието на присъствие CMakeLists.txt. монтаж е бил тук за НЬс.

Има само един код на файла - ubuntu_application_api.cpp. търси в който ще видим:
- Процедурата за libhybris динамично да се зареждат символи от споделената-в празното от андроид потребителското пространство.

- прост мост към натоварване символи от libubuntu_application_api.so. който получава заедно с местните Android услуги, както и ние наскоро психически "събира" от андроида / hybris / Android.mk.

- куп опаковки за символи API прилагани в libubuntu_application_api.so.

Така че, за да се избегне объркване:
  • libubuntu_application_api.so - Библиотека под бионична, живее в андроид потребителското пространство;
  • libubuntu_application_api.so - Библиотека под НЬс, живее в Linux userpace (Chroot), героите на първия кораб през libhybris.

Разработчиците са решили да намалят ентропията на Вселената чрез създаване на едни и същи библиотеки име.
Ако се вгледате в тяхната дебат за именуване на компонентите се слеят-153874 дискусия. ушите увяхване.
Ubuntu Application мениджър


Най-платформа API / андроид / hybris в допълнение към прилагането на Ubuntu източници платформа API са ubuntuappmanager - услуга Ubuntu приложения, той живее в андроид потребителското пространство и съдейки по Android.mk. активно използва libubuntu_application_api и комуникира чрез Биндер IPC с Android услуги.

Тя решава един куп приложения и сесии за контрол, един бърз поглед на default_application_manager.h:


Разследвани с част UT, отговорен за взаимодействие между Ubuntu платформа API и Qt / QML приложения.

Ако не сте запознати с Qt Платформа за абстракция. След това, накратко, е способността да се абстрахира от платформата, на която Qt приложения се изпълняват чрез специално написани QPA-ина.

Най-QPA плъгин изпълнява основните методи като createPlatformWindow. и след това Qt приложение, когато тя иска да създаде прозорец с помощта createPlatformWindow символ на абстракция и включете мустаците не взриви, когато отидох там.

В този случай ние се занимаваме с щепсел QPA за използване с Ubuntu API приложение.

Ако се съди по ubuntu.pro на съдържанието. платформа линк от НЬс-версия libubuntu_application_api.so
Обърнете внимание на следния метод обаждания от набор от платформа API, използвани в integration.cc и window.cc:

Сега е ясно, че когато нашият Qt приложение иска да създаде прозорец, той ще доведе до метода на платформата QPA qubuntu - QUbuntuIntegration :: createPlatformWindow integration.cc на файла:

Търси QUbuntuWindow дизайнер в window.cc файл. Ние намираме предизвикателство метод QUbuntuWindow :: createWindow ():

Това е изключително олекотена код, но смисълът е ясен - за обаждания до платформа програмен интерфейс на Ubuntu. които изпълнява в НЬс-версия libubuntu_application_api.so. че, всъщност, е мост към libubuntu_application_api.so на бионично-версия. код, който се намира в платформата API / Android.

Остава отворен матрьошка и да намерят колко добре изпълнява Ubuntu :: заявление :: UI :: сесия и, съответно, Ubuntu :: заявление :: UI :: Surface. И те се прилагат в този файл - ubuntu_application_api_for_hybris.cpp:

Превърта, намерете UbuntuSurface:

Получаваме обект от тип андроид :: SurfaceControl. което е резултат от обажда андроид :: SurfaceComposerClient () -> createSurface ().
Чрез него минават всички искания към андроид :: SurfaceComposerClient (рамки / роден / LIBS / GUI / Surface.cpp), като преоразмеряване, преместване, промяна на реда на слоя и така нататък.

Връщайки се назад по веригата, ние разбираме това, което наистина се случва, когато започне следващата Qt прилагането платформа QPA Ubuntu.

заключение


В този момент трябва да се спре, защото, по мое мнение, разглеждане на принципите на взаимодействие на Ubuntu Touch и Android е самодостатъчна. Други аргументи, може да се наложи да отида в изолация от всички по-горе. Nerasmotrennymi имате въпроси и взаимодействие qmlscene ubuntuappmanager. принцип контрол върху въвеждането на използване SurfaceFlinger InputDispatcher услуги и други въпроси от ъглите на този prostoronoy нишки. Но това е друга история.