Около года назад я поучаствовал в конкурсе Kivy App Contest 2014. Игрушка заняла одно из призовых мест (номинация «лучшая идея») и ко мне неоднократно обращались с просьбой выложить её на маркет. Я долго откладывал, но позавчера наконец созрел и потратив вечер — выложил. Оказалось всё совсем просто и я решил написать эту инструкцию для тех, кто, как и я, пишет на киви «в стол». Ну или тех, кто пишет на Питоне и не в курсе, что на нём можно легко писать андроидные приложения и даже выкладывать их в маркете. Инструкция рассчитана на таких же как я полнейших чайников в разработке под Android. Профессионалам можно здесь прекратить чтение, а можно поправить/дополнить в комментариях.

Для начала пара слов для тех, кто на киви (пока, это не надолго) не пишет. Киви — это очень удобный фреймворк, позволяющий на чистом Питоне писать приложения и компилировать их для Linux, Windows, OS X, Android и iOS практически не меняя код.
Сайт фреймворка.
Хороший видеокурс для начинающих и продолжающих
Список проектов написанных на киви

Итак, у вас есть приложение на киви, оно прекрасно работает на PC и теперь вы хотите выложить её на Play Store. Что для этого нужно?

Для начала — убедиться, что на андроиде оно работает не менее прекрасно. Проверить это есть два способа.
Первый из них — установить на устройстве приложение Kivy Launcher и с его помощью запустить приложение прямо из исходников. Это очень удобно, а при наличии хорошего текстового редактора можно даже разрабатывать прямо на телефоне/таблете. Но есть один нюанс. Приложение не должно пользоваться внешними библиотеками — только киви и стандартной библиотекой Питона. Если внешние библиотеки используются, всё ещё есть шанс запустить — проверьте, что библиотека не содержит никаких бинарников, только чистый Питон. Если это так, просто поместите её локально в папку с приложением и поменяйте соответственно импорты. Если бинарники всё-таки есть, из исходников запустить не выйдет, придётся компилировать. Для начала проверьте, есть ли используемые библиотеки в списке рецептов.

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

Всё что описано дальше, выполняется на маке или линуксе. На винде придётся ставить виртуальную машину и образ. На этой страничке можно скачать образ с предустановленным билдозером.

Устанавливаем программу buildozer (pip install buildozer). Заходим в папку с приложением и запускаем buildozer init. В папке появляется файл buildozer.spec. Меняем там настройки по вкусу, то, что действительно важно — requirements, а когда дело дойдёт до релиза — версия, впрочем, файл прекрасно документирован и разобраться с ним — дело пары минут. А, ну да, ещё уровень логов в начале полезно поставить 2 вместо 1, чтобы видеть почему компиляция падает, если она падает. Затем запускаем buildozer android debug.

Если всё прошло успешно, в папке с проектом появится папка bin, а в ней apk файл.
Проверяем программу, любым из двух способов, обрабатываем напильником, доводим до совершенства (шучу, совершенства не бывает). Очень полезна опция logcat. Подсоединяем устройство к компьютеру usb кабелем запускаем buildozer logcat, запускаем приложение и смотрим на компьютере логи и трейсбэки. Мне пригодилось, когда приложение просто молча вылетало при запуске…

Итак, у вас есть приложение на киви, оно прекрасно работает на андроиде и теперь вы хотите выложить его на Play Store. Что для этого нужно?

сначала компилируем релиз-версию:
buildozer android release
Получаем unsigned apk, его нужно подписать. А для этого нужно создать ключ.
Запускаем:
keytool -genkey -v -keystore путь_туда_где_будет_лежать_ключ/имя_ключа.keystore -alias короткое_имя_для_ключа -keyalg RSA -keysize 2048 -validity 10000

Ключ готов. Его нужно сохранить и беречь как зеницу глаза. Теперь нужно подписать приложение этим ключом (при выкладывании новых версий пользуемся тем же самым ключом, новый создавать не нужно).
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore путь_туда_где_лежит_ключ/имя_ключа.keystore путь_к_проекту/bin/неподписанный_apk короткое_имя

Теперь хоть файл и называется unsigned, он уже подписан. Теперь желательно оптимизировать его утилитой zipalign. она лежит в android sdk, который buildozer скачивает при установке.

zipalign -v 4 путь_к_подписанному_apk путь_туда_где_будет_лежать_готовый_apk

Итак у вас есть готовый apk.

Теперь вам нужно нарисовать несколько картинок.

Картинки следующие — иконка приложения которая будет отображаться на устройстве (её нужно прописать в buildozer.spec), иконка приложения (512х512), которая будет отображаться в маркете. Скриншоты для телефона, семидюймовых таблетов, десятидюймовых таблетов (в общем для тех устройств, для которых приложение будет показываться в маркете) и картинка 1024х500 для раздела рекомендуемое (ага, знаю, смешно, но это обязательно к заполнению). Я всё вышеперечисленное нарезал за пару минут из скриншотов, но безусловно лучше потратить время и сделать что-нибудь качественное.

Когда есть apk и все картинки, идём наконец в консоль разработчика, регистрируемся если ещё не, платим Гуглу за удовольствие 25$ (может об этом надо было написать в начале статьи?) расставляем все картиночки, пишем описания, отвечаем на пару вопросов для получения возрастного рейтинга, загружаем apk, ждём несколько часов подтверждения и любуемся приложением в маркете. Ссылки на выложенные приложения кидайте в комменты.

Комментарии (16)


  1. frol
    19.05.2015 19:33

    Дайте, пожалуйста, подсказку как найти ваше приложение. Я пробовал давно-давно Kyvi, но тогда меня останавливали три нюанса: приложение долго запускалось, кушало много памяти (ОЗУ, да и место на диске), не было ощущения «нативности» ни в каком виде. Что-нибудь улучшилось теперь?


    1. gromozeka1980 Автор
      19.05.2015 20:08

      промахнулся, не там ответил


  1. gromozeka1980 Автор
    19.05.2015 19:57
    +1

    Вот приложение, но оно не показатель, там вообще ничего не оптимизировалось, взял код как он был год назад написан и кинул на маркет: play.google.com/store/apps/details?id=org.gromozeka1980.caterpillar_logic
    в статье я давал ссылку на существующие приложения, там много интересного :)


    1. frol
      19.05.2015 20:50
      +1

      Скачал практически все приложения, которые у них там в списке… Скорость запуска, видимо, к большому сожалению никак не пофиксить. Складывается ощущение, что для хоть сколько-нибудь неубогого внешнего виду нужно потеть, так как нормальным интерфейсом обладают 2-3 приложения. На диске и в памяти, после моих экспериментов с Cordova («HTML5») приложений, Kyvi не выглядит прям ужасным монстром. Хоть скорость работы самих приложений радует (после загрузки).

      Подводя итог, к моему глубокому сожалению (я очень люблю Python), приложение для реальных пользователей на Kyvi лучше не писать.


      1. gromozeka1980 Автор
        19.05.2015 20:55
        +1

        Киви-приложения обычно очень долго грузятся первый раз (нужно развернуть всё), потом значительно быстрее, но в целом согласен, конечно. Сам на днях написал небольшую игрушку на haxeflixel, выразительностью Питона там не пахнет, но скорость, кросплатформенность, возможности именно для игростроительства очень впечатлили. Но вот конкретно эту игрушку про гусениц я бы не стал писать на чём либо другом кроме киви, кода будет больше в разы, здесь именно лэйауты, виджеты встроенные и самодельные, вот это вот всё :)


        1. frol
          19.05.2015 21:33

          Ухты, haxeflixel выглядит многообещающе. Haxe, конечно, ближе к Java, но зато не нужно 100500 ЯП учить для мобильных платформ…


        1. Nikobraz
          20.05.2015 10:32

          На ART же должно побыстрее работать?


  1. bogolt
    19.05.2015 23:35
    +7

    Это аппликация:
    аппликация

    А то что у вас в статье — это: программа, приложение, исполняемый файл или бинарный код.


    1. gromozeka1980 Автор
      19.05.2015 23:39

      конечно, как какие-то журавли, так аппликация, а как мои гусеницы, так «бинарный код». дискриминация какая-то…


      1. gromozeka1980 Автор
        20.05.2015 10:18
        +4

        ух сколько грамарнаци, оказывается :)
        исправил везде, надеюсь, кто-нибудь от этого почувствует себя лучше :)


  1. alrusdi
    20.05.2015 07:52

    Хорошая статья — спасибо! Это все ведь нужно под Linux делать? Или на Windows тоже уже доступна сборка apk?


    1. gromozeka1980 Автор
      20.05.2015 08:25

      На линукс или на маке (я собирал на маке). Для Windows есть линуксовский образ для виртуальной машины с предустановленым билдозером, в статье есть ссылка.


    1. domix32
      20.05.2015 16:27

      Под Windows запускается через BATник и запускает к сожалению не всё и не всегда


      1. gromozeka1980 Автор
        20.05.2015 16:54

        Насколько я понял, вопрос был не про запуск приложения под Windows, а именно про сборку apk для маркета. Пока это невозможно, только через линуксовский образ на виртуальной машине.


        1. domix32
          20.05.2015 21:12

          Если PyCharm осиливает сборку, то наверное и под Win проблем нет. Ещё есть статья про разработку при помощи Python for Visual Studio.


  1. nagimov
    25.05.2015 07:42

    ANDROIDAPI выше 14 ставить бесполезно?