TagAndroid

Kotlin — в начале было слово, тьма, объекты и коллекции

Итак, в двух словах — к Kotlin’у я подбирался довольно продолжительное время… Ну как подбирался — ошивался где-то рядом, слышал что-то краем уха, но вот сесть и попробовать не решался, да и времени свободного не находилось (отмазки, отмазки…). В мае 2017 года на Google I/O сказали, что Kotlin отныне официально поддерживается гуглом наравне с Java (правда, это тоже не сильно меня подтолкнуло к близкому знакомству). Сказать по честности, я вообще думал “Зачем это надо, что старой доброй джавы не хватает?” и эти красные стопари держали меня до поры до времени.

 

Когда я все-таки открыл для себя ресурсы, посвященные котлину, в первую очередь я обратил внимание на следующие моменты:

Continue reading

Не приложение, а мусорка (Auto.ru)

Продолжаем тему исследования размера приложений для Android.

Небольшое отступление. Крупные компании проводят семинары, встречи, выставки, обмен опытом и т.п. на тему того, как сделать разработку приложений для Android лучше, качественнее, ну, и конечно же рассматривают новые технологии в разработке. Меня всегда поражало то, какие Львы Толстые выступают с докладами — не в плане растительности на лице и любви к детям, конечно, а в плане подхода к выступлению. Все четко, красиво, много (и порой непонятно).

Что меня лично смущало и смущает всегда, так это то, как темы этих докладов отличаются собственно от произведенных продуктов. Взять тот же Яндекс.Диск. Он адово тормозит при запуске на любом моем устройстве, будь то старый Nexus 7, будь то прошлогодний хит Xiaomi Mi5. Нет, я пожалуй, делаю слишком громкое заявление на тему тормозов. Просто задержка между нажатием на иконку приложения и его открытием здорово отличается от других приложений (как конкурентов, так и просто отдельных).

Continue reading

Realm: хитрости при сохранении данных сервера

Ситуация в следующем: приложение делает REST запрос на получение данных, сохраняет их в базе, каким-то образом модифицирует, затем снова их получает с сервера. Все довольно тривиально, казалось бы, если бы не одно «но» — где мои локальные изменения?

К сожалению, Realm не поддерживает обновление данных с пропуском конкретных полей, как это было сделано в реквесте на гитхабе проекта, например

But, what about a call to specify a list of the fields that one want to overwrite (or preserve)?
copyToRealmOrUpdateOverwritingFields("field1","field2")
copyToRealmOrUpdatePreservingFields("field1","field2")
copyToRealmOrUpdate(obj).preserve("field1","field2")

https://github.com/realm/realm-java/issues/2179

что было бы довольно удобно. Давайте рассмотрим на примерах. Представим, что у нас есть чат, в котором у сообщений есть флаг «прочитано». Наш REST интерфейс не возвращает об этом состоянии никаких данных и вся информация о том, было ли сообщение прочитано или нет, хранится только локально. Continue reading

VK TouchClub — мессенджер для администраторов групп

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

Для кого-то ВКонтакте перестал быть просто развлекательным ресурсом (а в последнее время для многих он перестал еще и быть основным фотохостингом), а стал инструментом заработка денег. Можно ли было представить еще несколько лет назад, что в графе “Опыт работы” в резюме может оказаться пункт “Администратор паблика вконтакте”, и это не будет казаться шуткой?

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

Continue reading

TouchClub: ведение группы ВКонтакте. Сложности.

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

Continue reading

Android Pay не работает на Xiaomi?

После анонса Android Pay в России я первым делом решил проверить как это работает на моем Xiaomi Mi5. Не думаю что стоит рассказывать о том, как установить приложение на смартфон и подключить карту вашего банка, гораздо интереснее остановиться на том моменте, что Android Pay не работает совсем (по крайней мере, «из коробки»).

Как это выглядит?

Вы подносите смартфон к терминалу — и ничего. Вы опускаете смартфон на терминал — тот же результат. Водите одним по другому — все так же, ничего не происходит. А потом (если вы обладаете даром пера) открываете браузер и пишете куда-нибудь пост о том, что Android Pay не работает, и вообще Android плохой, перейду лучше на iPhone.

Continue reading

Рабочий Retrofit: кешируем запросы и обрабатываем отсутствие соединения

Retrofit — отличная (хотя тут больше подходит слово “лучшая”) библиотека на Android для создания REST и не только запросов из приложения к ресурсам в интернете. Для расширения функционала используется такой компонент библиотеки как “перехватчик” (хотя лично я называю их как есть — interceptors). Ниже я хочу предложить вашему вниманию ряд интерсепторов, которые использую по умолчанию. Они отвечают за выполнение следующих целей

Continue reading

Android: логгирование и отправка результатов на почту

Привет.

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

Одно дело — разработка, LogCat в Android Studio (если вы из любителей пожестче — можно распечатку в консоли смотреть с помощью adb), и совсем другое — ломать голову над вопросом почему у вас все работает на всем парке тестовых устройств, а пользователь жалуется на абсолютно обратную ситуацию. Коммуникация между разработчиком и конечным пользователем — это хорошо, но совсем другое — видеть своими глазами картинку происходящего (помните, как в матрице — для кого-то это зеленые иероглифы, а для кого-то — женщина в красном?)

Continue reading

Сборка библиотеки FFmpeg для Android приложения

Есть не так много библиотек, которые позволяют добавить функционал ffmpeg в ваше Android приложение. А если говорить про отсутствие в проекте NDK, то количество вариантов практически стремится к нулю. Я давно уже познакомился с ffmpeg-android, которую собственно и использую в приложении Selfie Timelapse App, однако все чаще и чаще приходилось сталкиваться с проблемой практически нулевой поддержки разработчиков.

Так, к примеру, ковыряться с библиотекой пришлось впервые, когда понял, что размер проекта меня не устраивает (чуть меньше 30 мегабайт). Оказалось, что в aar файл зашит скомпилированный ffmpeg для архитектур ARM и x86. Так как последних довольно мало (по крайней мере устройства на этой архитектуре мне лично не встречались), то я решил удалить ее поддержку из проекта.

Размер готового файла при этом стал колебаться в районе 20 мегабайт.

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

Continue reading

Скриншоты приложения: хорошая новость, плохая новость и нейтрализующая

Не так давно открыл для себя сервис, с помощью которого можно достаточно быстро делать скриншоты для приложения (есть такая штука в Google Play и AppStore, если кто уж совсем не в курсе что здесь происходит) — https://theapplaunchpad.com/ Как мы недавно обсуждали это на AppTractor.ru, этот сервис не уникальный, но мне как-то сразу он понравился.

К плюсам я отнес:

Continue reading