Pull to refresh
2
0
Алексей Ершов @alaershov

Android разработчик

Send message

На чем писать Android UI-тесты

Reading time21 min
Views17K

Всем привет. Мы в Avokado Project продолжаем рассказывать про автотестирование в Android. Эта статья — обзор и сравнение существующих инструментов для написания UI-тестов.


Давайте начнем с того, что вспомним, как обычно выглядит процесс тестирования. Будем называть сущность, которая взаимодействует с приложением, клиентом. Для взаимодействия с приложением клиенту обычно доступно несколько интерфейсов: API, REST API, CLI, GUI и т.д. И если, например, API используются клиентами-программами, то GUI используется человеком.


Ожидания от поведения приложения описываются в спецификации. Задача тестирования — проверить, что поведение приложения соответствует спецификации.


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

Собеседование наоборот: вопросы соискателя к компании

Reading time6 min
Views75K
Всем привет! Хочу очередной раз поднять тему про найм. Только я собираюсь поговорить об этом с точки зрения кандидата, а не работодателя. Ведь собеседование, вопреки многим стереотипам, процесс двусторонний — вопросы может задавать не только интервьюер, но и сам соискатель. За прошлый год я провёл порядочное количество собеседований, и абсолютное большинство кандидатов огорчило меня отсутствием вопросов о компании, всего 5 человек стали меня расспрашивать о работе.

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

image
Читать дальше →
Total votes 137: ↑131 and ↓6+125
Comments130

Инкрементальный annotation proccesing для ускорения gradle-сборок

Reading time10 min
Views7.7K

image


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

Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments3

Kaspresso: фреймворк для автотестирования, который вы ждали

Reading time7 min
Views32K
Все, кто занимался или занимается автотестами под Android, знают, какая это боль.
От объема задач и проблем устаешь так, что и отпуск не помогает. Люди даже увольняются из-за автотестов.

Боль, страдания и мучения неизбежно приводят к появлению чего-то нового и прекрасного. Мы постарались собрать вместе все грабли, на которые нам пришлось наступить, объединили свои усилия с ребятами из «Авито» и HH и создали то, что сделает ваши отношения с автотестами несравнимо лучше и плодотворнее.

Встречайте: Kaspresso — фреймворк для автотестирования, который вы ждали!


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

Kaspersky Mobile Talks #1. Многомодульность

Reading time8 min
Views9.3K

В конце февраля мы запустили новый формат встреч Android-разработчиков Kaspersky Mobile Talks. Основное отличие от обычных митапов — здесь вместо сотни слушателей и красивых презентаций на несколько различных тем собрались «бывалые» разработчики, чтобы обсудить всего лишь одну тему: как они реализуют многомодульность в своих приложениях, с какими проблемами сталкиваются, и как их решают.


Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments0

[По докам] Flutter. Часть 1. Для Android разработчиков

Reading time25 min
Views41K
Про Flutter написано уже много статей. С каждым месяцем он становится всё популярнее. Поэтому я решил интерпретировать официальную документацию Flutter в лаконичный формат «вопрос — ответ». Думаю, многие, как и я, не имеют достаточно свободного времени для подробного изучения документации фреймворка, с которым они ещё не работают.

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


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

Свежий взгляд на отображение диалогов в Android

Reading time9 min
Views27K


На картинке первая мысль читателя, который недоумевает, что можно написать про такую простую задачу как отображения диалога. Аналогично думает и менеджер: «Тут ничего сложного, наш Вася за 5 минут сделает». Я, конечно, утрирую, но на самом деле всё не так просто, как кажется на первый взгляд. Особенно если мы говорим про Android.


Итак, на дворе шёл 2019 год, а мы всё ещё не умеем нормально показывать диалоги.

Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments24

Лицензия на вождение болида, или почему приложения должны быть Single-Activity

Reading time14 min
Views59K

image


На AppsConf 2018, которая прошла 8-9 октября, я выступил с докладом про создание андроид-приложений целиком в одном Activity. Хотя тема известная, существует много предубеждений относительно такого выбора — переполненный зал и количество вопросов после выступления тому подтверждение. Чтобы не ждать видеозаписи, я решил сделать статью с расшифровкой выступления.



О чем я расскажу


  1. Почему и зачем надо переходить на Single-Activity
  2. Универсальный подход для решения задач, которые вы привыкли решать на нескольких Activity
  3. Примеры стандартных бизнес задач
  4. Узкие места, где обычно подпирают код, а не делают все честно
Читать дальше →
Total votes 43: ↑40 and ↓3+37
Comments81

