Привет, Хабр! Меня зовут Сергей Лавров (@lavs). Я разрабатываю мобильные приложения под Android и iOS, преподаю IT в двух университетах и уже 15 лет изучаю новые технологии, а также языки программирования, которых знаю более десятка. В этот раз я выступлю в непривычной для себя роли обзорщика: меня попросили посмотреть, чем может быть интересен для разработчика планшет Huawei MatePad 11. Что ж, challenge accepted: я проверю, можно ли на нём программировать; разберусь, что из себя представляет новая HarmonyOS; и попробую написать для неё приложение.
Пятнадцать лет назад, когда я только начинал программировать, у меня появилась мечта: я хотел писать программы на устройстве, которое по размеру было бы как телефон.
Сначала через мои руки прошли Nokia 9500 и Nokia E90 — первые коммуникаторы с полноразмерной физической клавиатурой и возможностью редактировать системные файлы прямо на устройстве. Им на смену пришли Samsung Note, у которых был стилус, тоже позволявший что-нибудь написать. Затем появились планшеты, но виртуальная клавиатура меня не вдохновляла.
И вот теперь мне на обзор попал Huawei MatePad 11 с физической клавиатурой и стилусом. Естественно, я сразу задался вопросом: получится ли на нём программировать? А ещё интересно было узнать, что из себя представляет новая операционная система от Huawei.
Итак, что нам предлагает Huawei?
Обычно любой обзор начинается с распаковки — так зачем нарушать традицию?
А что же есть полезного в MatePad 11 для разработчика?
У Huawei MatePad 11 есть и физическая клавиатура, и стилус — так почему бы не реализовать свою мечту пятнадцатилетней давности и не попрограммировать на нём?
К сожалению, полноценных IDE на этот планшет я не нашёл: в AppGallery находятся только простые приложения для обучения программированию и удалённые рабочие столы:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3035-6461-4532-b137-316139373931__img_20210729_083606.jpg)
Результаты поиска в Petal Search и на сервисе APKPure оказались интереснее:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6130-3735-4764-b366-656338653861__img_20210729_083620.jpg)
Здесь я сразу нашёл много Android-приложений на нужную тематику. Среди них есть несколько приложений по изучению программирования, в которых можно писать код — SoloLearn, Mimo, Programming Hub, StartAndroid, Programming Hero — но все они представлены в виде XAPK и их почему-то не удалось установить (возможно, надо ставить отдельное приложение для установки программ из контейнеров XAPK).
Ещё нашёл приложение Dcoder, которое, судя по описанию, позволяет писать на любом из 30 доступных языков программирования. Оно оказалось в виде APK и успешно установилось, но потребовало регистрации или входа через Google/Facebook. Ни первое, ни второе у меня не получилось, так как сервисы Google оказались на планшете недоступны, а это приложение, видимо, активно их использует.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3137-3034-4435-b830-656166363132__img_20210729_083423.jpg)
Старый добрый JavaRush, через который я когда-то изучал Java
Также в APKPure нашлось приложение JavaRush (JR): оно тоже было в APK-формате, а потому без проблем установилось и запустилось. Я даже смог написать пару программ в заданиях, и они успешно выполнились:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3338-6261-4731-b732-623965313632__img_20210729_084417.jpg)
Вспомнил молодость и прошёл пару заданий в JavaRush
Понятное дело, что можно было открыть какие-нибудь онлайн-IDE (например, ideone.com или IDE от GitHub), но мне хотелось найти именно offline-инструменты, а их, как оказалось, очень мало.
В целом на таком планшете всё-таки удобно учиться программированию: необходимые приложения для этого есть, а малые габариты устройства окажутся полезными, например, в дороге, если вдруг захочется с пользой провести полтора-два часа. Также MatePad 11 можно использовать в качестве запасного устройства для удалённой работы: например когда надо экстренно подключиться с морского пляжа. На этом самая сложная часть заканчивается, и теперь я с чистой совестью могу посмотреть, что там у этого планшета под капотом.
HarmonyOS: ещё +1 к списку ОС, которые я изучал
Сейчас я, пожалуй, перестану вести себя как простой пользователь. Я всегда интересовался различными операционными системами: Windows от 95 до 10, macOS от Leopard 10.5 до Big Sur 11.5; пробовал порядка 10 разновидностей Linux; когда-то разбирался с Windows for Mobile/Windows 8 для телефонов и с системой Maemo (которая потом превратилась в MeeGo) от Nokia; а сейчас активно работаю с Android и iOS. Естественно, я не мог не ознакомиться с ОС, стоящей в этом планшете.
HarmonyOS построена на базе Android Open Source Project а значит, имеет схожую с Android архитектуру, состоящую из четырёх слоёв:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3834-6633-4334-a561-353931373965__untitled.png)
- Kernel Layer состоит из мультиядра, которое поддерживает различные виды устройств и предоставляет базовые функции (многозадачность, управление памятью, файловая система, сеть и периферия), и подсистемы драйверов, которые нужны для поддержки экосистемы внешних устройств.
- System Service Layer — слой базовых сервисов HarmonyOS.
- Framework Layer — слой API для работы с сервисами HarmonyOS как на C/C++, так и на Java/JS.
- Application Layer — слой системных и сторонних приложений.
Приложения в HarmonyOS
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6462-3535-4362-b436-356664663266__untitled-1.png)
Состав типичного приложения для HarmonyOS
Приложения здесь двух видов:
- Обычные приложения, требующие установки.
- Atomic Services, не требующие установки и предоставляющие какие-либо сервисы.
В состав каждого приложения входит один или несколько файлов HarmonyOS Ability Package (HAP), а также файл pack.info, описывающий параметры каждого пакета HAP. Пакет HAP содержит код, ресурсы, сторонние библиотеки и файлы конфигурации config.json.
HAP-файлы бывают двух типов:
- Entity — главный модуль приложения, который может быть только один под конкретный вид устройств; его можно установить и запустить.
- Feature — функциональные модули; их может быть несколько или вообще не быть. Запустить можно только те файлы Feature, которые содержат Abilities.
Abilities — это абстракции возможностей, которые может предоставить приложение. В каждом приложении могут использоваться Feature Abilities (FAs), предоставляющие UI, и Particle Abilities (PAs) без UI, обеспечивающие фоновую обработку и доступ к данным.
IDE и документация HarmonyOS
Для программирования под HarmonyOS переходим на официальный сайт, доступный на английском и китайском языках. Там можно найти документацию и руководство для дизайнеров, а также скачать IDE. Среда разработки называется DevEco Studio; она сделана на базе продукта фирмы JetBrains, как, например, и Android Studio.
Я надеялся, что установить её удастся прямо на HarmonyOS, но оказалось, что ставится эта среда только на Windows и macOS, что тоже неплохо. Поставил на обе системы. Под macOS она работает отлично, а вот под Windows возникли проблемы с HarmonyOS SDK — буду разбираться; возможно, что-то не так настроил.
Программирование под HarmonyOS
Под этой системой можно писать на двух языках: Java и JS. Документация в целом удобная, понятная, с подробным описанием технологий и с картинками, а иногда и с видео. Тем, кто писал под Android, многие элементы тут будут знакомы, хоть и выглядят они немного по-другому. Разработка на JS сделана аналогично React Native и основана на Node. js и npm.
При создании проекта нужно выбрать один из предложенных шаблонов. На каждом шаблоне указано, с какими видами устройств он совместим (телефон, планшет, телевизор, часы, автомобиль) и на каком он языке (Java или JS). После выбора шаблона указываются тип проекта (приложение или сервис), название, расположение, версия API, поддерживаемые виды устройств:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6436-3732-4135-b031-326662343337__21.png)
На этом настойки закончились. Осталось подождать, пока подготовится проект, и можно начинать программировать:
Я не стал ничего писать и решил сразу запустить проект в эмуляторе. На macOS установлены сразу два эмулятора: часы (Huawei Lite Wearable) и телевизор (Huawei Smart Vision). Но ничего не вышло: оказалось, что они поддерживают только так называемые Lite-проекты.
Тестирование приложений и профиль разработчика
Я решил добавить какое-нибудь ещё устройство для запуска приложения, раз с часами и телевизором не получилось. Но чтобы даже просто увидеть список доступных устройств, нужно авторизоваться в сервисах Huawei:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3464-6634-4666-a335-383737323637__41.png)
Я так и сделал, но оказалось, что требуется подтверждённый профиль разработчика. Возможно, эмуляторы предоставляются в виде сервиса, поэтому и надо логиниться и подключаться к серверам Huawei.
Я зарегистрировал профиль разработчика, буду ждать подтверждения. Когда оно придёт, попробую создать какое-нибудь приложение по документации и запустить его на эмуляторе, а может, и на самом устройстве с HarmonyOS, и напишу несколько статей по этой теме. Пока что две попытки подтверждения не увенчались успехом, так как для верификации требуется, помимо прочего, именная банковская карта, остаточный срок действия которой составляет не менее полугода с момента регистрации профиля разработчика.
Программирование без профиля разработчика
Без верифицированного профиля можно создать и протестировать только так называемые Lite-приложения, которые запускаются на предоставленных эмуляторах часов (Huawei Lite Wearable) и телевизора (Huawei Smart Vision).
Lite-приложения имеют ряд ограничений, например, пишутся только на JS, поэтому шаблон выбирается только с приставкой [Lite] и оно должно быть на JS:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6630-6664-4432-b235-633736386338__01.png)
Выбрал [Lite]Empty Ability (JS) — в итоге получился «Hello World» для часов:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3431-6137-4630-b935-333437643363__03.png)
Но хотелось создать что-то более полезное, поэтому сделал приложение, имитирующее бросок игральной кости и выдающее случайное число от 1 до 6:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild3962-3964-4633-a666-313933353332__06.png)
Lite-приложения (или, может, только эмулятор?) поддерживают всего два языка: английский и китайский. Число доступных размеров шрифтов также ограничено: поддерживаются только 30px и 38px.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6532-3338-4236-b839-343536666661__08.png)
Собрать Lite-приложение можно как в виде HAP, так и в виде APK. Но если с HAP никаких проблем не возникло — всё сразу собралось, — то в случае с APK потребовались дополнительные настройки для подписи файла:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6431-3131-4131-b136-323161383365__09.png)
А эти настройки доступны только тем, у кого есть профиль разработчика, так что собрать APK мне пока что так и не удалось:
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/21249656/tild6262-6561-4362-a538-616261633435__10.png)
Кому интересно, код этого приложения можно посмотреть на моём GitHub.
В целом мне HarmonyOS (да и сам планшет) понравились: такой Android на стероидах в красивой упаковке, привычный и удобный. Единственная разница, которая ощущается при использовании, — отсутствие встроенных сервисов Google. Для некоторых приложений это может быть критичным. Также лично у меня были проблемы с интеграцией с различными устройствами, но, думаю, это решается дополнительными тонкими настройками, либо будет доработано в следующих обновлениях.
Киллер-фичей планшета могла бы стать установка IDE «из коробки» — тогда бы можно было программировать на HarmonyOS без Windows/macOS. В плане разработки мне понравилась возможность программировать на Java или JS в привычной для Android-разработчика IDE. Жаль, что для создания APK и тестирования на эмуляторах требуется создание профиля разработчика (который я пока так и не смог зарегистрировать), но я понимаю Huawei: их стратегия в чём-то похожа на стратегию Apple. В любом случае это не мешает создавать и адаптировать приложения для HarmonyOS, а порог входа разработчики сделали низким, поэтому присмотреться к этой системе явно стоит.