Изучаването на принципите на взаимодействие убунту докосване и 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 нишки. Но това е друга история.