Моё разочарование в софте

Reading time11 min
Views388K

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


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

Для примера, современные автомобили работают, скажем, на 98% от того, что физически позволяет нынешняя конструкция двигателя. Современная архитектура использует точно рассчитанное количество материала, чтобы выполнять свою функцию и оставаться в безопасности в данных условиях. Все самолёты сошлись к оптимальному размеру/форме/нагрузке и в основном выглядят одинаково.

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.
Total votes 505: ↑474 and ↓31+443
Comments2474

Многомодульность в Android с точки зрения архитектуры. От А до Я

Reading time20 min
Views62K
Всем привет!

Не так давно мы с вами осознали, что мобильное приложение — это не просто тонкий клиент, а это действительно большое количество самой разной логики, которое нуждается в упорядочивании. Именно поэтому мы прониклись идеями Clean architecture, прочувствовали, что такое DI, научились использовать Dagger 2, и теперь с закрытыми глазами способны разбить любую фичу на слои.

Но мир не стоит на месте, и с решением старых проблем приходят новые. И имя этой новой проблемы — мономодульность. Обычно об этой проблеме узнаешь, когда время сборки улетает в космос. Именно так и начинаются многие доклады про переход на многомодульность (раз, два).
Но почему-то все при этом как-то забывают, что мономодульность сильно бьет не только по времени сборки, но и по вашей архитектуре. Вот ответьте на вопросы. На сколько у вас AppComponent большой? Не встречаете ли вы периодически в коде, что фича А зачем-то дергает репозиторий фичи Б, хотя вроде такого быть не должно, ну или оно должно быть как-то более верхнеуровнево? Вообще у фичи есть какой-то контракт? А как вы организовываете общение между фичами? Есть какие-то правила?
Вы чувствуете, что мы решили проблему со слоями, то есть вертикально все вроде хорошо, но вот горизонтально что-то идет не так? И просто разбиением на пакеты и контролем на ревью не решить проблему.

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

В своей статье я хочу вам рассказать, как дошел до многомодульности именно с архитектурной точки зрения. Какие проблемы меня беспокоили, и как я их старался поэтапно решать. А в конце вас ждет алгоритм перехода с мономодульности на многомодульность без слез и боли.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments18

RxPM — реактивная реализация паттерна Presentation Model

Reading time9 min
Views13K

Через полгода после выхода прошлой статьи о сравнении RxPM c другими презентационными паттернами мы с Jeevuz, наконец, готовы представить библиотеку RxPM — реактивную реализацию паттерна Presentation Model. Давайте сделаем небольшой обзор основных компонентов библиотеки и покажем, как их использовать.


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

Многомодульность и Dagger 2. Лекция Яндекса

Reading time9 min
Views20K
Когда ваше приложение построено на многомодульной архитектуре, приходится посвящать много времени тому, чтобы все связи между модулями были корректно прописаны в коде. Половину этой работы можно поручить фреймворку Dagger 2. Руководитель группы Яндекс.Карт для Android Владимир Тагаков Noxa рассказал о плюсах и минусах многомодульности и удобной организации DI внутри модулей при помощи Dagger 2.


— Меня зовут Владимир, я разрабатываю Яндекс.Карты и сегодня буду рассказывать вам про модульность и второй Dagger.
Total votes 12: ↑12 and ↓0+12
Comments2

Как ты реализуешь аутентификацию, приятель?

Reading time10 min
Views118K


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


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


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

Читать дальше →
Total votes 89: ↑82 and ↓7+75
Comments94

Kotlin code style

Reading time6 min
Views20K

За полтора года работы с языком Kotlin, мы перевели на него все свои проекты и фреймворки. Чтобы разработчики могли быстрее включаться в работу над проектом, а код ревью не превращался в бесконечный спор, мы решили формализовать накопленный опыт и разработали собственный код-стайл.


Поехали!

Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments22

Продуктизация мозга разработчика: как перестать писать код и начать писать приложения

Reading time8 min
Views12K
Мобильный рынок развивается настолько стремительно, что для того, чтобы понравиться пользователям, уже недостаточно разработать просто хорошее приложение. Нужно ориентироваться на аудиторию, предлагать интересные и полезные фичи, но при этом не переборщить. Как балансировать между написанием кода и творческими идеями, где сейчас самые интересные проекты и нужны ли пользовательские данные для создания классного приложения? Мы поговорили об этом с экспертом по разработке под Android Йонатаном Левином.



