Чуть раньше мы с вами думали про то, какие есть альтернативы Google Play, и как можно обходить разные способы блокировки на мобильных приложениях при помощи Google Compression Proxy и тора. Сегодня хочется поговорить о том, можно ли запустить и поддерживать полноценное мобильное приложение на Android без помощи какой либо обязательной внешней инфраструктуры. Рассказывать буду на примере всё того же приложения для просмотра рутрекера. Оно ничем особо не примечательно, но очень наглядно.



Для кого это


Сразу уточню, кому это может быть актуально. Злонамеренное использование приходит в голову в первую очередь, но мне скорее хочется помочь разработчикам, которые в силу каких-то условностей не могут выложить приложение, или же не смогли прорваться через роботов, сидящих на поддержке Google по вопросам несправедливого бана приложения. Так же есть просто приложения для узкого круга пользователей или приложения для некой компании. Ну или вы просто можете внезапно оказаться связаны такими условиями, что не можете публиковать своё приложение на Google Play (сталкивался, да).

Этап первый. Установка


На самом деле, это самый сложный этап — ваше приложение должно как-то попасть пользователю на устройство. Если приложение рассчитано на казуальных пользователей, которые могут поставить что-то только из Google Play, то тут, конечно, увы и ах. С другой стороны, если у вас приложение именно такого рода, то вы, скорее всего, сможете воспользоваться Google Play.

Ранее я думал про Yandex.Store — но опыт использования показывает, что он просто медленно тухнет, покинутый и забытый (даже сотрудники Яндекса не могут ответить на вопросах о планах на его счёт — а я спрашивал).

Далее в голову приходит F-Droid. Вариант неплохой, но обладает несколькими минусами, которые могут быть для вас фатальны:

  • Вы должны предоставить исходный код проекта;
  • У пользователя должно стоять приложение F-Droid, или надо его как-то на это уломать;
  • Обновления без предварительного удаления в таком случае смогут устанавливаться только из F-Droid (они сами собирают и подписывают ваше приложение из исходного кода);
  • Обновление программы сможет происходить только раз в сутки;
  • В результате вы остаётесь намертво привязаны к F-Droid, что тоже не очень круто.

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

Что же делать? Ответ довольно топорен в своей простоте — просто распространяйте приложение без каких либо сторов — в виде apk файла! Можно хранить его на любом сервере — от FTP и HTTP до шары на дропбоксе. Это, конечно, затребует галочку на “установку приложений из сторонних источников” — но она нам нужна в любом случае. Да и пользователи уже давно научились ставить всё, что им нужно — те же покемоны, установленные на пике популярности чуть ли не на каждом десятом телефоне (при отсутствии их в русском гугл плее) это наглядно показывают (да, покемонов я тоже люблю за то, как они наглядно показывают многие вещи). В этом случае вы можете разложить яйца по куче разных корзин — у вас может быть множество источников установки и обновления вашего приложения.

Серьёзный минус только один — в момент установки никак нельзя проверить, действительно ли это ваше приложение, или злой фейк. Ну увы. Для хардкорных параноиков можно публиковать хэш на доверенном ресурсе, например.

В моём случае я использовал инфраструктуру github, поскольку разрабатываю приложение с открытым кодом (и люблю совместную работу, пулл реквесты и всё это). Но повторюсь — можно было бы использовать всё что угодно — 4pda, торренты, FTP, HTTP, Dropbox, передачу apk через телеграмм, хостинг на narod.ru и так далее. Любое извращение, которое только придёт вам в голову.

Этап второй. Отладка


Казалось бы, без отчётов гугла жизнь больше не мила, и мы больше ничего не сможем отладить. Но это не так. Есть большое количество сервисов, которые предлагают нам гораздо больше всего интересного, чем гугл. Как вы думаете — почему внутри каждого пятого приложения оказываются бинарники crashalytics? Просто потому, что это гораздо удобнее!

Итак, вы можете собирать информацию о падениях сторонними инструментами. Сам я использовал crashalytics и Acra. Сrashalytics даёт вам из коробки всё, что можно — но в своём облаке. Acra даёт вам даже больше и предлагает кучу вариантов бэкенда — но это надо делать и думать, что не всегда хочется. Так что Acra я выбирал в том случае, если данные просто нельзя было передавать в чужое облако. Для Acra был написан простенький бэкенд, который складывал репорты в Elasticsearch, после чего их можно было смотреть в Kibana (просто пользуясь текущей инфраструктурой).

Так что после получения репорта всё зависит только от вашей фантазии — собранные данные можно передавать по емейлу, через веб сервера, через сервера в торе, почтой России, отправлять гонцами и так далее.

Этап третий. Обновление.


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

На текущий момент рассматриваем вариант с тем, что вы не используете никакие сторы, которые об этом заботятся. В таком случае, вам нужно иметь некий пул серверов с метеданными об обновлении и собственно бинарниками. Как и ранее — всё ограничивается только вашей фантазией. А гарантом того, что это всё ещё ваше приложение, является подпись, несовпадение которой проигнорирует только очень бестолковый пользователь (вряд ли он является вашей ЦА). Ну и ничто не мешает вам провалидировать скачанное обновление любыми своими методами.

В моём случае использовался всё тот же github — там есть удобное API для получения данных о релизах, и мне не нужно беспокоиться о трафике, доступности и прочих вещах. Если же ваше приложение банят где ни попадя — вполне можно при запуске запускать тор и скачивать обновление оттуда.

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

Этап четвёртый. Аналитика.


Всё хорошо, у вас есть работающее активное приложение и пользователи. Непонятно одно — какого чёрта там происходит?!

Если в Google Play вы это решали при помощи Google Analytics для Android, то теперь… Вы можете это решать это при помощи любого другого сервиса аналитики. Включая возможности того же Fabric. Дальше повторяться не буду — вы полностью контролируете, что, куда и как вы шлёте.

Пример с Fabric (я собираю только данные о тайтлах просмотренных страниц из чистого любопытства).

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

Этап пятый. Монетизация


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

Итог


Внезапно оказывается, что принципиальных проблем-то нет. Приложение может полноценно работать — не так чтобы сферически в вакууме, но по крайней мере со множеством различных взаимозаменяемых инфраструктур, не опираясь при этом на гугл. Так что если вас забанили — не отчаивайтесь! Способ выжить есть. Конечно, будет труднее — но это уже бесконечно лучше, чем просто сворачиваться и расходиться. И я очень надеюсь, что многие так поступят, появится много популярных приложений, которые работают автономно, и это, в том числе, окажет влияние на Google — возможно, они наконец посадят несколько человек из плоти и крови на разбор вопросов по блокировке.

Касательно моего приложения, которое я использовал в качестве примера — гитхаб говорит, что у него 20.000 загрузок. Даже если половина из них это обновления, мне всё равно кажется, что результат всё равно весьма достойный — с учётом того, что я нигде его не рекламировал (зачем?), и оно описано только на хабре, рутрекере и 4pda.

P.S. На всякий случай предупреждаю — гугл запрещает обновление приложения из альтернативных источников.

P.S.2 Вы, вероятно, уже слышали, что Google купил Fabric. Остаётся только надеяться, что он его не сломает и не сделает обязательную привязку к Google Play. Но даже если так, у нас ещё есть много запасных вариантов.

Ссылки


  • Петиция в Google, которая просит уважать маленьких разработчиков и не банить их и их приложения за просто так. Закрыта, подписать нельзя — но просто для осознания масштаба проблемы. Не то чтобы 4000 человек не могло ошибаться, но всё же;
  • Занимательная история про удаление и восстановление приложения в Google Play. По-моему, случилось редкое чудо. А что если бы чуда не случилось?
  • Приложение для рутрекера, которое я использовал в качестве примера. Можно использовать его код, в том числе код механизма обновления — но внимательно его отсматривайте, разработка под Android — моё хобби, так что косяки высоко вероятны;
  • Пример интерфейса Fabric;
  • Идеальный релиз в Fabric.
