Pull to refresh
9
0
Красковский Антон @grafic

User

Send message

Реактивные приложения с Model-View-Intent. Часть 1: Модель

Reading time9 min
Views32K
При работе с платформой Android я столкнулся со множеством проблем, потому что проектировал свои Модели неправильно. Мои приложения были недостаточно реактивными. Теперь используя RxJava и Model-View-Intent (MVI) я, наконец, добился нужного уровня реактивности. Об этом я пишу цикл статей. В первой части расскажу о модели и объясню, чем она важна.
Total votes 16: ↑16 and ↓0+16
Comments8

Разрабатываем видеочат между браузером и мобильным приложением

Reading time11 min
Views24K

Империи зла нередко получают лучи ненависти со стороны конечных пользователей. Не смотря на это, Uber частично оплачивает наши поездки, хоть и временно, а Google придал значительное ускорение технологии WebRTC, которая бы так и оставалась проприетарной и сильно платной софтиной для узких целей b2b, если бы не ИЗ.

После появления WebRTC, видеочаты стало делать проще. Появились различные API и сервисы, серверы и фреймворки. В данной статье мы подробно опишем еще один способ разработки видеочата между веб-браузером и нативным Android-приложением
Читать дальше →
Total votes 24: ↑20 and ↓4+16
Comments8

NeoQuest 2017: Реверс андроид приложения в задании «Почини вождя!»

Reading time9 min
Views9.5K


Всем доброго времени суток, сегодня, 10 марта закончился онлайн этап NeoQuest 2017. Пока жюри подводят итоги и рассылают пригласительные на финал, предлагаю ознакомиться с райтапом одного из заданий: Greenoid за который судя по таблице рейтинга, можно было получить до 85 очков.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments9

Модификация стоковых прошивок для Android. Часть 5. Революция c Xposed Framework

Reading time19 min
Views20K
В 2012 году пользователь с ником rovo89 на комьюнити XDA опубликовал исходные коды и готовый к использованию фреймворк, упрощающий кастомизацию прошивок, с подробной инструкцией и примерами, предложив альтернативу традицоинному, на тот момент, способу (деодексирование→ дизассемблирование → декомпиляция → рекомпиляция → тестирование → загрузка патчей в телефон): Часть 1, Часть 2, Часть 3, Часть 4

Он предложил использовать отдельные модули, которые можно изменять фактически налету, не вмешиваясь в исходный код прошивки или отдельных ее компонентов. Но авторитетные разработчики хором ответили: "Неа… никому это не нужно"

Rovo не забросил свое детище, а продолжил развитие. Когда в 2013-ом году вышла версия KitKat, все то же сообщество именитых девелоперов ответило: "Неа, это слишком опасно… хотя..."

Тем временем Google принял решение выпускать новую версию операционной системы ежегодно. Разумеется, стало накладно кастомизировать прошивки: не успеваешь сделать одну, как появляется новая версия ОС. Так в 2014-ом выходит версия Lollipop и разработчики наконец обращают внимание на фреймфорк с мыслями: "Может все же стоит посмотреть что это такое? Выглядит многообещающим".

В 2015-ом году вышла очередная версия (Marshmallow) и большая часть сообщества, в итоге, признала разработку весьма стоящей, на порядок сокращающей время разработки кастомизаций стоковых прошивок в виде установки отдельных модулей, расширяющих функционал. "Ничего себе, это же совсем безопасно и есть библиотека готовых полезных модулей!" — воскликнули они.

Сейчас конец февраля 2017-го. Xposed под Nougat все еще не доступен, а толпы страждущих разработчиков и пользователей то и дело открывают темы под тип "Xposed не работает! Он мне нужен! Rovo, пожалуйста!"

Сегодня я расскажу об Xposed Framework.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments8

Создание собственной View под Android – может ли что-то пойти не так?

Reading time28 min
Views45K
«Дело было вечером, делать было нечего» — именно так родилась идея сделать вью с возможностью зума, распределяющую юзеров по рангам в зависимости от кол-ва их очков. Так как до этого я не имел опыта в создании собственных вьюшек такого уровня, задача показалась мне интересной и достаточно простой для начинающего… но, *ох*, как же я ошибался.