Йонатан Левин имеет звание Google Android Experts. В свое время он сыграл ключевую роль в успехе Gett и получил финансирование генетического market connector-а KolGene. Йонатан — состоявшийся Android-разработчик, а также предприниматель, который отлично знает, как превратить хорошие идеи для приложения в прибыльный продукт.
Читать дальше →
Total votes 32: ↑27 and ↓5+22
Comments1

Что общего у мобильного QA и осьминога

Reading time8 min
Views42K


Привет! Я Катя, и я – трудоголик тестировщик самого популярного приложения для новых знакомств.

Итак, раннее утро, вы – мобильный QA. Вы приходите на работу, завариваете крепкий кофе и хотите взять пару мобильных устройств для тестирования новой фичи, осознавая, какие муки выбора вам предстоят. Что это будут за устройства?

Рано или поздно каждый мобильный тестировщик задаётся вопросом, на каком количестве устройств тестировать новый функционал, чтобы поймать максимальное количество девайсозависимых багов, потратив минимум времени. Автотесты ещё не написаны, перед вами абсолютно новые фичи. И если с iOS есть хоть какая-то ясность, и список устройств ограничен, то Android «расплодился» в полнейший ад. Вы удивитесь, но для счастья нужно всего три–четыре Android-устройства. Я хочу рассказать, как с точки зрения опытного тестировщика их выбрать.
Читать дальше →
Total votes 75: ↑73 and ↓2+71
Comments29

Kakao — как сделать UI тестирование снова великим

Reading time3 min
Views15K
image

В компании «Agoda» мы уделяем много внимания различным видам тестирования нашего кода. Это помогает нам гарантировать его стабильность и находить возможные проблемы продукта на раннем этапе.

В данный момент, тестирование пользовательского интерфейса на Android для нас является небольшим персональным филиалом ада. Google предоставляет нам Espresso вместе с несколькими расширениями, UI автоматор и так далее. И хоть инструменты отлично справляются c возложенной на них задачей, делают они это не очень красиво. Когда вам нужно протестировать кейс, отличающийся от простого клика по кнопке, ваш тестовый код превращается в месиво, сложно поддающееся чтению. Просто взгляните:

@Test
public void espressoTest() {
  onView(allOf(allOf(withId(R.id.label_bf_hotelname), 
        isDescendantOfA(withId(R.id.custom_view_trip_review))), 
        isDescendantOfA(withId(R.id.contentView))))
        .check(matches(withEffectiveVisibility(View.VISIBLE)));
}

Для меня этот код выглядит малочитаемым. Очень сложно поддерживать работу более чем 1000 UI тестов нашего Android приложения с подобным синтаксисом. Но Google объявила официальную поддержду языка Kotlin как языка для Android разработки на конференции Google I/O 2017. Тогда то мы и подумали: «А ведь мы можем попробовать мигрировать наши тесты на Kotlin!»

Но просто трансляция кода из Java в Kotlin не решает нашу проблему с читаемостью тестов, так как мы все еще зависим от Espresso. К счастью, Kotlin предоставляет нам множество инструментов для создания DSL. Имея это ввиду, мы представили как наши UI тесты должны выглядеть на Kotlin'е. Мы хотели, чтобы тест выше выглядел вот так:

@Test
fun espressoTest() {
  screen { hotelName { isVisible() } }
}

Выглядит здорово, вы так не считаете? Гораздо более читаемый и с легкостью понимаемый код, чем при использовании Espresso. И в большинстве ситуаций более компактный. Удалось ли нам добиться такого синтаксиса? Еще как!
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments6

Планирование задач в Андроид

Reading time4 min
Views43K

Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Schedule tasks and jobs intelligently in Android» от Ankit Sinhal.


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

Читать дальше →
Total votes 16: ↑12 and ↓4+8
Comments12

Spark — Потрясающий веб-микрофреймворк для Java

Reading time6 min
Views42K
image

Небольшое вступление


Spark — это просто чудесный микрофреймворк для создания веб-приложений на джаве без особых усилий.  Spark стремится к простоте и обеспечивает только минимальный набор функций. Тем не менее он предоставляет все необходимое для создания веб-приложения, которые поместятся в несколько строк кода. С синтаксисом, вдохновленным Sinatra, код выглядит очень чистым.
Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments67

[Перевод] Круглее круга: оптические эффекты при проектировании интерфейсов

Reading time9 min
Views41K
Какой «круг»воспринимается как самый «круглый»?

image

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

Как создать визуально пропорциональные иконки, правильно расположить объекты разных форм и выполнить идеальное скругление углов. В посте представлено более 50 изображений.
Читать дальше →
Total votes 86: ↑85 and ↓1+84
Comments44
1

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity