Сообщество - Android Developers
Добавить пост
69 постов 1 892 подписчика

Популярные теги в сообществе:

937

Сколько можно заработать на мобильном Android приложении? Пример

Привет, Пикабу!

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


В самом начале своего пути я практически ничего не знал о монетизации мобильных приложений, да и сейчас мои знания оставляют желать лучшего, работаю над этим. Сегодня хочу рассказать вам о своем Android-приложении "Игра Шпион" (не уверен, что можно прикреплять ссылку на Google Play, но при желании без труда можно найти). Приложение является адаптацией настольной игры "Spyfall", о которой, наверное, многие из вас слышали.


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


Так уж совпало, что примерно в это же время (3 года назад) я начал изучать разработку под Android. Так и пришла идея: написать приложение, которое само рандомно выберет кто шпион, какая локация. Вкратце: создаем игру, генерируются карточки, люди передают телефон по кругу и смотрят на доставшуюся им роль.


Вот так выглядит последняя версия приложения (обновление опубликовано недавно).

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

Ну конечно, после публикации, хотелось получить много положительных отзывов и скачиваний. Но как этого добиться? Ну учился же я в университете, довольно неплохо, поэтому в обмен на свою курсовую работу договорился с одногруппниками, чтоб они скачали приложение, оставили коммент и поставить 5 звезд. Родственники тоже были в деле. Таким образом, в течение пары недель после публикации у приложения было 40 скачиваний, 40 отзывов с пятью звездами.

Дальше произошло то, на что я совершенно не рассчитывал, через месяц у приложения было уже 100 пользователей, через три месяца 1000.

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

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

(Кстати, очевидно, что резкий прирост происходит в праздничные новогодние дни)


В общем, аудитория росла. Затем грянул карантин, на графике можно заметить в этот период стагнацию. Очевидно, людям не за чем это приложение, все сидят по домам, приложение через Zoom не передашь.

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

Уж не знаю, совпадение это или нет, но после публикации обновления пошел резкий рост аудитории.

В это же обновление я попробовал добавить рекламу (пользователи очень не любят рекламу, но хоть какой-то заработок дополнительно мотивирует разработчика улучшать приложение). 

Почему-то Google AdMob не дал пройти мне регистрацию. На мои письма с вопросами "почему так?" мне не отвечали.  Ну и ладно. Решил монетизировать через Яндекс РСЯ.

Тип рекламы - Interstitial, показывается при клике на какую-либо из кнопок на главном экране, ходу игры никак не мешает.

Никакие CPMV не настраивал (пока до конца с этим не разобрался).



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

Итого, при суточной аудитории, в среднем за неделю (3000 - 6000 человек).


Доход за сутки с даты публикации версии с рекламой

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

Показы рекламы за сутки

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

CPMV (доход с 1000 просмотров) за сутки (на зеленую кривую не образайте внимание). До сих пор не понимаю, от чего конкретно зависит CPMV, уж очень большой разброс.

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

Аудитория распределена следующим образом

Сколько можно заработать на мобильном Android приложении? Пример Приложение на Android, Android, Монетизация, Длиннопост

В общем, если подытожить. Приложение с количеством активных пользователей 100к-120к, с суточной аудиторией в среднем 3000-6000 человек, спокойно может приносить 6000-8000 рублей в месяц. В периоды новогодних праздников и то больше.


Кстати, CPMV в странах восточной Европы в раз десять меньше, чем в США или западной Европе. Из чего можно сделать вывод: если решите монетизировать свое приложение, обязательно переводите его на английский язык, а лучше сделайте его вообще дефолтным. 

Если бы я изначально ориентировался на западную аудиторию, до доход был бы минимум в 4 раза больше.


Получилось, как по мне, суховато. Но желание было лишь поделиться данными.

Спасибо за внимание.

Показать полностью 6
475

Навигатор для прокладки интересных пешеходных маршрутов

Уже довольно долгое время я разрабатываю Sight Safari - навигатор, который строит не самые короткие (как Гугл или Яндекс), а самые интересные пешеходные маршруты.


Вот оказались вы в незнакомом городе и надо вам дойти до метро/вокзала/отеля. Яндекс-Гугл посоветуют вам кратчайший маршрут, но это не очень интересно. Иногда хочется сделать небольшой крюк и по пути пройтись по парку, или мимо каких-нибудь памятников, чтобы совместить дорогу и осмотр достопримечательностей.


Но как узнать, где искать эти достопримечательности? Туристических путеводителей может под рукой не оказаться, да и не для всех городов и районов они есть. Часто они затрагивают только центр города, и вряд ли так уж много путеводителей охватывает спальники, типа условного Купчино. Однако даже там часто есть на что поглядеть по дороге.

Навигатор для прокладки интересных пешеходных маршрутов Приложение на Android, Навигация, Туризм, Android разработка, Длиннопост

Мой навигатор решает эту проблему. Строит маршруты, которые длиннее процентов на 20, чем кратчайшие, зато в разы интереснее.


Долгое время сервис жил в виде веб-версии, но пользователи настойчиво просили Android-приложение. Так что пришлось им наконец заняться.


Алгоритм поиска путей


Сперва пара слов о базовой идее. Алгоритм работы у сервиса такой:

1. Парсим Open Street Map

2. Выдираем оттуда объекты, представляющие потенциальный интерес у туристов, используя теги для фильтрации. Например, здания с тегом historic или tourism, объекты с тегом park или garden и т.п.

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

4. Берем популярную библиотечку для поиска путей GraphHopper

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


Более подробное описание алгоритма можно найти на Хабре.


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


Osmdroid - тормоза и фризы


Сперва встал вопрос выбора картографического движка. Поскольку данные я беру из Open Street Map, логично использовать и их же карты.


По запросу "OSM Android SDK" первым делом выдает библиотечку osmdroid, которая обещает быть полной заменой стандартного гуглового MapView. Поначалу все было хорошо, встроить по туториалам его удалось достаточно быстро.


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


Поскольку для нашего приложения отображение маркеров очень важно - пришлось искать альтернативу.


Mapbox


Вторым вариантом стал SDK MapBox. У них там есть куча платных фич, однако само использование MapView в своем приложении бесплатно (платно - всякие API типа роутинга, но он у нас свой собственный).


Пришлось немного подхачить отображение маршрутов. Так как их карта ожидает объект в том формате, который возвращает их API, а мы его не используем. Пришлось поковырять структуру их JSON, опытным путем выкинуть все лишнее и завернуть наш собственный маршрут в эту структуру.


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

Навигатор для прокладки интересных пешеходных маршрутов Приложение на Android, Навигация, Туризм, Android разработка, Длиннопост

Немного про UI


На самом деле, работа с картой в таком приложении - самое простое. До меня уже несколько человек пытались на энтузиазме запилить приложение под наше открытое API. Как правило, энтузиазма хватало как раз сделать карту и отображение маршрутов, все ломались на UI. Потому что даже такое вроде бы простое приложение содержит довольно много экранов, форм, поп-апов и прочей скучнейшей и нуднейшей в разработке мутотени.


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

Навигатор для прокладки интересных пешеходных маршрутов Приложение на Android, Навигация, Туризм, Android разработка, Длиннопост

И да, кроме прямых маршрутов  (между несколькими точками) есть еще и круговые - с возвратом в стартовую точку за указанное время. Такие маршруты хорошо подходят, если не хочется уходить далеко от какого-то места (отеля, вокзала или просто места встречи с друзьями), есть пара свободных часов и хочется немного погулять.


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

Пример кругового маршрута по двум паркам на час с небольшим вокруг станции метро "Парк Победы" в Питере:

Навигатор для прокладки интересных пешеходных маршрутов Приложение на Android, Навигация, Туризм, Android разработка, Длиннопост

В Android есть типичная проблема - Activity классы быстро превращаются в этакий God-object, с тысячами строк кода и кучей логики вперемешку с отображением. Бороться с этим призваны всякие хитрые варианты архитектуры. В своем приложении я использовал MVP с помощью библиотечки Moxy. Вкратце - приложение делится на Model (данные), View (отображение, собственно Activity) и Presenter (логика, вынесенная в отдельный класс и работающая с View через интерфейс). На самом деле довольно очевидная вещь, из тех что ты сперва начинаешь сам изобретать, а потом узнаешь что оказывается у нее уже есть какое-то умное название.


Про Moxy есть хорошая статья на Хабре. Главный профит этой библиотечки - что она берет на себя заботу о сохранении состояния приложения и обработку всяких смен ориентации и прочих причин пересоздания Activity. Presenter по сути заполняет очередь команд (на основе бизнес-логики нарисовать то-то там-то, отобразить такой-то поп-ап), которая при необходимости проигрывается заново если Activity была пересоздана.


Заключение