В статье я расскажу о том, с какими проблемами мне пришлось столкнутся как со стороны Android SDK, так и со стороны задачи (алгоритма кластеризации). Основная задача статьи – не научить делать так называемыми “custom view”, а показать проблемы, которые могут возникнуть при их создании.

Тема будет интересна тем из вас, кто имеет мало (или не имеет вовсе) опыта в создании чего-то подобного, а также тем, кто хочет словить лулзов с автора в сто первый раз уверовать в «гибкость» Android SDK.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments11

Анимации c помощью Transitions API

Reading time11 min
Views70K
Привет!

На хабре ещё не была освещена тема Transitions API для анимаций, которые появились в Android начиная с 4.4 (KitKat) и продолжили свое развитие в 5.0 (Lollipop). В своей статье я расскажу о том, как упростить работу с анимациями с их использованием и как применять их на любом устройстве с версией Android 4.0 и выше.


Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments20

Dagger 2. Часть вторая. Custom scopes, Component dependencies, Subcomponents

Reading time8 min
Views119K

Всем привет!
Продолжаем наш цикл статей о Dagger 2. Если вы еще не ознакомились с первой частью, немедленно сделайте это :)
Большое спасибо за отзывы и комментарии по первой части.
В данной статье мы поговорим о custom scopes, о связывании компонентов через component dependencies и subcomponents. А также затронем такой немаловажный вопрос, как архитектура мобильного приложения, и как Dagger 2 помогает нам выстраивать более правильную, модульнонезависимую архитектуру.
Всем заинтересовавшихся прошу под кат!

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments26

Dagger 2. Часть первая. Основы, создание графа зависимостей, Scopes

Reading time10 min
Views171K

Всем привет! В последнее время появилось много средств, библиотек, которые существенно облегчают написание кода под Android. Только успевай за всем следить и все пробовать. Одним из таких средств является библиотека Dagger 2.


В сети уже много различного материала, посвященного данной библиотеке. Но когда я только начинал ознакамливаться с Dagger 2, читал статьи, смотрел доклады, я во всем этом находил один общий недостаток — мне, как человеку, не работавшему со Springом и прочими подобными фреймворками/библиотеками, было довольно сложно понять, откуда берутся зависимости, как они "провайдятся" и что вообще там происходит. На слушателей/читателей обычно сразу "вываливается" большое количество кода с новыми аннотациями. И это как-то работало. В итоге, после доклада/статьи в голове все никак не могло сложиться в единую понятную картину.


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


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

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments22

Новое в Java 8

Reading time15 min
Views508K
Java еще не умерла — и люди начинают это понимать.

Добро пожаловать в ведение по Java 8. Этот материал шаг за шагом познакомит вас со всеми новыми фичами языка. Вы научитесь использовать методы интерфейсов по умолчанию (default interface methods), лямбда-выражения (lambda expressions), ссылки на методы (method references) и повторяемые аннотации (repeatable annotations). Все это будет сопровождаться короткими и простыми примерами кода. В конце статьи вы познакомитесь с наиболее свежими изменениями в API, касающихся потоков, функциональных интерфейсов, расширений для ассоциативных массивов, а также с изменениями в API работы с датами.
Читать дальше →
Total votes 96: ↑95 and ↓1+94
Comments139

Боли в руках при работе за компьютером. Часть 5. Синдром запястного канала

Reading time4 min
Views22K
В прошлых статьях цикла вы познакомились с диагностикой основных туннельных синдромов верхней конечности, учились снимать напряжение с надплечий, снимали напряжение с лестничных мышц и круглого пронатора.

Теперь пришло время заняться синдромом запястного канала и, одновременно, снять проявление синдрома локтевого канала.
image

Вы можете продолжить чтение только в том случае, если подготовились провести 15-20 минут, выполняя движения из ситуаций урока. Нет смысла прочитать инструкции, отписаться в комментариях: «подход крутой, однако ещё нет возможности его попробовать – может быть, завтра или в выходные…» Или: «что не делал – эффекта нет, у меня …, какое ваше мнение по этому вопросу. Спрашиваете какой эффект от урока в статье? – не было эффекта – урок пока не делал».

Люди, эффективно использующие знания, точно такие же, как и вы, просто они, обучаясь, что-то увидели внутри себя. Под катом расположен именно такой урок.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments30

Делаем экран загрузки Android приложения правильно

Reading time3 min
Views129K
Splash Screen (прим.: тут и далее — экран загрузки) просто отнимает ваше время, верно? Как Android разработчик, когда я вижу экран загрузки, я тут же представляю как некоторые плохие разработчики добавляют трехсекундную задержку в коде.

Я должен смотреть на какое-то изображение в течении нескольких секунд, и до тех пор я не могу использовать приложение. И я должен это делать каждый раз после запуска приложения. Я знаю какое приложение я запустил. Я знаю что оно делает. Просто позвольте мне использовать его!
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments17

Особенности программного ProxyChanging'а в Android. Часть 1: от Jelly Bean до Lollipop

Reading time23 min
Views5.2K
Как-то раз, для собственного удобства, мне захотелось написать приложение, которое меняет настройки прокси в конфигурации сетей Wifi для Android. Задача, как мне тогда показалось, была на раз плюнуть, однако, на деле, как всегда, возникли непредвиденные сложности.



Если вы считаете полезным в будущем знать решение, хотите почерпнуть что-то для себя или в вас просто проснулось любопытство — добро пожаловать под кат. Там вас ждет внутреннее устройство классов отвечающих за конфигурацию Wifi в различных версиях Android, небольшая чашечка кода на Java и щепотка Reflection.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments6

Android Dev: продолжение подкастов о профессиональной разработке под Android

Reading time4 min
Views13K
Привет, Хабр! В школах начинается новый учебный год, коллеги возвращаются из отпусков, а мы начинаем новый сезон наших подкастов о разработке под Android! Как известно, андроид разработчики делятся на две категории: кто слушает наш подкаст и кто о нем еще не слышал. Данная статья как раз для того, чтобы восполнить ваши пробелы непрослушанных выпусков и привлечь новых слушателей, с новыми комментариям к нашим обсуждениям. В новом сезоне мы снова окунемся с головой в большие темы, требующие детального разбора, но и не забудем держать слушателей в курсе последних новостей.

Но прежде, чем анонсировать темы предстоящих выпусков, мы пройдемся по прошлым четырнадцати, ведь многие из них до сих пор не теряют свою актуальность и рекомендованы к прослушиваю каждому, кто не безразличен к разработке приложений под Android.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments8

Удачная модель ветвления для Git

Reading time10 min
Views981K
Перевод статьи Vincent Driessen: A successful Git branching model

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



В качестве инструмента управления версиями всего исходного кода она использует Git.

Читать дальше →
Total votes 180: ↑171 and ↓9+162
Comments105

Дружественное введение в Dagger 2. Часть 1

Reading time7 min
Views33K

Что такое внедрение зависимостей, что представляет собой Dagger и как он может пригодиться нам в написании более чистого и простого в тестировании кода.


Дисклеймер от переводчика. Данный перевод выполнен в целях самообразования, а на Хабре выложен в предположении, что многим начинающим Android-девелоперам, которым, как и мне, не довелось родиться Java-говорящим разработчиком в пятом поколении, достаточно сложно разобраться в конечных продуктах многолетних наслоений концепций и методов разработки. Эта серия статей — отличный пример того, как нужно объяснять сложные вещи, и, надеюсь, Вам она понравится не меньше, чем мне. Обо всех замеченных ошибках и неточностях прошу сообщать в личку.

Внедрение зависимостей (Dependency injection, DI) — великолепная техника, упрощающая покрытие приложения тестами, а Dagger 2 — один из самых популярных Java/Android фреймворков, предназначенных для этой цели. При этом большинство вводных курсов по Dagger 2 исходят из предположения, что читатель уже хорошо знаком с DI и его достаточно сложной терминологией, затрудняющей вхождение для новичков.

В этой серии статей я попытаюсь представить вам более дружественное введение в Dagger 2 со множеством примеров уже готового для компиляции кода.
Начать знакомство
Total votes 11: ↑10 and ↓1+9
Comments6

LeakCanary — помощник в поиске утечек памяти

Reading time3 min
Views32K

Никому не нравятся креши с OutOfMemoryError


Работая над Square Register, мы рисуем подпись клиента используя битмап-кеш. Поскольку этот битмап размером с экран устройства, у нас было очень много OutOfMemory крешей во время создания его.

image

Мы пробовали несколько подходов ни один из которых не решил проблему:
  • Использовали Bitmap.Config.ALPHA_8
  • Ловили OutOfMemoryError, вызывали сборку мусора и пробовали снова (подглядели в GCUtils),
  • Мы не рассматривали вариант с размещением битмапов вне кучи Java. К счастью Fresco еще не существовало,


Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments7

Почему следует использовать RxJava в Android – краткое введение в RxJava

Reading time8 min
Views31K
Здравствуйте все.

Мы продолжаем знакомить вас с нашим издательским поиском, и хотели прозондировать общественное мнение на тему RxJava.



В ближайшее время собираемся опубликовать более общий материал по реактивному программированию, которое нас также интересует не первый год, а сегодня предлагаем почитать о применении RxJava в Android, так как именно на этой платформе особенно важна динамичность и быстрота реагирования. Добро пожаловать под кат
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments16

Пагинация списков в Android с RxJava. Часть I

Reading time13 min
Views40K
Часто при разработке клиента мы сталкиваемся с задачей отображения какой-либо информации с сервера, базы данных или еще чего-нибудь в виде списка. И при прокручивании списка данные должны автоматически подгружаться и вставляться в список незаметно для пользователя. У пользователя вообще должно сложиться впечатление, что он скроллит бесконечный список.

В данной статье я бы хотел рассказать вам о том, как сделать автоподгружаемый список простейшим в реализации для разработчика и максимально эффективным и быстрым для пользователя. А также о том, как нам в этом здорово поможет RxJava с ее главной догмой — «Everything is Stream!»
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments8

Пагинация списков в Android с RxJava. Часть II

Reading time12 min
Views24K
Всем добрый день!
Приблизительно месяц назад я писал статью об организации пагинации списков (RecyclerView) с помощью RxJava. Что есть пагинация по-простому? Это автоматическая подгрузка данных к списку при его прокрутке.
Решение, которое я представил в той статье было вполне рабочее, устойчивое к ошибкам в ответах на запросы по подгрузке данных и устойчивое к переориентации экрана (корректное сохранение состояния).
Но благодаря комментариям хабровчан, их замечаниям и предложениям, я понял, что решение имеет ряд недостатков, которые вполне по силам устранить.
Огромное спасибо Матвею Малькову за подробные комментарии и отличные идеи. Без него рефакторинг прошлого решения не состоялся бы.
Всех заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments1

Shake Detector для Android на RxJava

Reading time9 min
Views17K


Вступление


Началось все с того, что была поставлена задача отменять последнее действие в приложении при встряхивании устройства. Но как понять, что случилось это самое встряхивание? Через пару минут изучения вопроса стало ясно, что надо подписываться на события от акселерометра и дальше пытаться как-то определить, что устройство встряхнули.
Обнаружились и готовые решения. Все они были довольно похожи, но в чистом виде они меня не устраивали, и я написал собственный «велосипед». Это был класс, который подписывался на события от сенсора и менял свое состояние по мере их поступления. Потом пару раз я и мои коллеги подкручивали шестеренки этого велосипеда, и в результате он стал напоминать нечто из «Безумного Макса». Я пообещал, что, как выдастся свободное время, приведу это безобразие в порядок.

И вот, читая недавно статьи по RxJava, я вспомнил про эту задачу. «Хм, — подумал я, — RxJava выглядит очень подходящим инструментом для такого рода проблем». Не откладывая в долгий ящик, взял и написал решение на RxJava. Результат меня поразил: вся логика заняла 8 (восемь!) строк! Я решил поделиться своим опытом с другим разработчикам. Так появилась на свет эта статья.

Надеюсь, этот простой пример поможет принять решение тем, кто размышляет о применении RxJava в своих проектах.

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

Приступим!
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments11

Information

Rating
Does not participate
Location
Курск, Курская обл., Россия
Date of birth
Registered
Activity