Pull to refresh

Поступаем в Android Market с помощью AppInventor

Reading time10 min
Views4.7K
Материал содержит опыт разработки приложения под мобильную операционную систему Google Android инструментом компании-разработчика этой ОС – AppInventor, регистрации аккаунта разработчика Google, размещения созданного приложения в Android Market и его обновления.
Опыт может быть полезен как комплексом, так и частями тем, кому интересно написать достаточно простую программу для этой ОС не вникая в тонкости Java, Eclipse и прочих радостей Android SDK.

В этой части:
  • 1. Предварительная подготовка
  • 2. Разработка интерфейса программы
  • 3. Блок-описание программы (программирование)
  • 4. Выводы по написанию и получившемуся реультату


1. Предварительная подготовка


Для выполнения поставленной задачи – написания и публикации приложения под ОС Google Android, необходимо выполнить несколько манипуляций в браузере. Пройдёмся по пунктам:
a. если у вас… если у вас нет аккаунта в системе Google, вам нужно его создать. Для этого достаточно зайти на сайт, например, http://gmail.com/, найти надпись «Create an account»/«Создать аккаунт», найти на странице переключатель языка, выбрать ваш родной язык из списка и ответить на несколько вопросов в процессе регистрации. В дополнение у вас появится замечательный сервис электронной почты, а при желании большое количество других полезных сервисов компании Google;

b. нужно иметь учётную запись в инструментарии разработчика Google AppInventor. На данном этапе Google не предоставляет доступ к инструментарию кому попало. Поэтому нужно перейти по адресу http://appinventor.googlelabs.com/, войти на него под учётной записью в Google и подать заявку в автоматически открывшейся форме путём её заполнения. (Совсем как на хабре, только готовую полезную программу иметь не обязательно.) После этого шага нужно подождать благоволения со стороны Google. Я ждал его примерно 2 недели;

В принципе, это основные действия, которые необходимо совершить, для получения возможности писать, точнее собирать программы средствами AppInventor. И чтобы не терять времени в ожидании удовлетворения вашей заявки, можно загрузить и установить необходимое для работы программное обеспечение (см. ниже).
Если разработчика интересует распространение собранной программы, то необходимо выполнить ещё один пункт, а именно:

c. «купить место разработчика Google». На сегодняшний день эти места стоят $25 (двадцать пять долларов США) за штуку. По словам компании, такие меры призваны защитить экосистему Android от потока говно-программ. (За примером далеко ходить не нужно, достаточно почитать разделы 2-4, но у нас-то другие цели...) Тем не менее для регистрации себя как программиста под Android необходимо перейти по ссылке http://market.android.com/, где пройти процедуру регистрации (на данный момент на английском языке) и оплаты с помощью системы Google Checkout. Для это вам потребуется пластиковая карта международных платёжных систем (приобретается отдельно). Более детально процесс регистрации описан в разделе 5.

Однако, поскольку, возможно, не все захотят пробиться в Android Market, а кто-то, не обладающий программистскими навыками, захочет написать программу для себя — этот последний пункт выполнять следует не всем.
Непосредственно для написания программ нужно сделать еще пару вещей. Нужно установить клиентский Java модуль и настроить подключение к Android-телефону. Как выполнить эти процедуры и решить возникшие проблемы описано здесь http://appinventor.googlelabs.com/learn/gettingstarted.html. Коротко пробежимся по этапам:

— если на вашем компьютере не установлена Java, следует скачать последнюю версию с сайта http://java.com/ и установить её на компьютер (проверить установлена ли Java можно тут: http://www.java.com/en/download/help/testvm.xml, рекомендуют установить новейшую версию);

— далее нужно скачать и установить пакет AppInventor Extras Software, содержащий драйверы и другое программное обеспечение. Ссылки для различных операционных систем: Mac OS X, Windows, Linux. Разработчики рекомендуют не изменять каких-либо параметров при установке;

— наконец нужно изменить несколько настроек в телефоне. Тут хотелось бы заметить, что для написания программы вовсе не обязательно подключать телефон к AppInventor, скомпилированную программу (.apk) можно скачать из веб-интерфейса инструментария и установить на телефон вручную в любой момент. Однако при подключении к телефону, на последнем, в режиме реального времени, выполняется разрабатываемый проект, что весьма удобно для поимки разных багов, поэтому продолжим. Итак, в телефоне нужно отключить автоповорот экрана (Настройки-Экран-Автоповорот экрана), разрешить установку из неизвестных источников (Настройки-Приложения-Неизвестные источники), включить отладку по USB (Настройки-Приложения-Разработка-Отладка по USB) и настройку, не позволяющую экрану выключаться при соединении с компьютером (Настройки-Приложения-Разработка-Оставить включенным). А подключив телефон к компьютеру ни в коем случае не монтировать SD-карту как флешку.

Нужно принять во внимание также то, что после подключения на телефон будет установлена программа AppInventorPhoneApp размером 3,81 Мб, т.е. свободная телефонная память понадобится.
После многочисленных подготовительных операций и принятия вашей заявки в AppInventor, вы получаете письмо на электронную почту и доступ к этому веб-приложению. Можно начинать реализацию творческих планов!

2. Разработка интерфейса программы


Приложение, которое я решил создать для публикации в Android Market не изобилует сложностью вещей. Пусть программа будет вычислять корни квадратного уравнения. Апдейты будут плавно приводить программу к решению систем уравнений, а если хватит пару, к решению системы неравенств. Всё лучше, чем заставлять картинку с кошкой мяукать.

Определимся с требованиями к нему: так как наша программа будет вычислять корни квадратного уравнения, как минимум должен быть реализован ввод коэффициентов и вывод результатов.
Предполагаемый интерфейс можно прикинуть на бумаге или набросать презентацию. Для первой версии сойдёт что-то типа этого:



Что ж, приступим к реализации!

Подключаем телефон к компьютеру, не монтируем карту как накопитель, заходим на страницу http://appinventor.googlelabs.com/, вводим регистрационные данные, жмём «Sign in» и попадаем в AppInventor BETA.
Описывать появившуюся страницу не имеет особенного смысла (пригодится лишь ссылка «Learn» в центре верхней части страницы).



Поэтому смело жмём кнопку «New» и вписываем в появившемся окне название нового проекта — uSolver, что должно означать Universal Solver, т.е. универсальный решатель (не путать с Deep Thought).



Жмём на «OK» и попадаем в модуль «Design»:



Тут уже есть что описать.

В центре окна находится панель «Viewer», служащая для предпросмотра интерфейса разрабатываемого приложения и выбора управляющих элементов (это не окно эмулятора или симулятора!). Сами элементы интерфейса и некоторые другие управляющие структуры содержатся в панели «Palette», где они распределены по категориям. Настройки каждого использованного элемента доступны в палитре «Properties». Общая структура элементов интерфейса отображена в палитре «Components», где элементы можно удалять и переименовывать.

Можно сразу же нажать кнопку «Open the Block Editor» и там установить подключение к телефону, для отслеживания изменений дизайна вживую, но на первый раз не рекомендую загромождать голову ещё одной игрушкой.

Лучше приступим к интерфейсу. Переименуем заголовок стартового экрана и изменим цвет фона (дабы белый не утомлял):



Для управления расположением управляющих элементов (контролов) есть категория «Screen Arrangments». Нас интересует последовательное следование элементов сверху вниз. Выбираем нужную категорию (КО: пыцкаем, естественно, на неё левой кнопкой), раскрывается её содержимое, хватаем нужное выравнивание и тащим его на пустое пространство экрана нашего приложения, затем немного настроим его вид в панели «Properties»:



Если выделение компонента потеряно, следует нажать на него во «Viewer» или «Components» и он будет доступен для настройки свойств.
Начнём заполнять экран согласно выбранной концепции…
Первым у нас должен быть общий вид решаемого уравнения. Запихнём его в Label. Palette->Basic->Label, тянем его внутрь выравнивания и настраиваем параметры:



Далее нужно разместить поля вводов коэффициентов в одну горизонтальную линию и расположить их группу по центру экрана. Для этого воспользуемся табличным выравниванием из 5 ячеек в одну строку:



Три центральные ячейки будут занимать поля ввода. Для этого перетягиваем поля в примерные места расположения ячеек:



Не забываем настраивать параметры, на свой вкус.
Для вывод решений уравнения предусмотрим два контрола «Label». Их можно внести друг под другом в вертикальное выравнивание после блока с табличным выравниванием:



Кажется это всё, что планировалось сделать. Хочу обратить внимание на имена некоторых полей ввода (TextBox) и меток (Label). Эти имена будут использоваться в дальнейшем и они должны нести хоть какую-то смысловую нагрузку, иначе в процессе составления блочного «кода» возможны недоразумения. Впрочем, переименовали мы только те, которые нужно.

3. Блок-описание программы (программирование)


После создания интерфейса пришло время «собрать» логику программы. Для этого жмём на кнопку «Open the Block Editor».

Браузер должен будет скачать некий файл, открыть который нужно с помощью ранее установленной Java. Обычно все действия происходят автоматически. После старта Java может выдать вопрос о местоположении файлов AppInventors Extra, которые были скачены и проинсталлированы нами заранее.

Стоит отметить, что манипуляции нужно проводить, если необходимо обеспечить подключение к телефону. Если же подключение не нужно — нажать «Cancel».
Хочу так же отметить, что процесс загрузки Редактора блоков не быстрый, но не нужно нервничать по этому поводу.

После его запуска жмём «Connect to phone», если, конечно, нужно соединение. Произойдёт подключение к телефону, установка программного обеспечения и запуск разрабатываемой программы, впрочем неработоспособной.



Если всё получилось, вернёмся к редактору блоков.

Интерфейс Редактора блоков весьма похож на интерфейс Редактора интерфейса, что символизирует. Встроенные блоки (Built-In) содержат управляющие блоки, блоки «My Blocks» — взаимодействуют с элементами интерфейса программы. Если понятно стало не всё, можно будет разобраться по ходу текста, а сейчас перейдём к делу.

Для начала определим несколько переменных – коэффициентов уравнения и его корней: a, b, c, x1 и x2. Для этого в закладке встроенных блоков «Built-In» выберем Definition -> variable и перетащим её блок на пустое поле. Переименуем его нажав на слово «variable» в «a», установим тип переменной — number наведя на вопросик в прикрепившемся блоке светло-коричневого цвета и выбрав в меню «123». Значение переменной по умолчанию установим равным «0» нажав на «123» и введя «0» вместо 123. После ввода значений нужно нажимать Enter, ибо не всегда срабатывает.

Повторим те же действия для оставшихся переменных. К сожалению, я не нашёл способа скопировать блоки, поэтому придётся запастись терпением здесь и в некоторых местах далее (стоит сказать, что разработчики оповещены заинтересованными пользователями и уже работают над копи/пастой блоков).



Теперь переменным a, b, c необходимо присвоить вводимые пользователем значения. Начнём с переменной a.

На вкладке «My Blocks» выбираем блок «A» (это текстовое поле для ввода значения коэффициента a) и перетаскиваем на пустое пространство конструкцию «A.LostFocus» (это кагбэ говорит о том, что блок выполнится тогда, когда текстовое поле потеряет т.н. фокус, т.е. пользователь перейдёт к другому управляющему элементу). В поле «My Definitions» выбираем конструкцию «set global a to» и перетаскиваем её внутрь блока «A.LostFocus» так, чтобы она закрепилась в нём (это произойдёт с характерным звуком). Затем снова жмём на блок «A» и перетаскиваем конструкцию «A.Text» в пазловый вырез «set global a to». В итоге должно получиться так (процесс показан на примере компонента «B»):







Эта блок-схема означает, что при потере фокуса полем ввода коэффициента «a» переменной «a» присваивается текст, содержащееся в этом поле. Повторяем аналогичные действия для блоков «B» и «C».
На следующем шаге определим переменные x1 и x2, т.е. найдём корни уравнения.
Насколько я понял, реализовать математические вычисления в текущей версии AppInventor — не просто формулу написал. Будем городить процедуру и вводить дополнительные переменные…
Вычислим значение дискриминанта (который D=b^2-4ac), для этого введём дополнительную числовую переменную — «D» по указанной для переменных a, b, c, x1 и x2 схеме и вытащим блок «set global D to» на рабочее пространство. Тут начинается самое неприятное: комбинирование математических операторов в последовательность для вычисления искомого значения — достаточно вытаскивать нужные операторы из Built-In -> Math блоков и ставить их в слоты блока «set global D to». В аргументы операторов подставляем нужные переменные. Наверное, это проще увидеть на картинке, чем описать словами:



Подсказка: следует понять, что дискриминант это прежде всего разность. Разность произведения b на b и произведения 4 на произведение a на c. Где 4 – числовая константа.

Кстати, числовые константы удобно получать нажав левой кнопкой на пустое пространство, выбрать там Math -> 123 и заменить это 123 на нужное числовое значение. То же можно проделывать и со всеми остальными встроенными блоками!

Проверку знака дискриминанта пока вводить не будем, рассчитаем корни с тем, что есть.
Вытянем из My Definitions конструкцию «set global x1 to» на пустое пространство и приведём значение переменной x1 в соответствие с формулой: x1=(-b+sqrt(D))/(2*a). То же проделаем и с x2, где x2=(-b-sqrt(D))/(2*a).

Теперь все нужные значения обсчитываются.

Так как предполагается выдача сосчитанных корней после потери «фокуса» любого из полей ввода коэффициентов уравнения, а в отсутствии копи-пасты набирать ещё несколько раз «формулы» ну очень лень, напишем процедуру, которую будем вызывать в блоках ".LostFocus".

Начнём. Вытаскиваем блок Built-In->Definition->procedure переименовываем её в X12 (кликнув по слову «procedure») и прилепляем ей в слоты «arg» блоки Built-In->Definition->name, называя их «ax», «bx», «cx» (все переменные глобальные, поэтому требуется их переименование).



Внутрь процедуры помещаем вычисление «D», «x1» и «x2», а так же блок My Blocks->X1-> «set X1.Text to», в слот которому устанавливаем значение корня x1 (My Blocks->My Definitions-> global x1) и аналогичное для текстовой метки «X2»:





Вызывать эту процедуру будем в каждом блоке «потери фокуса». Вызов осуществляется блоком My Blocks->My Definitions-> call X12 с параметрами «global a», «global b» и «global c»:



На картинке выше видно, что я разобрал блок «A.LostFocus» и выстраиваю цепочку его содержимого на пустом пространстве. Это связано с тем, что мне было довольно трудно поставить вызов процедуры в нужное место в цепочке. Такая проблема возникает довольно часто и я нашёл выход компонуя цепочку блоков вне вызова, а потом прикрепляя всё внутрь.

Точно такие же вызовы помещаются в остальные блоки ".LostFocus". Окончательно всё должно выглядеть примерно так:



На телефоне решение уравнения x^2-9x+20=0 будет выглядеть следующим образом:



Сразу вывалились недочёты настройки некоторых контролов… будет что исправить при апдейте.

Если телефон не был подключён к компьютеру можно скомпилировать приложение в веб-интерфейсе AppInventor, а так же создать Barcode:



Приложение создано, пришло время для некоторых выводов.

4. Выводы по процессу создания и получившемуся результату


Могу сказать, что Google даёт весьма простой инструмент для возможности создания не весть каких сложных приложений. Инструмент этот безусловно сырой, нет многих функций, методов и всего такого, которые есть в SDK. Однако, команда Google откликается на предложения и планирует реализовать множество новых функций. Предложения и замеченные баги можно посмотреть и дописать тут: http://code.google.com/p/app-inventor-for-android/.
Основные недостатки на мой взгляд и на данный момент (Build: Mon Sep 27 17:51:06 2010 (1285635066) — 17446992):
  • нет поддержки языков отличных от английского. Это касается не только интерфейса AppInventor… ни имя приложения, ни любой текст в нём не могут быть иными (ожидается исправление ситуации);
  • готовое приложение занимает чудовищно много памяти. Например, это приложение занимает 1,2 Мб, а в памяти телефона все 3,8! Это связано со встраиванием всех (!) компонентов, даже не используемых в программе, в выполняемый файл. Разработчики знают, обещают исправить положение;
  • всякие мелочи вроде копи/пасты, невозможности заменить иконку и пр.

Но, не смотря на такие недостатки, считаю, что этому инструменту есть место, ибо без погружения в SDK создавать им можно отнюдь не говнопроги.
В любом случае защитой от говнопрог, доступных в Android Market будет являться плата за получение место разработчика. Те самые $25.
Кстати, а не пришло ли время нам запихнуть туда своё творенье?..
Tags:
Hubs:
+5
Comments4

Articles

Change theme settings