Программирование и разработка – направления, которые являются крайне перспективными для изучения и трудоустройства. Огромным спросом стали пользоваться специалисты разработки мобильных приложений, а также кроссплатформенных утилит.
В данной статье будет рассказано о том, как создать собственную «универсальную» программу, что собой представляет мобильная разработка, описаны ее преимущества и недостатки. Поговорим про Flutter, React Native и не только.
Разработка и программирование – разница
Сначала стоит разобраться с такими двумя схожими между собой понятиями, как «разработка» и «программирование». Многие описывают с их помощью одни и те же операции, но это не совсем правильно.
Запомнить необходимо следующее:
- Программирование – решение при помощи написания кода приложения строго установленной задачи. Программер будет специализироваться на некоторых целях. Он занимается решением конкретных проблем.
- Разработка – полноценное создание программного обеспечения «с нуля». Разработчик выступает в качестве мастера-универсала. Он хорошо разбирается в архитектуре утилит, программном коде и тестинге. Сопровождает проект от самого зарождения до непосредственного релиза. Будет обеспечивать взаимодействие между членами команды.
Разработка – это более широкое понятие. Именно его правильно применять относительно создания кроссплатформенных утилит «с нуля».
О кроссплатформенности
Кроссплатформенная мобильная разработка – это способность программного обеспечения функционировать с несколькими аппаратными платформами или операционными системами. Пример – стабильная работа на iOS и Android, а также Windows Phone.
Кроссплатформенность (межплатформенность) обеспечивается за счет:
- высокоуровневых языков программирования;
- сред разработки и выполнения, которые поддерживают условную компиляцию;
- обработки кода на разного рода платформах.
Типичный вариант кроссплатформенной утилиты – это софт, который будет одинаково хорошо работать на Linux и Windows одновременно.
Суть заключается в том, что код приложения будет переводиться в нативную разработку. На язык, понятный конкретному устройству. За счет такого подхода программа начнет взаимодействовать с установленной операционной системой.
Стоит обратить внимание на то, что нативные утилиты, в отличие от кроссплатформенных «собратьев», будут изначально составляться для конкретной операционной системы.
Преимущества и недостатки
Нативные приложения с развитием IT-технологий начали потихоньку устаревать. Поэтому программисты и разработчики стараются создавать кроссплатформенные варианты кодификаций. У них есть как плюсы, так и минусы. Все эти моменты необходимо изучить до того, как программер начнет заниматься непосредственным созданием проекта.
Плюсы
У разработки кроссплатформенных приложений есть следующие сильные стороны:
- Расширение пользовательской базы. Приложение появляется сразу в нескольких магазинах. Это способствует более быстрому распространению софта.
- Отсутствие необходимости найма нескольких сотрудников для перевода утилиты на разные платформы. Достаточно связаться с разработчиками-кроссплатформерами. Они смогут сразу сделать универсальный контент.
- Ускорение процесса разработки. Связано это с тем, что перед релизом не придется дорабатывать кодификацию и проводить ее детальный перевод под другую операционную систему.
- Возможность повторного использования кодификации в будущем. Нативный код уникален, каждую похожую программу приходится разрабатывать «с нуля». В случае с кроссплатформенностью этого удается избежать. Готовые блоки можно использовать как в новых проектах, так и в похожих на ранее написанные apps.
Также при обнаружении ошибок и неполадок затраты на необходимые корректировки значительно сокращаются. То же самое касается добавления новых функций, обновления ПО.
Минусы
Сложности при «универсальном» программировании тоже встречаются. Несмотря на все свои преимущества, межплатформенная разработка обладает рядом недостатков:
- Особенности пользовательского интерфейса. В сравнении с нативными утилитами можно увидеть огромную разницу во внешнем представлении контента. На первых порах проекта это доставляет клиентам некие неудобства. А разработчикам предстоит продумывать грамотную адаптацию.
- Борьба за первенство среди инструментов разработки. Раньше огромным спросом пользовались React Native, а также Xamarin. Сейчас на передовой находится Flutter. Это приводит к тому, что программерам приходится все время следить за «новшествами», а также переучиваться под них, чтобы выпускать качественное ПО.
- Гибкость. Кроссплатформенные утилиты менее гибкие, чем нативные.
Это – ключевые моменты, которые необходимо учитывать перед тем, как создать свою программу для мобильных устройств. Такой подход к созданию приложений выступает в качестве инновационного и весьма перспективного. Поэтому пренебрегать им не рекомендуется.
Выбор платформы
Нативные приложения не будут работать на платформах, под которые они «не заточены». В случае с кроссплатформенным софтом ситуация обстоит иначе. Такие утилиты совмещаются сразу с несколькими операционными системами. И пишутся они на «универсальных» языках программирования. Стоит хорошенько подумать, на чем остановиться в том или ином случае. Для нативной разработки программеры задействуют «специфические» языки программирования.
React native
Кроссплатформенные приложения могут быть созданы при помощи весьма популярного инструмента под названием React Native. Это – фреймворк для «универсального» программного обеспечения. Представляет собой JavaScript вместе с библиотекой React.
Основное предназначение – это дать возможность писать софт межплатформенного типа, делая его таким же функциональным, как и нативного. Применяется на практике даже компаниями-гигантами.
Особенности
Чтобы использовать React Native, нужно сначала учитывать его особенности:
- наличие поддержки всех ведущих IDE;
- простой и читаемый код;
- применение в процессе JavaScript;
- использование фреймворков JS для расширения функционала;
- наличие функции Hot Reloading, через которую можно пользоваться одним и тем же кодом на разных платформах;
- среда с большим набором готовых компонентов для будущего приложения;
- достойная производительность.
При реализации кодификации через React Native некоторые блоки со специфическими задачами придется корректировать для каждой выбранной платформы. Несмотря на это, данный инструмент является удобным, мощным и функциональным. Подойдет как новичкам, так и опытным программерам.
Flutter
Кроссплатформенные и современные приложения можно создавать через Flutter. Это – инновационный инструмент от компании Google, который с каждым годом набирает все большие обороты. На его базе создаются инновационные утилиты для iOS и Android.
Главный принцип оного – создание ПО с единой кодовой базой для веб-технологий, мобильных устройств и компьютеров. В качестве языка программирования задействован Dart. Это – ЯП, написанный Google. Относится к объектно-ориентированному типу.
О нюансах
У рассматриваемого продукта немало особенностей. Он появился на рынке относительно недавно, но за короткие сроки Flutter получил необычайную распространенностью. На нем можно увидеть приложения у Google Ads, Alibaba, Greentea.
Стоит обратить внимание на следующие нюансы:
- поддержка Android Studio;
- работа с Visual Studio Code и IntelliJ;
- простота изучения для тех, кто знает Java и C++;
- использование одного и того же кода для всех платформ;
- возможность создания потрясающих пользовательских интерфейсов;
- большое количество готовых виджетов;
- выпуск приложений для разных версий операционных систем.
Чтобы создать уникальный UI, придется постараться и доработать итоговую кодификацию. На деле это не доставляет существенных хлопот. Если хотите научиться работать с функциональным и быстрым инструментом для разработки кроссплатформенных приложений, Flutter отлично подойдет для этого.
Lonic
Lonic – название продукта, необходимого для написания кроссплатформенных гибридных программ. Выше описанные инструменты чаще всего встречаются на практике, позволяя добиться колоссальных результатов с минимальными затратами. Lonic поддерживает взаимодействие с Apache Cordova, при помощи которого можно проводить преобразование веб-софта в мобильный контент.
Инструмент для работы задействует JavaScript. Для того, чтобы задействовать все технологии «площадки» и участвовать в создании сложных утилит, нужно изучить CSS и HTML.
Что нужно помнить
При написании кроссплатформенных приложений через Lonic, стоит учитывать, что:
- пользователю легко работать с соответствующим инструментом;
- используется для любых IDE;
- быстро изучается, особенно теми, кто знаком с React и Vue.
У Lonic вы найдете множество дополнительных виджетов и возможностей. Грамотно оперируя элементами площадки, разработчик на выходе получит уникальное, быстрое и стабильное программное обеспечение. Только данная platform несколько уступает React Native. Связано это с тем, что для визуализации проект использует веб-технологии.
Xamarin
Чтобы разработать кроссплатформенные приложения, некоторые используют инструмент-фреймворк под названием Xamarin. Раньше он был таким же популярным среди существующих, как и React Native. Инструмент создан компанией Microsoft. Обладает поддержкой перевода исходного кода в утилиты для Windows.
Программеру должно быть известно о языках .NET и C#, чтобы добиться успеха в коддинге. Позволяет делать софт как для Apple, так и для Android.
О чем знать
Для запуска IDE можно использовать Visual Studio 2019 или Rider. Связано это с тем, что язык C# довольно распространен. С непосредственным коддингом утилиты на Xamarin не должно быть никаких проблем. Ответ на любой возникающий вопрос часто удается найти в сопутствующей документации и туториалах.
Также стоит учитывать следующее:
- у платформы несколько ключевых инструментов – Xamarin.Android/iOS и Xamarin.Forms;
- для кроссплатформенной мобильной разработки предложен единый API;
- это – хорошее решение для утилит, которые обладают такими же возможностями, что и нативный контент;
- при обработке кода сначала происходит компиляция в байт-код, который будет интерпретироваться виртуальной машиной;
- при помощи Xamarin.Forms можно ускорить процесс разработки.
Когда речь заходит о производительности, можно отметить, что у Xamarin она почти такая же, как платформенная. Программер сможет быстро получить доступ к функционалу утилиты, когда это необходимо. В пользователь не будет должно ждать, пока ПО загрузится.
PhoneGap
Последний вариант, который может применяться на практике при создании кроссплатформенных приложений – это PhoneGap. Похож на Lonic. Дает возможность использования веб-технологий в mobile development. Это -–дистрибутив Apache Cordova. Программер сможет получить доступ к бесплатной версии без особых затруднений.
Чтобы писать софт, нужно знать JS. Отдельно придется выучить HTML и CSS. Более комфортная разработка происходит через Adobe Dreamweaver.
PhoneGap – это набор HTML-страниц (сайт), который обернут в нативную оболочку. Странички будут храниться в каталоге или облаке локальным образом. При запуске на мобильном устройстве доступ к функциям осуществляется за счет встроенных плагинов.
Недостатков дизайна таких утилит нет. Качество интерфейса зависит от веб-представления конкретной операционной системы. Также стоит учитывать, что PhoneGap уступает конкурентам в плане производительности.
Пошаговый план
При создании кроссплатформенных приложений рекомендуется придерживаться определенного плана действий. Он поможет быстро получить на выходе контент в лучшем виде, а также минимизировать расходы:
- Придумать общую идею app.
- Составить концепцию и план утилиты.
- Выбрать язык программирования и инструменты, через которые будет осуществляться реализация проекта.
- Разработать дизайн. Это – часть плана, которую можно поручить специально обученным людям.
- Внедрить необходимый функционал.
- Провести тестирование написанного кода.
- Скомпилировать софт и разместить его на той или иной площадке.
Затягивать с релизом не рекомендуется. Лучше выпустить «сырое» программное обеспечение с небольшими недочетами, а затем предложить клиентам второе издание, чем откладывать старт на неопределенное время.
При написании кроссплатформенных приложений можно все делать самостоятельно или привлечь к этому целую команду. Все зависит от того, какой именно проект и бюджет заложены у человека.
Для того, чтобы добиться успеха в выбранном направлении, стоит привлечь к процессу представителей целевой аудитории. Можно просто изучить потребности и желания потенциальных пользователей программы, а также подсмотреть общие идеи у конкурентов.
Быстрое вливание в тему
В Москве и других регионах России кроссплатформенная мобильная разработка – перспективное направление деятельности. То же самое касается других стран. Чтобы быстрее и лучше разобраться в этом процессе, можно:
- Обучиться в техникуме на программиста. Это – первоначальный этап. Хорош тем, что по выпуску программер сможет создавать ПО для компьютеров.
- Отдать предпочтение ВУЗам. Долгое, дорогое, но весьма надежное решение. Здесь гарантируется выдача государственного диплома, а также возможность получения бесценной практики. Отличное решение для выпускников школ и техникумов.
- Заняться самообразованием. Здесь предстоит обладать неплохим самоконтролем и «стержнем». Программер сможет концентрироваться только на важных для него вопросах разработки. В основе заложена практика. Подтвердить навыки и знания документально в этом случае не представится возможным.
С дистанционными специализированными компьютерными курсами разработка кроссплатформенных приложений доставит минимум хлопот. В срок до года пользователь научится «с нуля» писать совершенно разные программы и игры. По окончании обучения – получит электронный сертификат. Клиенту гарантирована обратная связь, тщательно продуманные программы и масса практики.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Как сделать собственное приложение для смартфонов и планшетов OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Программирование и разработка – направления, которые являются крайне перспективными для изучения и трудоустройства. Огромным спросом стали пользоваться специалисты разработки мобильных приложений, а также кроссплатформенных утилит. В данной статье будет рассказано о том, как создать собственную «универсальную» программу, что собой представляет мобильная разработка, описаны ее преимущества и недостатки. Поговорим про Flutter, React Native и не только." />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#article","name":"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u0432 OTUS","headline":"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u0432","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/06\/oj-1080x720-2.png","width":1080,"height":720},"datePublished":"2022-06-20T17:15:58+00:00","dateModified":"2022-06-20T17:16:01+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Flutter, React Native, \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#listItem","position":2,"name":"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u0432","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#webpage","url":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/","name":"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u0432 OTUS","description":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u2013 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0442\u0440\u0443\u0434\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u043f\u0440\u043e\u0441\u043e\u043c \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u00ab\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e\u00bb \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0447\u0442\u043e \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0435\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e Flutter, React Native \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e.","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/06\/oj-1080x720-2.png","@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/#mainImage"},"datePublished":"2022-06-20T17:15:58+00:00","dateModified":"2022-06-20T17:16:01+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/3780" /><link rel='shortlink' href='https://otus.ru/journal/?p=3780' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-3780 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-3780" class="the-post post-3780 post type-post status-publish format-standard has-post-thumbnail category-polza tag-flutter tag-react-native tag-mobilnaya-razrabotka">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Как сделать собственное приложение для смартфонов и планшетов
</h1>
<a href="https://otus.ru/journal/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov/" class="date-link" data-wpel-link="internal"><time class="post-date">20 июня, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Как сделать собственное приложение для смартфонов и планшетов" title="Как сделать собственное приложение для смартфонов и планшетов" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%E2%80%93_%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0" title="Разработка и программирование – разница">Разработка и программирование – разница</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9E_%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="О кроссплатформенности">О кроссплатформенности</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" title="Преимущества и недостатки">Преимущества и недостатки</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9F%D0%BB%D1%8E%D1%81%D1%8B" title="Плюсы">Плюсы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B" title="Минусы">Минусы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%92%D1%8B%D0%B1%D0%BE%D1%80_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B" title="Выбор платформы">Выбор платформы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#React_native" title="React native">React native</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Особенности">Особенности</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#Flutter" title="Flutter">Flutter</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9E_%D0%BD%D1%8E%D0%B0%D0%BD%D1%81%D0%B0%D1%85" title="О нюансах">О нюансах</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#Lonic" title="Lonic">Lonic</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%A7%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C" title="Что нужно помнить">Что нужно помнить</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Xamarin" title="Xamarin">Xamarin</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9E_%D1%87%D0%B5%D0%BC_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C" title="О чем знать">О чем знать</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#PhoneGap" title="PhoneGap">PhoneGap</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9F%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BB%D0%B0%D0%BD" title="Пошаговый план">Пошаговый план</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%82%D0%B5%D0%BC%D1%83" title="Быстрое вливание в тему">Быстрое вливание в тему</a></li></ul></nav></div>
<p>Программирование и разработка – направления, которые являются крайне перспективными для изучения и трудоустройства. Огромным спросом стали пользоваться специалисты разработки мобильных приложений, а также кроссплатформенных утилит.</p>
<p>В данной статье будет рассказано о том, как создать собственную «универсальную» программу, что собой представляет мобильная разработка, описаны ее преимущества и недостатки. Поговорим про Flutter, React Native и не только.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%E2%80%93_%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0"></span>Разработка и программирование – разница<span class="ez-toc-section-end"></span></h2>
<p>Сначала стоит разобраться с такими двумя схожими между собой понятиями, как «разработка» и «программирование». Многие описывают с их помощью одни и те же операции, но это не совсем правильно.</p>
<p>Запомнить необходимо следующее:</p>
<ol type="1"><li>Программирование – решение при помощи написания кода приложения строго установленной задачи. Программер будет специализироваться на некоторых целях. Он занимается решением конкретных проблем.</li><li>Разработка – полноценное создание программного обеспечения «с нуля». Разработчик выступает в качестве мастера-универсала. Он хорошо разбирается в архитектуре утилит, программном коде и тестинге. Сопровождает проект от самого зарождения до непосредственного релиза. Будет обеспечивать взаимодействие между членами команды.</li></ol>
<p>Разработка – это более широкое понятие. Именно его правильно применять относительно создания кроссплатформенных утилит «с нуля».</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>О кроссплатформенности<span class="ez-toc-section-end"></span></h2>
<p>Кроссплатформенная мобильная разработка – это способность программного обеспечения функционировать с несколькими аппаратными платформами или операционными системами. Пример – стабильная работа на iOS и Android, а также Windows Phone.</p>
<p>Кроссплатформенность (межплатформенность) обеспечивается за счет:</p>
<ul><li>высокоуровневых языков программирования;</li><li>сред разработки и выполнения, которые поддерживают условную компиляцию;</li><li>обработки кода на разного рода платформах.</li></ul>
<p>Типичный вариант кроссплатформенной утилиты – это софт, который будет одинаково хорошо работать на Linux и Windows одновременно.</p>
<p>Суть заключается в том, что код приложения будет переводиться в нативную разработку. На язык, понятный конкретному устройству. За счет такого подхода программа начнет взаимодействовать с установленной операционной системой.</p>
<p>Стоит обратить внимание на то, что нативные утилиты, в отличие от кроссплатформенных «собратьев», будут изначально составляться для конкретной операционной системы.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8"></span>Преимущества и недостатки<span class="ez-toc-section-end"></span></h2>
<p>Нативные <a href="https://otus.ru/journal/sozdanie-pervogo-prilozheniya-na-c/" data-wpel-link="internal">приложения с</a> развитием IT-технологий начали потихоньку устаревать. Поэтому программисты и разработчики стараются создавать кроссплатформенные варианты кодификаций. У них есть как плюсы, так и минусы. Все эти моменты необходимо изучить до того, как программер начнет заниматься непосредственным созданием проекта.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BB%D1%8E%D1%81%D1%8B"></span>Плюсы<span class="ez-toc-section-end"></span></h3>
<p>У разработки кроссплатформенных приложений есть следующие сильные стороны:</p>
<ol type="1"><li>Расширение пользовательской базы. Приложение появляется сразу в нескольких магазинах. Это способствует более быстрому распространению софта.</li><li>Отсутствие необходимости найма нескольких сотрудников для перевода утилиты на разные платформы. Достаточно связаться с разработчиками-кроссплатформерами. Они смогут сразу сделать универсальный контент.</li><li>Ускорение процесса разработки. Связано это с тем, что перед релизом не придется дорабатывать кодификацию и проводить ее детальный перевод под другую операционную систему.</li><li>Возможность повторного использования кодификации в будущем. Нативный код уникален, каждую похожую программу приходится разрабатывать «с нуля». В случае с кроссплатформенностью этого удается избежать. Готовые блоки можно использовать как в новых проектах, так и в похожих на ранее написанные apps.</li></ol>
<p>Также при обнаружении ошибок и неполадок затраты на необходимые корректировки значительно сокращаются. То же самое касается добавления новых функций, обновления ПО.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B8%D0%BD%D1%83%D1%81%D1%8B"></span>Минусы<span class="ez-toc-section-end"></span></h3>
<p>Сложности при «универсальном» программировании тоже встречаются. Несмотря на все свои преимущества, межплатформенная разработка обладает рядом недостатков:</p>
<ol type="1"><li>Особенности пользовательского интерфейса. В сравнении с нативными утилитами можно увидеть огромную разницу во внешнем представлении контента. На первых порах проекта это доставляет клиентам некие неудобства. А разработчикам предстоит продумывать грамотную адаптацию.</li><li>Борьба за первенство среди инструментов разработки. Раньше огромным спросом пользовались React Native, а также Xamarin. Сейчас на передовой находится Flutter. Это приводит к тому, что программерам приходится все время следить за «новшествами», а также переучиваться под них, чтобы выпускать качественное ПО.</li><li>Гибкость. Кроссплатформенные утилиты менее гибкие, чем нативные.</li></ol>
<p>Это – ключевые моменты, которые необходимо учитывать перед тем, как создать свою программу для мобильных устройств. Такой подход к созданию приложений выступает в качестве инновационного и весьма перспективного. Поэтому пренебрегать им не рекомендуется.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%8B%D0%B1%D0%BE%D1%80_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B"></span>Выбор платформы<span class="ez-toc-section-end"></span></h2>
<p>Нативные приложения не будут работать на платформах, под которые они «не заточены». В случае с кроссплатформенным софтом ситуация обстоит иначе. Такие утилиты совмещаются сразу с несколькими операционными системами. И пишутся они на «универсальных» языках программирования. Стоит хорошенько подумать, на чем остановиться в том или ином случае. Для нативной разработки программеры задействуют «специфические» языки программирования.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="React_native"></span>React native<span class="ez-toc-section-end"></span></h3>
<p>Кроссплатформенные приложения могут быть созданы при помощи весьма популярного инструмента под названием React Native. Это – фреймворк для «универсального» программного обеспечения. Представляет собой JavaScript вместе с библиотекой React.</p>
<p>Основное предназначение – это дать возможность писать софт межплатформенного типа, делая его таким же функциональным, как и нативного. Применяется на практике даже компаниями-гигантами.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Особенности<span class="ez-toc-section-end"></span></h4>
<p>Чтобы использовать React Native, нужно сначала учитывать его особенности:</p>
<ul><li>наличие поддержки всех ведущих IDE;</li><li>простой и читаемый код;</li><li>применение в процессе JavaScript;</li><li>использование фреймворков JS для расширения функционала;</li><li>наличие функции Hot Reloading, через которую можно пользоваться одним и тем же кодом на разных платформах;</li><li>среда с большим набором готовых компонентов для будущего приложения;</li><li>достойная производительность.</li></ul>
<p>При реализации кодификации через React Native некоторые блоки со специфическими задачами придется корректировать для каждой выбранной платформы. Несмотря на это, данный инструмент является удобным, мощным и функциональным. Подойдет как новичкам, так и опытным программерам.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Flutter"></span>Flutter<span class="ez-toc-section-end"></span></h3>
<p>Кроссплатформенные и современные приложения можно создавать через Flutter. Это – инновационный инструмент от компании Google, который с каждым годом набирает все большие обороты. На его базе создаются инновационные утилиты для iOS и Android.</p>
<p>Главный принцип оного – создание ПО с единой кодовой базой для веб-технологий, мобильных устройств и компьютеров. В качестве языка программирования задействован Dart. Это – ЯП, написанный Google. Относится к объектно-ориентированному типу.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BD%D1%8E%D0%B0%D0%BD%D1%81%D0%B0%D1%85"></span>О нюансах<span class="ez-toc-section-end"></span></h4>
<p>У рассматриваемого продукта немало особенностей. Он появился на рынке относительно недавно, но за короткие сроки Flutter получил необычайную распространенностью. На нем можно увидеть приложения у Google Ads, Alibaba, Greentea.</p>
<p>Стоит обратить внимание на следующие нюансы:</p>
<ul><li>поддержка Android Studio;</li><li>работа с Visual Studio Code и IntelliJ;</li><li>простота изучения для тех, кто знает <a href="https://otus.ru/journal/otlichie-yazykov-java-c-java-core/" data-wpel-link="internal">Java и C</a>++;</li><li>использование одного и того же кода для всех платформ;</li><li>возможность создания потрясающих пользовательских интерфейсов;</li><li>большое количество готовых виджетов;</li><li>выпуск приложений для разных версий операционных систем.</li></ul>
<p>Чтобы создать уникальный UI, придется постараться и доработать итоговую кодификацию. На деле это не доставляет существенных хлопот. Если хотите научиться работать с функциональным и быстрым инструментом для разработки кроссплатформенных приложений, Flutter отлично подойдет для этого.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lonic"></span>Lonic<span class="ez-toc-section-end"></span></h3>
<p>Lonic – название продукта, необходимого для написания кроссплатформенных гибридных программ. Выше описанные инструменты чаще всего встречаются на практике, позволяя добиться колоссальных результатов с минимальными затратами. Lonic поддерживает взаимодействие с Apache Cordova, при помощи которого можно проводить преобразование веб-софта в мобильный контент.</p>
<p>Инструмент для работы задействует JavaScript. Для того, чтобы задействовать все технологии «площадки» и участвовать в создании сложных утилит, нужно изучить CSS и HTML.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C"></span>Что нужно помнить<span class="ez-toc-section-end"></span></h4>
<p>При написании кроссплатформенных приложений через Lonic, стоит учитывать, что:</p>
<ul><li>пользователю легко работать с соответствующим инструментом;</li><li>используется для любых IDE;</li><li>быстро изучается, особенно теми, кто знаком с React и Vue.</li></ul>
<p>У Lonic вы найдете множество дополнительных виджетов и возможностей. Грамотно оперируя элементами площадки, разработчик на выходе получит уникальное, быстрое и стабильное программное обеспечение. Только данная platform несколько уступает React Native. Связано это с тем, что для визуализации проект использует веб-технологии.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xamarin"></span>Xamarin<span class="ez-toc-section-end"></span></h3>
<p>Чтобы разработать кроссплатформенные приложения, некоторые используют инструмент-фреймворк под названием Xamarin. Раньше он был таким же популярным среди существующих, как и React Native. Инструмент создан компанией Microsoft. Обладает поддержкой перевода исходного кода в утилиты для Windows.</p>
<p>Программеру должно быть известно о языках .NET и C#, чтобы добиться успеха в коддинге. Позволяет делать софт как для Apple, так и для Android.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D1%87%D0%B5%D0%BC_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C"></span>О чем знать<span class="ez-toc-section-end"></span></h4>
<p>Для запуска IDE можно использовать Visual Studio 2019 или Rider. Связано это с тем, что язык C# довольно распространен. С непосредственным коддингом утилиты на Xamarin не должно быть никаких проблем. Ответ на любой возникающий вопрос часто удается найти в сопутствующей документации и туториалах.</p>
<p>Также стоит учитывать следующее:</p>
<ul><li>у платформы несколько ключевых инструментов – Xamarin.Android/iOS и Xamarin.Forms;</li><li>для кроссплатформенной мобильной разработки предложен единый API;</li><li>это – хорошее решение для утилит, которые обладают такими же возможностями, что и нативный контент;</li><li>при обработке кода сначала происходит компиляция в байт-код, который будет интерпретироваться виртуальной машиной;</li><li>при помощи Xamarin.Forms можно ускорить процесс разработки.</li></ul>
<p>Когда речь заходит о производительности, можно отметить, что у Xamarin она почти такая же, как платформенная. Программер сможет быстро получить доступ к функционалу утилиты, когда это необходимо. В пользователь не будет должно ждать, пока ПО загрузится.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="PhoneGap"></span>PhoneGap<span class="ez-toc-section-end"></span></h3>
<p>Последний вариант, который может применяться на практике при создании кроссплатформенных приложений – это PhoneGap. Похож на Lonic. Дает возможность использования веб-технологий в mobile development. Это -–дистрибутив Apache Cordova. Программер сможет получить доступ к бесплатной версии без особых затруднений.</p>
<p>Чтобы писать софт, нужно знать JS. Отдельно придется выучить HTML и CSS. Более комфортная разработка происходит через Adobe Dreamweaver.</p>
<p>PhoneGap – это набор HTML-страниц (сайт), который обернут в нативную оболочку. Странички будут храниться в каталоге или облаке локальным образом. При запуске на мобильном устройстве доступ к функциям осуществляется за счет встроенных плагинов.</p>
<p>Недостатков дизайна таких утилит нет. Качество интерфейса зависит от веб-представления конкретной операционной системы. Также стоит учитывать, что PhoneGap уступает конкурентам в плане производительности.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BF%D0%BB%D0%B0%D0%BD"></span>Пошаговый план<span class="ez-toc-section-end"></span></h2>
<p>При создании кроссплатформенных приложений рекомендуется придерживаться определенного плана действий. Он поможет быстро получить на выходе контент в лучшем виде, а также минимизировать расходы:</p>
<ol type="1"><li>Придумать общую идею app.</li><li>Составить концепцию и план утилиты.</li><li>Выбрать язык программирования и инструменты, через которые будет осуществляться реализация проекта.</li><li>Разработать дизайн. Это – часть плана, которую можно поручить специально обученным людям.</li><li>Внедрить необходимый функционал.</li><li>Провести тестирование написанного кода.</li><li>Скомпилировать софт и разместить его на той или иной площадке.</li></ol>
<p>Затягивать с релизом не рекомендуется. Лучше выпустить «сырое» программное обеспечение с небольшими недочетами, а затем предложить клиентам второе издание, чем откладывать старт на неопределенное время.</p>
<p>При написании кроссплатформенных приложений можно все делать самостоятельно или привлечь к этому целую команду. Все зависит от того, какой именно проект и бюджет заложены у человека.</p>
<p>Для того, чтобы добиться успеха в выбранном направлении, стоит привлечь к процессу представителей целевой аудитории. Можно просто изучить потребности и желания потенциальных пользователей программы, а также подсмотреть общие идеи у конкурентов.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%82%D0%B5%D0%BC%D1%83"></span>Быстрое вливание в тему<span class="ez-toc-section-end"></span></h2>
<p>В Москве и других регионах России кроссплатформенная мобильная разработка – перспективное направление деятельности. То же самое касается других стран. Чтобы быстрее и лучше разобраться в этом процессе, можно:</p>
<ol type="1"><li>Обучиться в техникуме на программиста. Это – первоначальный этап. Хорош тем, что по выпуску программер сможет создавать ПО для компьютеров.</li><li>Отдать предпочтение ВУЗам. Долгое, дорогое, но весьма надежное решение. Здесь гарантируется выдача государственного диплома, а также возможность получения бесценной практики. Отличное решение для выпускников школ и техникумов.</li><li>Заняться самообразованием. Здесь предстоит обладать неплохим самоконтролем и «стержнем». Программер сможет концентрироваться только на важных для него вопросах разработки. В основе заложена практика. Подтвердить навыки и знания документально в этом случае не представится возможным.</li></ol>
<p>С дистанционными специализированными компьютерными курсами разработка кроссплатформенных приложений доставит минимум хлопот. В срок до года пользователь научится «с нуля» писать совершенно разные программы и игры. По окончании обучения – получит электронный сертификат. Клиенту гарантирована обратная связь, тщательно продуманные программы и масса практики.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/dart-flutter/?utm_source=oj&utm_medium=affilate&utm_campaign=flutter" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="70" src="https://otus.ru/journal/wp-content/uploads/2022/06/Flutter_Headline_970x70.png" alt="Как сделать собственное приложение для смартфонов и планшетов" class="wp-image-3783" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/Flutter_Headline_970x70.png 970w, https://otus.ru/journal/wp-content/uploads/2022/06/Flutter_Headline_970x70-300x22.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/Flutter_Headline_970x70-150x11.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/Flutter_Headline_970x70-768x55.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/flutter/" rel="tag" data-wpel-link="internal">Flutter</a><a href="https://otus.ru/journal/tag/react-native/" rel="tag" data-wpel-link="internal">React Native</a><a href="https://otus.ru/journal/tag/mobilnaya-razrabotka/" rel="tag" data-wpel-link="internal">Мобильная разработка</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F&text=%D0%9A%D0%B0%D0%BA%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BC%D0%B0%D1%80%D1%82%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%20%D0%B8%20%D0%BF%D0%BB%D0%B0%D0%BD%D1%88%D0%B5%D1%82%D0%BE%D0%B2" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fkak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F06%2Foj-1080x720-2.png&description=%D0%9A%D0%B0%D0%BA%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BC%D0%B0%D1%80%D1%82%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%20%D0%B8%20%D0%BF%D0%BB%D0%B0%D0%BD%D1%88%D0%B5%D1%82%D0%BE%D0%B2" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-29/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-29/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Новые мероприятия в OTUS" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-20-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Новые мероприятия в OTUS" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-29/" data-wpel-link="internal">Новые мероприятия в OTUS</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/novye-meropriyatiya-v-otus-29/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-06-20T10:26:50+00:00">20 июня, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">5 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/si-sharp-opisanie-i-osobennosti-yazyka/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/si-sharp-opisanie-i-osobennosti-yazyka/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Си Шарп: описание и особенности языка" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-2-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Си Шарп: описание и особенности языка" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/si-sharp-opisanie-i-osobennosti-yazyka/" data-wpel-link="internal">Си Шарп: описание и особенности языка</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/si-sharp-opisanie-i-osobennosti-yazyka/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-06-20T17:47:34+00:00">20 июня, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/kak-sdelat-sobstvennoe-prilozhenie-dlya-smartfonov-i-planshetov\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 17:15:47 GMT -->