Приложение мы пилили без малого год и все еще продолжаем его допиливать. Работает оно бесплатно и без рекламы, взять можно тут: https://play.google.com/store/apps/details?id=city.sightsafari.android


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


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


Работает пока в 100+ городах России и мира. Оставить заявки на добавление новых городов можно тут в комментариях или в нашей группе ВК.

Навигатор для прокладки интересных пешеходных маршрутов Приложение на Android, Навигация, Туризм, Android разработка, Длиннопост
Показать полностью 5
450

Первое приложение или яСделалЬ

Первое приложение или яСделалЬ Android, Android разработка, Score Keeper Lite, Подсчет, Приложение, Не реклама

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

Приложение не преследует и не будет преследовать АБСОЛЮТНО никаких коммерческих целей. Цель данного приложения - сделать что-то конечное, цельное, наполненное каким-либо смыслом... Вот что получилось:

Первое приложение или яСделалЬ Android, Android разработка, Score Keeper Lite, Подсчет, Приложение, Не реклама

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

Приложение сделал я от первой буквы до последнего пикселя в дизайне, поэтому тег моё присутствует...


P.S. приложение абсолютно не коммерческое - никакой рекламы или оплаты нет и не будет - обещаю. Единственное, в качестве тренировки на будущее я разместил один рекламный блок в информации об Разработчике (куда, в общем-то, никто никогда не заглядывает), который можно посмотреть только самостоятельно кликнув на "Play" - никак по другому реклама никогда не выскочит:)


P.S.S. Если кому-то будет интересно - ссылку отдам в комментариях, ну или найдите в Маркете ScoreKeeper Lite вот с такой иконкой:

Первое приложение или яСделалЬ Android, Android разработка, Score Keeper Lite, Подсчет, Приложение, Не реклама

Всем Спасибо за внимание, не судите строго :)

Показать полностью 2
418

Google сделали Kotlin языком первого класса для Android

В четверг на ежегодной конференции Google I/O разработчики сообщили о том, что созданный российскими программистами язык Kotlin станет «языком первого класса» для написания приложений для Android. Как пишет TechCrunch, в Google также рассказали об организации совместно с создателями языка — компанией JetBrains — специального фонда для развития Kotlin.


В Google подчеркнули, что Kotlin будет дополнительным языком и ни в коем случае не заменит Java и C++ (на сегодняшний день языком первого класса для Android является именно Java). Планируется, что инструменты Kotlin, основанные на JetBrains IDE, будут по стандарту включены в Android Studio 3.0 — официальный инструмент разработки для ОС Android.


«Поскольку Kotlin полностью поддерживается Java, вы и раньше могли писать приложения на нем, однако теперь это будет поддержано авторитетом и репутацией Google», — отмечают журналисты.


http://m.cnews.ru/news/top/2017-05-18_google_perevodit_andro...

243

Разработка видеоредактора под Android. FineFx

Добрый день, дорогие пикабушники!
С примерно более года назад начал готовиться, разрабатывать тестовые приложения, вспоминать android разработку и т.д. и в январе начал разрабатывать в свободное время видеоредактор, кодовое название решил дать ему FineFx.

Идея - перенести возможности десктоп приложений на экран смартфона и планшета и сделать полноценное редактирование "на зверьке". Проект серьезный, долгий и решил его сделать я один, без помощи в разработке. Единственное, мне будет помогать знакомая с UI и дизайном.
Решил делать свой UI, не пользоваться android, делать все через OpenGL и FFMPEG для зачитывания всех форматов медиафайлов, а рендерить видео с помощью нативных средств Android.
Началось все вот с этой картинки:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Затем сделал оконный лог:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Потом начал делать галерею и меню:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Для сканирование и правильной кодировки метатегов и названий песен в галерее звуков и музыки использовал uchardet и iconv

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Потом кто-то заметил, что меню не пальцевое, сделал вот такое выезжающее меню, по реакции на жесты (алгоритм жестов тоже сам разработал)

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Начал делать плеер медиафайлов. Долго изучал тему, в FFMPEG сделать плеер не так-то просто, распечатал даже файл ffplay.c для изучения:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Работал над редактором все свободное время, даже в электричке по пути на работу и домой:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Сделал плеер, даже с выбором звуковой дорожки:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Потом озаботился профилированием и написал свой профайлер, т.к. плеер достаточно медленно проигрывал видеофайлы:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Потом озаботился локализацией и решил написать свою, а не тягать из JAVA строки все время:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Сделал стартовую страницу с созданием нового проекта и видео на фоне:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Затем сделал окно информации о медиафайле:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Потом сделал Bin, как в премьере для промежуточного редактирования

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