Поделиться с друзьями
-->

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


  1. Cryvage
    31.01.2017 17:18
    +1

    И я очень надеюсь, что многие так поступят, появится много популярных приложений, которые работают автономно, и это, в том числе, окажет влияние на Google

    Ага, и в следующей версии Android они уберут возможность ставить приложения из непроверенных источников, аргументируя это, как всегда, заботой о пользователях и их безопасности. И тогда уже для установки таких приложений потребуется root, а это уже совсем другая песня.


    1. jehy
      31.01.2017 17:28

      Маловероятно — антимонопольное законодательство и все дела. В это плане успешный суд Яндекса с гуглом радует — хотя мотивы этого суда и огорчают.


      1. rg_software
        31.01.2017 18:58

        А как же Apple? Не помогает законодательство.


      1. shifttstas
        31.01.2017 19:27

        У Apple же так и ничего, вообще плохой пример насчет яндекса, тут скорее можно сравнить — почему автопроизводители не дают модифицировать своё ЭБУ или не дают возможность устанавливать сторонние модули в свою систему, да что там — любой DRM по этой логике будет не законен =)


  1. mdonskoi
    31.01.2017 17:28
    -1

    Полезная статья, спасибо. Альтернативные маркеты в некоторых случаях очень помогают. У меня получилось полноценно и бесплатно использовать приложение, скачанное с 1 Мобайл маркет, при этом подписка на это приложение стоит 50 уе в год.


  1. DSolodukhin
    31.01.2017 17:29
    +1

    Мне кажется, андроиду не хватает чего-то вроде:
    add-apt-repository ppa:super-duper-store

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


    1. jehy
      31.01.2017 17:33

      Да, мечта хорошая.

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


    1. ValdikSS
      31.01.2017 18:17
      +1

      Именно такая возможность есть в F-Droid, вероятно, jehy не нашел ее. Можно создать свой репозиторий и прописать его в настройки F-Droid, и не зависеть ни от серверов F-Droid, ни от их сборочных систем. Да даже код раскрывать не обязательно.


      1. jehy
        31.01.2017 19:22

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


        1. Cryvage
          02.02.2017 16:07
          +1

          В клиенте всё очень просто: Меню->Repositories->нажимаем плюсик->вводим адрес
          Там же, можно включать и отключать добавленные репозитории.
          А вот с сервером пришлось немного повозиться. Но проковырявшись несколько часов, я всё же смог поднять рабочий репозиторий, закинуть в него тех же покемонов, и успешно их установить. Оказалось, что поддержку неподписанных репозиториев выпилили из клиента, а в инструкции об этом ни слова не было сказано. И разумеется для теста я пытался сделать именно неподписанный репозиторий. Если бы не этот нюанс, то и сервер ставится и настраивается за несколько минут.
          В принципе это действительно практически «add-apt-repository ppa:super-duper-store». Не хватает только того, чтобы сам F-Droid был предустановлен по умолчанию.


          1. jehy
            02.02.2017 17:06

            Но тут, правда, остаётся тот же нюанс доверия.

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

            А если это некий коллективный репозиторий, то и разработчик должен доверять хозяину, и пользователь тоже должен доверять хозяину.

            Но да, звучит неплохо.


  1. keysi
    31.01.2017 17:44

    Жалко Yandex.Store, на первых этапах у него были все шансы стать популярным, многие ставили его сами, ради пробы и надежд на будущее развитие. Вместо этого Яндекс ввязался в антимонопольную тяжбу. А если бы продолжали развивать — поклонники были бы и без преинсталлов.


  1. Revertis
    31.01.2017 18:17

    Я всё мечтаю, что появится хоть один внятный конкурент Гугломаркету, чтобы его не боялись предустанавливать производители устройств…


    1. zagayevskiy
      31.01.2017 20:02

      Для этого нужна аудитория, сравнимая с гугловой, а для этого нужны предустановки… Замкнутый круг.


      1. Revertis
        31.01.2017 20:08

        Но, в принципе, проекты типа APK Pure имеют свои приложения, которые похожи на маркет, и с них замечательно можно обновлять программы.
        Следующим шагом нужно юридически оформить то, что они не будут распространять троянов и так далее. Плюс, способы оплаты программ.
        Хотя да, как о таком новом маркете поведать всем разработчикам и паблишерам? Наверное, так как делает Самсунг — пишет письма тем, у кого приложения в гуглоплее.


  1. petrovichtim
    01.02.2017 07:56

    F-Droid (они сами собирают и подписывают ваше приложение из исходного кода);

    Не уверен в этом, там я находил старые версии приложений, а код был уже новым. Как я понял апк все-равно собирать тебе.


  1. bmj
    01.02.2017 08:05

    Может все завязано на Google Framefork? И когда пропадет его монополия, действенность сторонних сторов повысится, или как? А с монополиями разговор один: суд.


    1. jehy
      01.02.2017 10:22

      Если вы про Google Services Framework, то он тут не при чём.


      1. bmj
        01.02.2017 10:37

        приложения требуют


        1. jehy
          01.02.2017 10:51

          Но это не мешает распространению приложений без Google Play. Это мешает использованию устройства без предустановленных Google Services. Это тоже важный момент, но не про то.


        1. green_tree
          02.02.2017 17:07

          я наткнулся на проект microg.org, пока еще не тестировал, но вот скоро телефон буду менять и там попробую google-less окружение


          1. jehy
            02.02.2017 17:08

            Звучит неплохо, интересно, насколько оно живое. Отпишите по результатам — будет интересно.


  1. pingping
    01.02.2017 08:05

    Плюсую как могу.
    +к важности темы:
    есть люди, которые сами принципиально не желают пользоваться гуглями (и их плеями).
    Всегда угнетало, когда на домашней страничке какой-нить полезной софтины было «приложение доступно через гуглеплей» @$%#$^$&%&*&%^& — они что, не могли просто .apk-шку выложить тут же?
    Вот зачем мне, как пользователю, рассказывать сторонней конторе (_название_корпорации_), что я пользуюсь такой-то софтиной?
    Есть производитель, есть пользователь. Зачем им посредники?

    Так что, в этом плане Ваш проект на гитхабе очень порадовал: откуда скачать ПРОСТО ПРОГРАММУ (.apk) — предложен широкий выбор!


    1. jehy
      01.02.2017 10:20

      Вполне понимаю тех людей, которые не выкладывают apk — тут надо как-то заботиться о нестандартной монетизации, обновлении, статистике и так далее (в общем, всё, что я описывал в посте). Так что многие не хотят плевать против ветра и прогибаются под гугла. Так что пост я рассчитывал в основном на тех, кто даже прогнуться не может…


  1. petrovichtim
    01.02.2017 08:06

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

    Это так гладко только на бумаге. В рекламе Admob до сих пор рулит, остальные нервно курят в сторонке. А покупки и так пользователи Android почти не совершают, а тут ты им ещё и про биткоины объясни… В общем не взлетит.
    Страшная ситуация, но без Google денег легально не заработаешь.


    1. jehy
      01.02.2017 09:20

      Опять же — делаем допущение, что раз у нас нетривиальное приложение, которое не может располагаться в гугл плее, то пользователи там достаточно продвинутые.
      Рекламу можно цеплять даже любую из стандартных веб сетей, а не только для мобильных устройств.
      Для оплаты годен Stripe, биткоины я уже как крайний пример привёл. Можно оплату через тот же PayPal проводить — его все знают.


      1. petrovichtim
        01.02.2017 09:26

        Вопрос доверия при платежах возникает. Хотя я и так уже сказал, что пользователи наши не платят. Я с веб сетями не работал, хотелось бы чужой опыт узнать. Как например будет всё работать за границей? Сети поймут что нужна реклама на языке пользователя?
        Есть приложение которое блокирует рекламу ютьюба, точнее приглушает и жмет кнопку пропустить. Так вот оно не может быть опубликовано в GP, как её создателю попытаться заработать в этом случае?


        1. jehy
          01.02.2017 10:15

          При реверсе приложений я видел, что нативная реклама часто ставится не только от гугла. Ещё её предлагает тот же амазон, к примеру, и ещё 3-4 крупных провайдера.

          Так же (сам не пробовал — но не вижу проблем) можно сделать в приложении webview с рекламой. И это будет полностью идентично рекламе из браузера. Правда, я не уверен, насколько расценки на рекламу в приложении отличаются от расценок на рекламу на веб сайте. Возможно, сильно — и это сделает размещение такой рекламы не слишком выгодным.

          Вопрос доверия действительно возникает. Даже если вы используете самого чудесного провайдера для платежей, вам надо донести это до пользователей. Как минимум, у пользователя должна быть возможность оценить значительное количество чужих более-менее доверенных отзывов. Это вполне можно — например, на 4pda. Так же я надеюсь, что роль может играть индивидуальная репутация разработчика — например, то что вы ставите ПО из его репозитория, а в его профиле много хороших репозиториев со звёздочками и форками. По большому счёту, именно так разработчики и выбирают пакеты из репозиториев… Правда, возможно, это будет слишком сложно для пользователя.

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


          1. petrovichtim
            01.02.2017 10:21

            Если webview работает, то почему так все не делают?


            1. jehy
              01.02.2017 10:25
              +1

              Загадка для меня, может кто объяснит. У меня есть два приложения, которые по сути представляют собой один большой webview — одно собственно для рутрекера, второе грузит сайт с лютым количеством яваскрипта. Работают без нареканий.


  1. TheCoreFactory
    01.02.2017 10:03
    +1

    В свое время в Google Play мы попали на 9 место в США в разделе аркады — через два часа приложение было удалено из вообще всех рейтингов(не только США). На все звонки/письма ответ был прост, просто мы не понимаем алгоритм работы размещения в рейтинге. Ссылки на то, что приложение с первых мест в СНГ и 9 в США просто пропало в один миг никуда не опускаясь никакого воздействия не произвело.

    Потом мы уже натыкались на таких же счастливчиков. Не знаю, как сейчас, но не думаю, что топ 10 стал более доступен командам не из США :)


    1. petrovichtim
      01.02.2017 10:22

      Вы даже знаете куда позвонить можно?


      1. TheCoreFactory
        01.02.2017 10:56

        Да, два года назад по крайней мере телефоны нашлись. По телефону в РФ было сказано, что у них только реклама и они вообще никакого отношения не имеют.
        В США звонил мой знакомый там проживающий, его отфутболили теми же фразами, что и по почте.


        1. TheCoreFactory
          01.02.2017 11:07

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

          Покопался и нашел старую страницу со скринами этого действа. Пустил, скупую слезу:
          http://thecorefactory.net/google.html


          1. andrew911
            02.02.2017 17:08

            Очень похоже, что как раз прошел месяц и приложение просто ушло из новых, что и привело к выпаданию из топа


            1. TheCoreFactory
              03.02.2017 09:28

              К сожалению нет, это уже был «Топ бесплатных». По ссылке выше видно скрин с AppAnnie.


  1. TheCoreFactory
    01.02.2017 11:06

    (не туда)


  1. mityada
    06.02.2017 13:10

    Для отладки и аналитики можно использовать Firebase. Иметь при этом приложение в Google Play не обязательно.


    1. jehy
      06.02.2017 13:11

      А там есть возможность отлавливания крэшей?



  1. androidformax
    07.02.2017 07:47

    Мануал по примеру реализации всех этапов на примере приложения калькулятор, будет в следующей статье?


    1. jehy
      07.02.2017 07:48

      Не понял вашу мысль. Здесь и так рассматривалось на примере простого приложения, нет?


      1. androidformax
        07.02.2017 10:52

        Это обобщенный материал, теории и так полно :) Нам практики не хватает…
        Я про «Мануал по примеру реализации»:
        Здравствуйте, познакомьтесь, вот калькулятор, и мы будем распространять его через сайт abrakadabra.narod
        Без надоедливого маркета.

        Итак мы определились, что будем использовать fabric.io для этого нажмем тут и тут в android studio. Вот и вся настройка :) Поехали дальше…

        Итак распространять мы будем его через бесплатный хостинг narod, пользователь будет скачивать его прям с индексной страницы abrakadabra.narod.ru, для этого просто зальем нашу apk на хостинг и выложим ссылку на индексной странице нашего сайта… Блин, оказывается политика конфиденциальности не разрешает качать apk с narod напрямую, для решения этой проблемы проделаем следующее…

        Для возможности обновлять приложение через сайт, путем заливки новой версии на сайт, приложение будет при запуске проверять есть ли новая версия и предлагать пользователю скачать ее, для этого необходимо воспользоваться следующим фреймворком…

        и т.д.


        1. jehy
          07.02.2017 11:17

          Так там везде упоминается конкретное приложение, в котором реализованы все этапы, и это можно посмотреть на гитхабе. Писать мануал по fabric.io не вижу смысла — тысячи их, да и интеграция предельно простая и интуитивная. Пример по выкладке на github тоже есть. Код по автоматическому обновлению тоже в репозитории… Надо только посмотреть.


          1. androidformax
            07.02.2017 11:24

            Хорошо, по ходу — не услышим мы друг друга!