Полноценное Python приложение на Android
В этой статье я хотел бы рассказать о том, как создать полноценное приложение на Python для Android. Нет, это не очередной мануал для создания скрипта для sl4a, это мануал по созданию полноценного приложения с UI, возможностью собрать apk и выложить на Android Market. Заодно я хотел бы похвалиться своим первым приложением на google.play, это не hello world, а полезное приложение для фотографов, хотя и узко специализированное.
Начну рассказ пожалуй с самого приложения и завершу рассказам о том как оно делалось.
isortViewer
Мне как фотографу приходится тратить много времени на сортировку и отбор фотографий. Не всегда хочется сидеть за рабочим компьютером, когда под рукой есть ноутбук, смартфон или планшет, но копировать туда десятки гигабайт raw или jpeg файлов, а потом синхронизировать с рабочим компьютером — сомнительное удовольствие. Именно поэтому я создал программы isortManager и isortViewer, которые значительно облегчили мне работу по сортировке и отбору фотографий. Теперь заниматься отбором и сортировкой фотографий я могу лежа на пляже диване или скучая в пробке 🙂
Копипаст описания и пара скриншотов:
isortViewer — программа для фотографов, которая позволяет легко и быстрой отбирать и сортировать тысячи фотографий (raw или jpg) с фотосессий на ваших android смартфонах и планшетах. При этом, нет необходимости копировать десятки гигабайт jpg или raw файлов на устройство. Просто воспользуйтесь бесплатной программой isortManager для компьютера, которая сохранит все в один небольшой файл проекта:
1. Скачайте и запустите isortManager с официального сайта;
2. Создайте проект и добавьте папки с фотографиями. Поддерживаются форматы: jpg и raw (cr2, nef, orf и т.д.). В итоге у вас получится небольшой файл проекта (примерно 150 мб на несколько тысяч фотографий, будь то jpg или raw формат);
3. Скопируйте на ваше android устройство файл проекта, откройте в isortViewer. Вы можете помечать фотографии «на удаление», а так же, ставить рейтинги от 1 до 5 звезд;
4. После этого, скопируйте файл проекта обратно и примените изменения в isortManager. Кроме удаления выбранных фотографий, вы можете копировать или перемещать отмеченные фотографии. Например, фотографии с «5 звезд» можно скопировать в папку «шедевры», а «1 звезда» переместить в папку «хлам».
Приложение абсолютно бесплатно и доступно на google.play, однако донейты приветствуются.
Исходники доступны на официальном сайте!
Как это делалось
Так как python лучший язык программирования в мире кроме python я ничего не знаю, решено было написать приложение на python.
isortManager
С isortManager для PC проблем не возникло, создание GUI сборки под windows уже давно обкатано и работает он очень просто: с помощью dcraw выдирает jpg превьюшки из raw файлов, ресайзит из с помощью PIL и складывает в один файл с достаточно простой структурой. Был изобретен свой весолипед с контейнером для хранения фотографий и метаданных (полный путь к фотографии, отметка «на удаление» и отметка рейтинга), так как, например, zip или tar формат, не могут изменять один файл в архиве (метаданные), требую перепаковки всех файлов. Файлы просто пишутся один за другим подряд и в блоке метаданных (обычный repr питоновского словаря) в конце сохраняется смещения начала файлов, плюс в конце файла пишется размер блока метаданных. GUI написано на Tkinter (люблю я его за быстроту написания и за малый размер итоговой сборки), вот собственно скриншот:
И да, все это работает и на linux, и даже быстрее чем на windows )
isortViewer для android
Всего я нашел два способа заставить python приложение работать как полноценное приложение на android, это pygame for android и проект kivy.
Pygame — более низкоуровневый, все UI пришлось бы рисовать вручную, что отняло бы много времени, поэтому был выбран фреймворк kivy. Итак:
Это замечательный фрейморк для написания приложение для windows, linux, MacOS, android и iOS. Поддерживается мультитач, UI рисутется через OpenGL, значит должно работать аппаратное ускорение. Увидеть работу виджетов можно установив демонстрационное приложение Kivy Showcase. Есть возможность использования некоторых платформо специфичных функций, например, вибро или акселерометр, с помощью модуля android.
Для разработки я бы рекомендовал использовать linux, тем более, apk собираются именно в этой OS.
Hello World выглядит так:
Причем этот код будет работать на всех заявленных платформах. Пропадает необходимость в тестировании приложения в эмуляторе. Достаточно запустить скрипт на исполнение в своей любимой IDE и увидеть результат на экране компьютера, без задержек на компиляцию, запуск эмулятора и пр. Если вы все же хотите увидеть как это будет выглядеть непосредственно на устройстве, просто установите Kivy Launcher, скопируйте файлы проекта на карту памяти и запустите. Дебажить при этом можно при помощи adb logcat.
Если вы используете библиотеку android, которой нет на PC, но хочется запускать приложение не только на android, воспользуйте такой конструкцией:
Сборка apk достаточно проста и описана на этой странице. После сборки релиза, достаточно подписать свое приложение (я использовал этот мануал) и выложить в google play.
В следующей своей статье, я расскажу более подробно о процессе написания приложения «с нуля», расжевывая каждую строчку кода.
Хотелось бы сразу пресечь холивары на тему «для android только java, python не нужен». Я считаю, не важно, какие технологии «под капотом», главное чтоб приложение было качественным.
Сфера применения kivy может быть огромной. Сейчас на моем счету несколько приложений, написанных под заказ, где python с фремворком kivy показал себя с хорошей стороны. Например, ровно за один час, было написано приложение, для сети сервисных центров. Приложение работает в режиме киоска и установлено на дешевые китайские планшеты, которые висят в холле. Клиент набирает номер заказа, далее по WiFi планшет соединяется с сервером и сообщает статус заказа.
Разработка мобильных приложений на Python. Библиотека KivyMD
Приветствую! Сегодня речь снова пойдет о библиотеке KivyMD — наборе виджетов для кроссплатформенной разработки на Python в стиле Material Design. В этой статье я сделаю не обзор виджетов KivyMD, как в недавней статье, а, скорее, это будет материал больше о позиционировании виджетов. Что-то похожего на туториал по разработке мобильных приложений на Python для новичков здесь не будет, так что если впервые слышите о фреймворке Kivy, вряд ли вам будет все это интересно. Ну, а мы погнали под кат!
На днях скачал из Google Play демонстрационное приложение Flutter UIKit:
Некоторые элементы UI отличаются, не в силу каких-то технических особенностей, из-за которых нельзя было получить идентичный результат, а просто я посчитал, что так будет более органичней (например, черный Toolbar, по моему мнению, совсем не смотрится).
Итак! Что бросается в глаза, глядя на экран, который мы будем воспроизводить? Прозрачный фон переднего layout. В Kivy такую возможность предоставляет FloatLayout, который позволяет размещать в себе виджеты и контроллы один над другим следующим образом:
Схематично наш экран будет выглядеть так:
Разметка этого экрана довольно простая:
Почему я говорю о FloatLayout, если наш экран унаследован от Screen?
Все виджеты во FloatLayout позиционируются от нижнего левого угла, то есть, на экране им автоматически присваивается позиция (0, 0). В разметке не сложно проследить порядок добавления элементов на экран сверху вниз:
Если кто-то обратил внимание, то позицию мы указали только одному виджету:
Каждому виджету в Kivy помимо конкретных координат (x, y) можно указать подсказку позиции:
Так вот, нижнее фоновое изображение…
… благодаря виджету FitImage (библиотека KivyMD), автоматически растягивается на все выделенное ему пространство с сохранением пропорций изображения:
По умолчанию каждому виджету и лайоуту в Kivy предоставляется 100 % пространства, если не указанно иное. Например, если вы захотите добавить на экран одну кнопку, вы, очевидно сделаете следующее:
И получите результат:
Кнопка заняла 100 % пространства. Чтобы разместить кнопку по центру экрана, нужно, во-первых, задать ей необходимый размер и, во-вторых, указать, где она будет находится:
Теперь картина изменилась:
Также можно указать свойство size_hint, от 0 до 1, (эквивалент 0-100%), то есть, подсказка размера:
Или тоже самое, но подсказка ширины (size_hint_x):
MDToolbar имеет высоту в 56dp, не может занимать все пространство, и если ему не подсказать, что его место сверху, то он автоматически прилипнет к нижней части экрана:
Список карточек — OrderProductLayout (о нем мы поговорим ниже) — это ScrollView с элементами MDCard и он занимает всю высоту экрана, но благодаря padding (значения отступов в лайоутах) кажется, что он находится чуть выше центра экрана. Ну а MDBottomAppBar по умолчанию кидает якорь к нижней границе экрана. Поэтому только MDToolbar мы указали, где его место.
Теперь давайте посмотрим, что представляет из себя виджет OrderProductLayout:
Как видим, это четыре карточки, вложенные в ScrillView. В отличие от родительского экрана, который унаследован от FloatLayout, здесь все виджеты читаются сверху вниз.
Это очень удобно, поскольку прослеживается четкая иерархия виджетов, древовидная структура и с одного взгляда понятно, какой виджет/контролл какому лайоуту принадлежит. В Kivy наиболее частым используемым лайоутом является BoxLayout — коробка, которая позволяет размещать в себе виджеты по вертикали либо по горизонтали (по умолчанию — последнее):
Более наглядно это видно из следующей схемы, где используется BoxLayout горизонтальной ориентации:
Мы запретили BoxLayout использовать 100% пространства — size_hint_y: None и сказали — твоя высота будет ровно такой, какой будет высота самого высокого элемента, вложенного в тебя — height: self.minimum_height.
Если бы мы захотели использовать вертикальную прокрутку списка, нам нужно было бы изменить GridLayout следующим образом:
Заменить строки (rows) на столбцы (cols) и указать в minimum не ширину, а высоту:
Следующие карты — выбор цвета и размера (они практически идентичны):
Отличительной особенностью языка разметки Kv Language является не только четкая структура виджетов, но и то, что этот язык поддерживает некоторые возможности языка Python. А именно: вызов методов, создание/изменение переменных, логические, I/O и математические операции…
Вычисление значения value, объявленного в Label…
… происходит непосредственно в самой разметке:
И я никогда не поверю, что вот это (код Flutter)…
… логичнее и читабельнее кода Kv Language:
Вчера меня спрашивали, как у Kivy обстоят дела со средой разработки, есть ли автокомплиты, хотрелоад и прочие прелести? С автокомплитами все отлично, если пользоваться PyCharm:
Насчет хотрелоад… Python — интерпретируемый язык. Kivy использует Python. Соответственно, чтобы увидеть результат, не нужна компиляция кода, запустил — увидел/протестирвал. Как я уже говорил, Kivy не использует нативные API для рендера UI, поэтому позволяет эмулировать различные модели устройств и платформ с помощью модуля screen. Достаточно запустить ваш проект с нужными параметрами, чтобы на компьютере открылось окно тестируемого приложения так, как если бы оно было запущено на реальном устройстве. Звучит странно, но поскольку Kivy абстрагируется от платформы в отрисовке UI, это позволяет не использовать тяжелые и медленные эмуляторы для тестов. Это касается только UI. Например, тестовое приложение, описываемое в этой статье тестировалось с параметрами -m screen:droid2, portrait, scale=.75.
Слева — запущено на мобильном устройстве, справа — на компьютере:
Ну, и, наконец, финальный результат — запуск на мобильном устройстве…
Единственное, что огорчает, это скорость запуска. У того же Flutter она просто феноменальная!
Надеюсь, был кому-то полезен, до новых встреч!
10 лучших редакторов кода Python для Android
Звучит довольно странно, не так ли?
Писать код на смартфоне — не так уж и просто, но уже сейчас существуют продвинутые приложения для этих целей, которые могут выполнять свои задачи как на стороне клиента, так и на стороне сервера.
Android-устройства же в любом случае сегодня есть у многих.
Все хотят научиться программировать, но ограничены определенными условиями. Как минимум тем, что для изучения основ необходим персональный компьютер.
В прошлом не было другого выбора, кроме как покупать ноутбук или стационарный ПК. И в худшем случае обладатели новых устройств быстро осознавали, что программирование — это не для них.
Однако в 2021 абсолютным новичкам можно не тратить деньги, а попробовать познакомиться с миром разработки с помощью мобильных приложений.
Почему бы не использовать сайты для программирования на телефоне
Еще одна особенность изучения программирования на смартфоне — необходимость писать код прямо на сайтах. Для этого можно использовать такие ресурсы, как W3Schools, Learnpython, Codeacademy и другие.
Редакторы этих сайтов достаточно продвинуты, но им все равно не хватает таких функций, как форматирование кода, отступы, подсветка синтаксиса и сохранение файлов.
В отдельных же приложениях все это есть. Они опираются на встроенные в них или онлайн-компиляторы. Такие вещи, как разные темы или подсветка синтаксиса, также доступны. Есть в них и такие функции, как расширенная клавиатура и автодополнение.
Pydroid 3
Это одна из лучших программ на сегодня, которая поддерживает интерпретатор Python 3.8, работающий целиком офлайн.
Также есть поддержка таких продвинутых библиотек, как NumPy, SciPy и matplotlib для анализа данных. Для машинного обучения есть Scikit Learn и TensorFlow. И даже для разработки приложений с графическим интерфейсом можно использовать Tkinter.
Есть и масса других вещей:
Особенности редактора
Стоимость
Acode
Простая и легкая IDE для Android, которая работает не только с Python, но и множеством других языков.
С помощью этой программы вы сможете написать программу на Python, а также сверстать веб-страницу, используя HTML, CSS и JavaScript. Вот что еще есть в этой программе:
Особенности редактора
Стоимость
Dcoder
Еще одна мобильная IDE со встроенным компилятором и поддержкой более 50 языков, включая C, C++, Python и Java. Также поддерживаются такие фреймворки, как React.js, Angular, Django, Flask, Flutter и другие.
По производительности это приложение сравнимо с Notepad++, Sublime Text и Eclipse. Также есть встроенные алгоритмические задачи разных уровней сложности.
Особенности редактора
Стоимость
Programming Hub
Это не отдельный редактор кода, а платформа для обучения со встроенным редактором. Приложение было разработано совместно с экспертами из Google. С ним процесс обучения превращается в игру, поэтому и подходит оно больше всего для начинающих.
Особенности редактора
Стоимость
Spck Code Editor
Это один из лучших редакторов кода на Android. Его можно установить в Google Play и сразу же начать использовать для написания кода на HTML, CSS, JavaScript, Python, Ruby, C++ или Java.
У него также есть поддержка подсветки синтаксиса для TypeScript и Emmet.
Особенности редактора
Стоимость
Creative IDE
Это не просто среда разработки, но еще и обучающая платформа. Приложение поддерживает десятки языков программирования и столько же фреймворков. Работает без интернета и поддерживает Python 2.7 и Python 3.
Отличная программа, в том числе и для начинающих разработчиков. Помимо редактора кода включает некоторые продвинутые функции.
Особенности редактора
Стоимость
QPython 3L
Еще один производительный и удобный редактор на Android — QPython 3L. У него есть такие встроенные функции, как QPYI, интерпретатор, среда выполнения и поддержка SL4A.
Подходит как для продвинутых разработчиков, так и для начинающих. Плюс, приложение бесплатное и с удобным интерфейсом.
Особенности редактора
Стоимость
Online Compiler
Это одно из лучших приложений, которое вполне может выступать в качестве редактора кода Python. Оно поддерживает больше 23 языков, работая без зависаний. Одно из основных отличий — работе в облаке, что позволило снизить размер самого приложения до 1,7 МБ.
Особенности редактора
Стоимость
Code Editor от Rythm Software
Это приложение предназначено для программирования и поддерживает более 100 языков. В нем есть такие функции, как подсветка синтаксиса, автодополнение, автоматические отступы и так далее. Интерфейс простой и логичный.
Особенности редактора
Стоимость
DroidEdit
Это редактор кода для смартфонов и планшетов на Android. Поддерживает несколько языков, включая разные версии Python. Лучше всего работает со внешними клавиатурами, как, например, у ASUS Transformer.
Есть бесплатная версия и платный вариант с поддержкой SSH и SFTP.
Python для Android: Как начать делать кроссплатформенные приложения с Kivy
В этом руководстве приведены шаги, необходимые для создания кроссплатформенного приложения для Android с использованием Python-фреймворка Kivy и Linux Ubuntu. Перед началом установки и запуском Kivy необходимо установить его зависимости. Большая часть времени уйдёт на подготовку рабочей среды Kivy путем установки библиотек, необходимых для его работы. В этом уроке Kivy будет установлен в виртуальной среде.
Используемой платформой будет Linux Ubuntu 18.04 с Python 3.6.5. При запуске Kivy на разных платформах появляются некоторые различия. Чтобы иметь возможность устанавливать библиотеки, перемещаться по каталогам ОС, копировать/удалять/извлекать файлы, запускать скрипты Python, читатель должен иметь базовое представление о командах терминала Linux и Python.
1. Введение
Kivy используется для создания естественных пользовательских интерфейсов с преимуществами абстракции и модульности. Он отделяет разработчика от ненужных и сложных деталей и просто предоставляет простые API для выполнения сложных задач. В результате вы должны определить, какие бэкенд библиотеки Kivy будет использовать для выполнения своих задач. Мы собираемся использовать SDL ( Simple DirectMedia Layer) — кроссплатформенную библиотеку для низкоуровневого доступа к графическому оборудованию через OpenGL. Помимо SDL, другие библиотеки, такие как GStreamer, используются для обработки аудио и видео. Поскольку такие библиотеки написаны на C, нам также потребуется Cython.
2. Установка зависимостей Kivy
Основываясь на инструкциях по установке Kivy на Linux (https://kivy.org/docs/installation/installation-linux.html), здесь перечислены необходимые библиотеки для установки SDL2 и GStreamer. Обратите внимание, что вы можете выбрать версию Python для использования в Kivy с помощью python и python-dev для Python 2 или с помощью python3 и python3-dev для Python 3. Pip также находится в перечисленном ниже списке для последующего использования в подготовке виртуальной среды Kivy.
3. Создание виртуальной среды для установки Kivy
После подготовки зависимостей Kivy мы можем начать установку самого Kivy, создав его виртуальную среду. Нет необходимости использовать виртуальную среду для запуска Kivy, но есть рекомендация отделить Kivy от других уже существующих проектов.
Перед началом создания виртуальной среды мы должны убедиться, что инструменты, необходимые для ее создания, уже установлены и обновлены. Следующие команды гарантируют, что инструменты virtualenv и setuptoolsуже существуют и обновлены.
virtualenv используется для создания изолированной среды Python. Для получения дополнительной информации о преимуществах виртуальной среды вы можете посетить страницу https://virtualenv.pypa.io/en/stable/. setuptools используется для упаковки проектов Python.
После этого мы готовы создать виртуальную среду Kivy. Следующая команда создает среду с названием mykivyinstall.
Аргумент —no-site-packages используется для изоляции среды от основной установки Python. Это делается для того, чтобы вы могли свободно работать с этим проектом, не затронув другие.
После введения этой команды мы ожидаем получить новую папку в текущем каталоге, названную в соответствии с именем виртуальной среды, как показано на рисунке 1.
После создания виртуальной среды мы можем активировать её, чтобы начать установку Kivy. Она может быть активирована следующей командой.
Точка (.) в предыдущей команде представляет собой встроенную команду, которая выполняет содержимое файла, переданного в качестве аргумента. Это синоним источника команды. В результате предыдущая команда идентична этой команде:
Командная строка должна измениться после активации виртуальной среды и начать выглядеть следующим образом:
4. Установка Cython
Перед установкой Kivy Cython должен быть установлен в такой же среде в соответствии со следующей командой:
Обратите внимание, что версия Cython зависит от версии Kivy, которая будет установлена. В данный момент последняя версия Kivy — 1.10.0, и для нее требуется Cython 0.25.2, и именно поэтому она используется в приведенной выше команде. После этого мы готовы к установке Kivy.
5. Установка Kivy
Kivy можно установить с помощью pip в соответствии со следующей командой:
После этой команды ожидается, что Kivy будет загружен и установлен автоматически. Но учтите, что установка Kivy — это трудная часть, потому что существует множество зависимостей, которые являются варьируются в зависимости от используемой машины, платформы и библиотек, которые у вас уже есть и которых нету. Процесс не является простым и прямолинейным, поэтому вы должны искать альтернативные способы решения ошибок установки. Например, Kivy можно установить с помощью wheel-файла или путем клонирования его проекта github в соответствии со следующей командой:
6. Импорт Kivy
При достижении этого этапа, ожидается, что Kivy уже установлен и успешно работает на вашем компьютере. Мы можем протестировать эту среду, импортировав Kivy, как показано на рисунке 2. Виртуальная среда активирована, Python активирован и Kivy успешно импортирован.
7. Создание простого приложения Kivy
Убедившись, что Kivy работает хорошо, мы готовы создать наше первое приложение Kivy.
Приложение Kivy представляет из себя простой файл Python, который содержит код Kivy. Файл в нашем приложении будет называться « main.py». Причина в том, что при создании мобильного приложения должен быть файл с именем « main.py», который является входом приложения. В приложении, которое будет создано, будет три виджета Kivy, которые представляют собой ввод текста (text input), ярлык (label) и кнопку (button). Эти виджеты располагаются вертикально в окне при использовании коробочной схемы расположения инструментов. Они появятся в соответствии с тем порядком, в котором были добавлены в коробочную схему расположения. Другими словами, текстовый ввод будет первым виджетом, ярлык вторым и кнопка в самом низу. Когда кнопка нажата, текст, введенный в текстовый ввод, будет отображаться в ярлыке. Вот код Kivy этого приложения.
На рисунке 4 показано окно с тремя созданными ранее виджетами. Обратите внимание, что высота окна делится поровну между тремя виджетама так, чтобы каждый виджет имел одну третью высоты окна. В этом примере сообщение « Hello Kivy» вводится в поле текстового ввод. Когда кнопка нажата, сообщение появится в ярлыке.
На этом этапе можно сказать, что приложение Kivy для рабочего стола успешно создано. Теперь мы можем начать упаковку этого проекта как приложения для Android.
8. Установка Buildozer
Инструмент Buildozer используется для упаковки проекта в качестве приложения для Android. После установки Buildozer автоматизирует процесс создания приложения для Android. Чтобы установить Buildozer, необходимо разрешить некоторые зависимости. В дополнение к установленным ранее Cython и git, есть некоторые другие библиотеки, которые должны быть установлены. На основе инструкций по установке взятых с http://buildozer.readthedocs.io/en/latest/installation.html, все зависимости можно скачать и установить с помощью следующих команд Ubuntu:
Buildozer может быть установлен с помощью этой команды. Эта команда гарантирует, что Buildozer будет установлен и обновлен.
После успешной установки Buildozer, давайте подготовим все необходимые файлы, чтобы успешно создать приложение для Android.
9. Создание файла buildozer.spec
Структура нашего проекта показана на рисунке 5. В папке с именем simpleapp размещен файл main.py, созданный ранее. Красота Kivy заключается в том, что этот же файл Python будет использоваться без изменений в приложении для Android. Но есть и другой файл с именем buildozer.spec, который необходим для создания приложения. Этот файл содержит информацию об Android-приложении, такую как название и версия. Как создать этот файл?
Файл buildozer.spec может быть сгенерирован с использованием инструмента Buildozer. Измените текущий рабочий каталог на каталог, в котором размещён файл приложения main.py, а затем выполните следующую команду:
Появится сообщение, указывающее, что был создан файл buildozer.spec, как показано на рисунке 6.
Далее перечислены некоторые из важных свойств приложения Android в файле buildozer.spec:
Например, заголовок (title) содержит заголовок приложения, исходный каталог (source directory) ссылается на каталог приложения, который устанавливается в этом случае как текущий каталог, версия приложения, версии Python и Kivy и прочее. Эти поля находятся внутри раздела [ app] файла спецификации. Вы можете проверить спецификации приложения пройдя по этой ссылке http://buildozer.readthedocs.io/en/latest/specifications.html. Вы также можете отредактировать файл спецификации, чтобы изменить все поля, которые, по вашему мнению, требуют редактирования.
После подготовки всех файлов, необходимых для создания Android приложения, давайте наконец его создадим.
10. Создание приложения для Android с помощью Buildozer
Buildozer — хороший инструмент для создания приложения для Android, потому что он готовит среду в соответствии со всеми требованиям по созданию успешного приложения. Эти такие требования такие, как python-for-android, Android SDK, NDK и другие. Внутри каталога приложения его можно создать, используя следующую команду:
На рисунке 7 показан ответ при вводе команды. При создании приложения в первый раз, Buildozer должен загрузить все эти зависимости. Это займет некоторое время, пока они загрузятся и установятся. Потерпите.
После выполнения команды файл APK будет найден в следующем каталоге проекта: /simpleapp/.buildozer/android/platform/build/dists/simpleapp/bin. Файл APK можно перенести на устройство Android для его запуска. Также можно подключить устройство Android к машине, создать, развернуть и запустить приложение, используя одну команду, которая выглядит следующим образом:
На рисунке 8 показан запуск приложения для Android.