И в данный момент делаю таймлайн, в котором много мелких деталей, которые очень ресурсозатратные:

Разработка видеоредактора под Android. FineFx Android, Видеоредактор, Adobe, Premiere, После, Effects, Kinemaster, Длиннопост

Работа идет "медленно, но непрерывно", так что, дай Бог, где-то через полгодика будет mvp и устрою бета-тест в маркете.


На этом все, спасибо за внимание!

Показать полностью 14
209

Нужна программа на смартфон с привязкой геометок к контактам

В общем ситуация такая. Занимаюсь установкой спутниковой ТВ. Клиентов довольно много, переваливает за 1000. Ко многим езжу неоднократно. Но большинство живут в деревнях. С адресами там проблемы: улицы часто не указаны, номера домов и подавно. Записывать их номера в телефоне проблематично. На данный момент это выглядит как-то так:

Нужна программа на смартфон с привязкой геометок к контактам Помогите найти, Приложение, Android

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

Показать полностью 1
71

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет.

Здравствуйте.

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

Что изменилось за месяц в приложении:


1) На 80% готов макет приложения, а я готов к критике этого макета).

Главная страница(Картинка взята с сайта freepik.com, иконки с сайта flaticon.com):

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост

Страница выбора системы автомобиля,  в которой есть потенциальная неисправность(иконки с сайта flaticon.com):

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост
Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост

Страница выбора неисправности(пока не до конца оформлена и заполнена тестовыми данными):

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост

Страница описания неисправности(тоже оформление немного поменяется, пока просто тестовый вывод данных из базы):

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост

Страница расшифровки кода диагностики OBD2(возможно поменяю цвет и уберу кнопку поиска, строки пока не настроены на язык, это доделаю к релизу):

Неисправности автомобиля на Android от идеи к реализации. Часть 2. Макет. Android разработка, Неисправности, Диагностика, Авто, Ремонт авто, Приложение, Длиннопост

Страница о приложении пока не готова.

2) Поменялась структура приложения, теперь, если есть коды диагностики OBD2, можно проверить в первую очередь их. Раньше я не хотел добавлять их в эту версию, но потом решил, что это будет хорошее конкурентное преимущество. Правда в первой версии будет только расшифровка кода, без рекомендаций по поиску причины появления кода. Я лучше буду по мере обновлений приложения в маркете добавлять рекомендации для кодов, иначе мне придется еще на пару месяцев отложить публикацию, а так не хочется откладывать. Пока в базе данных для кодов диагностики OBD2 только порядка 5000 общих кодов вида P0xxx, P2xxx, B0xxx, C0xxx, U0xxx. Марочные коды будут добавляться по мере обновлений приложения.

3) А вот база данных для неисправностей готова пока только на 70%, планирую закончить к 23.09.2018, это мой дедлайн на публикацию приложения в GooglePlay.

Если кому-то интересно,  как я учился программировать на Android: самый большой вклад сделал startandroid.ru, developer.android.com и google.com по всем спорным вопросам в программировании и внешнем виде приложения.


Для редактирования векторных изображений пользуюсь Inkscape


Моя страница вк: https://m.vk.com/wheelsoft

Спасибо тем, кто следит за моей деятельностью, это заставляет меня работать эффективнее)


После релиза приложения в GooglePlay  расскажу, как буду его продвигать, чтобы его увидели потенциальные пользователи.

Показать полностью 6
60

Находка в прошивке Xiaomi

Случайно обнаружил возможность создания файлов дебага системы на момент снимка.
Для его создания надо иметь включенный режим разработчика, и в любом активити несколько раз нажать одновременно клавиши громкости вверх и вниз.
Эта штука точно работает на Redmi Note 7.
В случае успеха вылезет это уведомление

Находка в прошивке Xiaomi Xiaomi, Фишка, Отладка, Длиннопост

После согласия появится пуш

Находка в прошивке Xiaomi Xiaomi, Фишка, Отладка, Длиннопост

И на выходе появится архив, к каталогу которого можно перейти по пушу

Находка в прошивке Xiaomi Xiaomi, Фишка, Отладка, Длиннопост

Нигде в интернете не видел такого способа.
Возможно, он недокументированный.
Прошу прощения, если баян.
Коммент для минуса внутри.

Показать полностью 3
Отличная работа, все прочитано!