Qt и Android Market или вторая жизнь Анаграмм

    В конце ноября мне стукнула моча в голову и я написал достаточно глупый и несуразный пост об одном из своих приложений, находящийся здесь. Тогда пост был заминусован, что в принципе логично, учитывая то, какого качества он был.

    Тем не менее, от того, что пост был хреновым, само приложение хуже не стало. Хоть и на некоторое время было отложено в долгий ящик. Вчера вечером, я как-то мельком проглядывал блог ребят из Сutehacks, компании, занимающейся разработкой Qt приложений и старающихся сделать на этом денежку. Так вот, просматривая блог, я наткнулся на пост, в конце которого была презентация под названием «Targeting Android with Qt».

    В этой презентации, помимо каких-то абстрактных мыслей, разработчики подробно объяснили, какие шаги необходимо сделать для того, чтобы портировать своё приложение на новую платформу, а затем и загрузить его в Android Market. Здесь я хочу вкратце перечислить эти этапы, а всю дополнительную информацию желающие смогут получить из оригинальной презентации на Slide Share.

    image


    Итак, что нам нужно сделать:
    1. Написать приложение на Qt
    2. Используя Necessitas Qt SDK собрать и протестировать его для платформы Android
    3. Внести некоторые правки в AndroidManifest.xml и пересобрать приложение
    4. Подписать своё приложение RSA-ключом
    5. Зарегистрироваться в Android Market
    6. Опубликовать своё приложение
    7. Тестируем загрузку из маркета

    Стоит упомянуть, что на вчерашний вечер, у меня были завершены лишь первые 2 пункта. По первому пункту писать что-то смысла не вижу, второй же пункт ведёт на одну из статей хабра, посвящённую рассматриваемой тематике.

    Начнём с третьего. в файле AndroidManifest.xml нашего проекта, необходимо будет поправить 2 строчки:
    ---a/android/AndroidManifest.xml
    +++b/android/AndroidManifest.xml
    @@-1,5+1,5@@
    <?xmlversion='1.0'encoding='utf-8'?>
    -<manifestpackage="eu.licentia.necessitas...
    +<manifestpackage="com.kafeg.Anagram"...
    

    и
    ---a/android/AndroidManifest.xml
    +++b/android/AndroidManifest.xml
    @@-14,4+14,5@@
    <supports-screensandroid:largeScreens="t...
    <uses-permissionandroid:name="android.pe...
    <uses-permissionandroid:name="android.pe...
    +<uses-sdkandroid:minSdkVersion="7"/>
    </manifest>
    

    также, стоит помнить, что опции по использованию Ministro следует оставить по умолчанию, то есть велеть приложению качать зависимости из маркета. После этого, пересобираем наше приложение и копируем получившийся <app-name>-debug.apk в какую-либо директорию под именем <app-name>-1.0.apk. И переходим к 4-му этапу.

    Здесь нам необходимо будет выполнить две команды в консоли, производящие некие магические действия над полученным пакетом:
    $ keytool -genkey -v -keystore kafeg-release-key.keystore -alias kafegkeystore -keyalg RSA -keysize 2048 -validity 10000
    ... bla bla bla ...
    $ jarsigner -verbose -keystore kafeg-release-key.keystore ./<app-name>-1.0.apk kafegkeystore
    

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

    А дальше самые интересные этапы. Для начала нам нужно зарегистрироваться в маркете. Для этого нам понадобится примерно $25 долларов и кредитка. Переходим по ссылке market.android.com/publish и следуем инструкции, там всё понятно (а кому не понятно, милости прошу посмотрет ьпрезентацию по ссылке выше). Единственное и самое главное, что я хочу отметить на данном этапе — не нужно специально заказывать отдельную кредитку, можно оплатить взнос простой дебетной (зарплатной) картой. К примеру у меня это Visa Electron от КазКома.

    После оплаты, списанная сумма будет висеть в заблокированной сумме некоторое время. К примеру у меня она висит в заблокированных до сих пор, хотя Google Checkout говорит о том, что продавец уже благополучно списал всю сумму. Собственно всё, теперь мы можем публиковать бесплатные приложения. Чтобы публиковать платные, нужно зарегистрироваться как продавец, это не входило в мои планы. Идём далее…

    Интерфейс публикации нового бесплатного приложения появится сразу, но заработает он примерно через 6-10 часов после оплаты. До истечения этого срока, при попытке загрузить новый скриншот или иконку Вы будете получать сообщение типа «Невозможно обработать ответ в формате JSON, отключите синтаксический анализатор, если он у вас есть блаблабла». Когда же пройдёт некоторое время, интерфейс заработает и спокойно скушает всё что Вы ему скормите. Единственная проблема с которой я столкнулся в последствии — моё приложение хоть и опубликовано, а также доступно по прямой ссылке, но тем не менее оно некоторое время (около получаса) не появлялось в результатах поиска… это слегка напрягало.

    Ну и наконец тестирование. Для этого я взял свой смарт, удалил с него тестовое приложение, выключил дебаг в натсройках, удалил Ministro вместе со всеми скачанными приложениями, зашёл в маркет на страницу своего приложения и нажал кнопку «Установить». После установки запустил прилождние, оно потребовало докачать Ministro и бибилиотек, жмякнул пару раз Ок и через 2 минуты уже играл.

    Вот в общем и всё. Вчера, зарегистрировавшись в маркете за 15 минут я немного недоумевал читая пост Долгий пуnь к Android Market, так как описанное там (кроме получения бабла) я выполнил за вечер без всякой предварительной подготовки.

    Конечно хотелось бы получить некоторую обратную связь, сообщения об ошибках и крахах, замечания, дополнения и тому подобное для данного приложения, так как оно является одним из первых Qt приложений, размещённых в маркете. Спасибо.

    Прямая ссылка, для просмотра в браузере: market.android.com/details?id=com.kafeg.Anagram
    QR-код, для загрузки с устройства:
    image
    Страница с результатами поиска

    Я считаю, что цель достигнута, доказательства работоспособности на лицо и уже вполне можно начинать портировать множество готовых Qt-приложений на новую платформу.
    Поделиться публикацией

    Комментарии 19

      +4
      Отличное оформление программы. Скажите Виталий, вы устали от Формулы 1 и подались в кодерство?
        0
        Ага, Вы правы. Надоело чувство скорости, хочется покоя и уединения… ;-)
          0
          А что будет с приложением когда нецесситас сменит номер версии qt и api изменятся?
            0
            А ничего и не будет. Просто в Ministro с серверной стороны будут добавлены скомпилированные библиотеки для Qt 5. А те что сейчас лежат у них репах так и останутся там лежать и их всё ещё можно будет загрузить.
              0
              Не совсем понимаю принцип загрузки, ведь в имени библиотеки нет указания номера версии.
                0
                Будет выпущена новая версия Министро. Все приложения которые будут собираться после её выпуска, будут требовать загрузки из маркета именно её. Это уже работает с Министро и Министро 2. Где старые приложения в зависимостях имеют Министро 1, а новые — Министро 2.
        +2
        Я ей «сани», а она не принимает и требует «анис». Так и должно быть или словарь маленький?
          0
          Ну она изначально получилась вот такая… с характером. Алгоритм работает по принципу взять слово -> раскидать в нём буквы -> сравнить вводимое пользователем с текущим взятым словом. Поэтому на этапе проверки слово пользователя сравнивается не со всем словарём, а только с одним взятым словом, в данном случае — «анис».
            +2
            А почему после ввода слова не проверять его на соответствие по буквам и если все хорошо, то не искать такое в словаре? Это настолько медленно?
              –13
              А х его з… Просто изначально решил сделать вот так… В будущем возможно алгоритм можно будет переделать.
            0
            Вы хотя бы можете ввести слово, у меня только одну букву принимает, последующие буквы заменяют предыдущую.
            0
            Не знал что можно так просто пересобрать Qt приложение под Андроид! А какие модули доступны?
              0
              Почти все стандартные. Отсутсвует разве что Phonon и все драйвера, кроме sqlite для QtSql. Кроме того, насколько мне известно, работает большое количество Qt Mobility модулей.
              +1
              Хм, презентация говорит про QML в основном, а с нормальным (плюсовым) Qt как обстоят дела?
                +3
                Точно также. Всё прекрасно работает. Ведь QML — это по большей части обёртка над объектами Qt/C++
                0
                Судя по средней оценке в 2.2 — пользователи очень рады, что им приходится еще дополнительно качать и устанавливать Ministro :) Зато быстро с Qt портировалось, да.
                  0
                  Это да, с оценкой не поспоришь) Я надеюсь что после выхода Qt5 ситуация всё же изменится, так как там обещают поделить библиотеку на большее количество независимых кусков…
                    0
                    Кстати, а как же тот же 2GIS например работает на Qt, но установки Ministro не требует? )
                      0
                      Они клонировали репозитория necessitas и сделали свою ветку, с которой линковались статически.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое