Как стать автором
Обновить
13
0
Юрий Кучанов @kuchanov

Разработчик под Android

Отправить сообщение

Все библиотеки имеют фатальные недостатки, или Как мы изобретали Retrofit-подобный велосипед для JSON-RPC протокола

Время на прочтение23 мин
Количество просмотров3.5K

Привет, Хабр! Меня зовут Юра Кучанов, работаю Android разработчиком в Garage Eight и сегодня хочу рассказать о том, как мы делали Retrofit-подобную библиотеку для JSON-RPC протокола. Началось всё с того, что нам потребовалось для общения сервера и Android приложения использовать протокол JSON-RPC. Что значит “потребовалось”? Если кратко – бэкендеры предложили, а сильных аргументов против, в сущности, не нашлось =) Возможно, тут сработала, например, вот эта статья с хабра про выбор между REST и JSON-RPC. В итоге я пошёл искать библиотеки в сети и… И обнаружил, что готовые решения не подходят (так как там, конечно же, есть хотя бы один фатальный недостаток). В итоге сделал свою библиотеку в стиле Retrofit. Ниже расскажу, почему не подошли готовые решения, как реализовал своё через рефлексию и как копался в исходниках Retrofit и OkHttp для реализации нужного нам функционала.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии2

Интеграция оплаты Юкасса в telegramm для самозанятых

Время на прочтение4 мин
Количество просмотров15K

Привет тем кто хочет опробовать себя в качестве бизнесмена! Недавно в голову пришла идея, получить некоторый опыт предпринимательства. В качестве продукта выступает доступ к некоторой цифровой услуге, а контроль за оплатой этой услуги ложиться на плечи телеграмм бота. В ходе поисков системы оплаты была найдена Юкасса, одна из немногих систем (если вообще не единственная), которая работает с самозанятыми.
На сайте подробно описана интеграция оплаты в telegramm бота. Однако на этапе подписания документов выясняется что интеграция недоступна для самозанятых.

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии6

Возвращение веба 90-х годов

Время на прочтение5 мин
Количество просмотров42K
В масштабных культурных концепциях, в таких, как музыка или мода, можно наблюдать явления цикличности. Я почти уверен в том, что когда-нибудь вернётся гранж. Тогда записи в этом стиле станут новыми горячими хитами. Когда-нибудь наши дети вполне могут счесть совершенно улётными причёски в стиле «Frosted tips».

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



Пожалуй, стоит уточнить, что я говорю тут не о дизайне. Боюсь, что феномен dancing-baby.gif ушёл навсегда. Я, скорее, имею в виду более широкие идеи из прошлого, которые недавно обрели вторую жизнь. И мне, кстати, это нравится.
Читать дальше →
Всего голосов 86: ↑82 и ↓4+78
Комментарии93

Что представляет собой веб-приложение в продакшне?

Время на прочтение8 мин
Количество просмотров16K
На заре карьеры я работал в компании, которая выпускала систему управления контентом. Эта CMS помогала отделам маркетинга самостоятельно управлять сайтами, а не полагаться на разработчиков при каждом изменении. Система помогла клиентам сократить операционные расходы, а мне — научиться создавать веб-приложения.

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

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

Если вы начали работу в таком окружении, а затем приступили к созданию и развёртыванию веб-приложения с нуля, то очень быстро узнаете, что такое «до опасного поверхностные знания».
Читать дальше →
Всего голосов 35: ↑31 и ↓4+27
Комментарии5

Непрерывные переходы между общими элементами: из RecyclerView во ViewPager

Время на прочтение9 мин
Количество просмотров14K

Использование переходов в Material Design дает приложению визуальную непрерывность. Пока пользователь ходит по приложению, элементы интерфейса в нем меняют состояние. Анимации переходов соответствующих элементов от одного экрана к другому подчеркивают идею о том, что интерфейсы осязаемы.


Целью этой статьи является предоставление гайдлайнов и реализации для определенных непрерывных переходов между фрагментами ОС Android. Мы продемострируем, как реализовать переход из картинки в RecyclerView в картинку внутри ViewPager и обратно, используя "общие элементы" (shared elements) чтобы определить, как и какие элементы участвуют в переходе. Мы также обработаем сложный случай перехода обратно в сетку после листания на странице к элементу, который в сетке изначально был за пределами экрана.


Вот результат, которого мы хотим добиться (анимированная версия под катом).



Если вы хотите пропустить объяснение и сразу приступить к изучению кода, вы найдете его здесь.


От переводчика. Далее будет довольно много кода и гифок (по прикидкам, мегабайт на 20).

Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии0

Подбираем пароли с помощью Google Chrome

Время на прочтение6 мин
Количество просмотров150K

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


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


В случае, если мы имеем какой-либо портал, где пользователи – это люди, то бОльшую часть уязвимых слабых паролей можно отнести к одной из 4 групп:


  1. Пароли, входящие в топ самых популярных фраз (такие как «123456», «password», и т.п.).
  2. Пароли, представляющие собой сочетание клавиш – так называемые keyboard-walks пароли (например, «qwerty», «qazwsx», и т.п.).
  3. Пароли – искажённые логины («user123», «user321», и т.п.).
  4. Либо использование в качестве пароля популярных русских слов или имён в «перевёрнутой» раскладке («ljcneg», «fylhtq»)
Читать дальше →
Всего голосов 37: ↑33 и ↓4+29
Комментарии15

Delegate Adapter — зачем и как

Время на прочтение11 мин
Количество просмотров33K
Практически во всех проектах, которыми я занимался, приходилось отображать список элементов (ленту), и эти элементы были разного типа. Часто задача решалась внутри главного адаптера, определяя тип элемента через instanceOf в getItemViewType(). Когда в ленте 2 или 3 типа, кажется, что такой подход себя оправдывает… Или нет? Что, если завтра придет требование ввести еще несколько типов да еще и по какой-то замысловатой логике?



В статье хочу показать, как паттерн DelegateAdapter позволяет решить эту проблему. Знакомым с паттерном может быть интересно посмотреть реализацию на Kotlin с использованием LayoutContainer.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии5

Как правильно оформить Open Source проект

Время на прочтение7 мин
Количество просмотров53K

В свободное и не свободное время[1] я развиваю несколько своих проектов на github, а также, по мере сил, участвую в жизни интересных для меня, как программиста, проектах.


Недавно один из коллег попросил консультацию: как выложить разработанную им библиотеку на github. Библиотека никак не связана с бизнес-логикой приложения компании, по сути это адаптер к некоему API, реализующему определённый стандарт. Помогая ему, я понял что вещи, интуитивно понятные и давно очевидные для меня, в этой области, совершенно неизвестны человеку делающему это впервые и далёкому от Open Source.


Я провел небольшое исследование и обнаружил что большинство публикаций по этой теме на habrahabr освещают тему участия (contributing), либо просто мотивируют каким-нибудь образом примкнуть к Open Source, но не дают исчерпывающей инструкции как правильно оформить свой проект. В целом в рунете, если верить Яндекс, тема освещена со стороны мотивации, этикета контрибуции и основ пользования github. Но не с точки зрения конкретных шагов, которые следует предпринять.


Так что из себя представляет стильный, модный, молодёжный Open Source проект в 201* году?

Читать дальше →
Всего голосов 89: ↑84 и ↓5+79
Комментарии135

Играем в APK-гольф. Уменьшение размера файлов Android APK на 99,9%

Время на прочтение10 мин
Количество просмотров41K
В гольфе выигрывает тот, у кого меньше очков.

Применим этот принцип в Android. Мы собираемся поиграть в APK-гольф и создать приложение минимально возможного размера, которое можно установить на Android 8.0 Oreo.

Базовый уровень


Начнём с дефолтного приложения, который генерирует Android Studio. Создадим хранилище ключей, подпишем приложение и измерим размер файла в байтах командой stat -f%z $filename.

Затем установим APK на смартфон Nexus 5x под Oreo, чтобы убедиться, что всё работает.



Прекрасно. Наш APK весит примерно полтора мегабайта.
Читать дальше →
Всего голосов 86: ↑86 и ↓0+86
Комментарии52

Какие налоги нужно платить при выводе доходов от приложений в Apple iTunes

Время на прочтение7 мин
Количество просмотров31K
image

Разработчики постоянно задают нам вопросы о налогах, которые должны платить при выводе средств на российское лицо по договору с Apple. Поводом беспокойства служит известный Налог на Гугл, введенный с начала 2017 года.

Поэтому мы разместили в свободном доступе перевод последней редакции Apple Developer Program License Agreement Schedule 2 и подготовили налоговые комментарии к нему.

Кому интересно, смотрим далее.
Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии69

Планирование задач в Android с использованием JobScheduler и IntentService

Время на прочтение11 мин
Количество просмотров37K


Иногда при разработке под OS Android возникает необходимость выполнять ресурсоемкие операции периодически, регулярно или по запросу, и для этих операций важно, например, наличие интернета или чтобы устройство "не спало". Чаще всего при решении подобных задач применяются AlarmManager, WakefulBroadcastReceiver, либо же вообще WakeLock контролируется вручную. Все это не рекомендуется в документации для разработчиков под Android, а WakefulBroadcastReceiver уже отмечен как deprecated с API level 26.0.0.


Что же мы можем сделать, чтобы следовать рекомендациям Google и создавать приложения с более гибким поведением на версиях Android 5.0+, в которых энергосбережению уделяется все больше внимания? Если вы готовы выставить минимальный API level 21.0.0 для своего приложения, предлагаю под катом пример использования JobScheduler в связке с IntentService для последовательного выполнения трудоемких задач.

Читать дальше →
Всего голосов 3: ↑3 и ↓0+3
Комментарии10

30 новых ресурсов для android-разработчика (лето 2017)

Время на прочтение3 мин
Количество просмотров12K
image

Компания EDISON Software профессионально занимается разработкой Android-приложений. Вот некоторые крупные проекты:


Полезные статьи на Хабре по Android:


(Пост из серии «просмотреть и добавить в избранное»)
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии2

30+ инструментов для профессиональной разработки приложений под Android

Время на прочтение6 мин
Количество просмотров48K
image

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

Эти инструменты помогли мне сэкономить много драгоценного времени из моей повседневной жизни, а также помогли мне создавать более качественные приложения. Поэтому, не теряя времени, давайте познакомимся с новыми и потрясающими инструментами для профессиональной разработки приложений под Android.
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии7

Dagger 2.11 & Android

Время на прочтение8 мин
Количество просмотров49K

В данной статье рассматривается использование специализированного модуля Dagger 2 под android и подразумевается, что у вас есть наличие базовых знаний по Dagger 2.


В Dagger 2.10 был представлен новый модуль специально для Android. Данный модуль поставляется как дополнение, состоящий из дополнительной библиотеки и компилятора.
В версии 2.11 были некоторые небольшие изменения, в частности некоторые классы, были переименованы, поэтому будет использоваться именно эта версия.

Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии12

Как писать на Spring в 2017

Время на прочтение10 мин
Количество просмотров276K

В одной из классических статей для новичков, мелькавших недавно на Хабре, рассказывалось про создание базового Web приложения на Java. Все начиналось с сервлета, потом создания JSP страницы и, наконец, деплоймента в контейнер. Посмотрев на это свежим взглядом я понял, что для как раз для новичков это, наверняка, выглядит совершенно жутко — на фоне простых и понятных PHP или Node.js, где все просто — написал контроллер, вернул объект, он стал JSON или HTML. Чтобы немного развеять это ощущение, я решил написать "Гайд для новичков в Spring". Цель это статьи — показать, что создание Web приложений на Java, более того — на Spring Framework это не боль и мучительное продирание через web.xml, persistence.xml, beans.xml, и собирание приложения как карточного домика по кусочкам, а вполне себе быстрый и комфортный процесс. Аудитория — начинающие разработчики, разработчики на других языках, ну и те, кто видел Спринг в его не самые лучше времена.

Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии110

Инструкция по обходу блокировки Telegram. Как активировать SOCKS 5

Время на прочтение2 мин
Количество просмотров275K
В телеграм-канале tnews_ru опубликовали инструкцию по обходу возможной блокировки Telegram — популярного мессенджера, разработанного командой Павла Дурова. В статье описывается способ обхода, который основывается на использовании сетевого протокола SOCKS5. Этот протокол незаметно пересылает пакеты данных от клиента к серверу через прокси-сервер.
Читать дальше →
Всего голосов 46: ↑32 и ↓14+18
Комментарии53

Разбираемся с Conductor

Время на прочтение10 мин
Количество просмотров15K

Сейчас набирает обороты библиотека Conductor, однако в сети не очень много информации по её использованию, а из официальных источников доступны только примеры. Эта статья призвана дать вводный курс по Conductor и убрать некоторые грабли с вашего пути. Статья рассчитана на тех кто уже имеет некоторый опыт в разработке Android.


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


Основные преимущества, которые даёт Conductor:


  • Упрощение кода
  • Транзакции выполняются мгновенно
  • Возможность построить приложение на одной Activity
  • Не ограничивает в выборе архитектуры приложения
  • Легко встраиваемые анимации
  • Отсутствие необходимости сохранять состояния между изменениями конфигураций

Так же в коробке вы получите:


  • Работа с бэкстеком
  • Стандартные коллбеки активити легко доступны
  • Несколько стандартных анимаций
  • Привязка жизненного цикла к RxJava
  • Быстрая интеграция с ViewPager

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


Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии1

Реализация одновременного скролинга по всем направлениям

Время на прочтение6 мин
Количество просмотров5.4K

Введение


Доброго времени суток! Сразу скажу, что программировать я начал недавно и большого опыта у меня нет, поэтому не судите строго, тем более, что материалов на данную тему очень мало. В статье я хочу поделиться своим решением проблемы, которая у меня возникла при создании пошаговой 2D стратегии. Для стратегий привычное дело наличие игрового поля. Но как быть, если у пользователя маленький телефон и всё игровое поле не помещается на экране? Таким вопросом я задался примерно месяц назад, когда у меня ещё ничего не было готово. Сначала я решил как обычно обернуть поле в ScrollView и HorizontalScrollView. И тут начинается собственно проблема. Прокручивать можно было только по одному направлению одновременно, что очень неудобно, тем более для игры. Если вам интересно решение этой проблемы добро пожаловать под кат.
Читать дальше →
Всего голосов 11: ↑6 и ↓5+1
Комментарии1

Работа с ConstraintLayout через XML-разметку

Время на прочтение22 мин
Количество просмотров122K

ConstraintLayout


Привет! Меня зовут Гавриил, я Android-лид Touch Instinct.


В марте Google выкатил релизное обновление ConstraintLayout. Презентовали его еще на прошлом Google I/O. С того момента прошел почти год, ConstraintLayout стал лучше, быстрее и оброс новыми возможностями. Например, приятно, что появилась возможность объединения элементов в цепи — это позволяет использовать ConstraintLayout вместо LinearLayout.


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

Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии6

Инструкция по публикации Android-приложения в Google Play

Время на прочтение12 мин
Количество просмотров380K
Вслед за инструкцией по публикации приложения в App Store выкладываем внутренний свод правил Лайв Тайпинг по публикации приложений в Google Play, составленный отделом менеджеров при активном участии тимлида отдела Android-разработки Александра Мирко. Вне зависимости от того, насколько ты крутой и опытный проджект-менеджер, всегда есть шанс забыть что-нибудь. Эта инструкция призвана облегчить вам жизнь.

Итак, что нужно сделать PM`y в ходе публикации:

  1. Создать аккаунт в Google Play Developer Console для заказчика, если у заказчика такового нет, или предложить произвести публикацию с нашего аккаунта.
  2. Оформить privacy policy.
  3. Подготовить маркетинговые материалы (иконка, скриншоты, APK, баннер, текст, проморолик).
  4. Обеспечить сборку наличием сертификата цифровой подписи.
  5. Настроить оплату за пользование приложения.
  6. Отправить сборку в Google Play.

Все подробности — под катом.

UPD от 25.04.2017: добавлены разделы про альфа- и бета-тестирование и поэтапное внедрение, дополнены разделы «Обеспечение сборки наличием цифровой подписи» и «Технические требования к apk-файлу», сделано замечание про ASO и внесены косметические правки.


Читать дальше →
Всего голосов 19: ↑14 и ↓5+9
Комментарии15
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность