Как стать автором
Обновить
0
Карма
0
Рейтинг

Пользователь

  • Подписчики
  • Подписки 3
  • Публикации
  • Комментарии

Оптимизация сборок Android приложений: ProGuard, D8, R8. Тайны обфускации

Разработка под Android *

Оптимизация сборки — вишенка на торте мобильного приложения. К счастью, существуют инструменты, проверенные временем и заслужившие доверие сообщества. К сожалению, ее не всегда воспринимают всерьез и не уделяют ей должного внимания. Почему в оптимизации должны быть заинтересованы все? Как выжать максимум из мобильного приложения? Как работают инструменты, которыми мы привыкли пользоваться в паре строк? И что нам продают под словом «обфускация»?

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 6.5K
Комментарии 2

Dagger 2. Часть третья. Новые грани возможного

Java *Разработка мобильных приложений *Разработка под Android *

Всем привет! Наконец-то подоспела третья часть цикла статей о Dagger 2!


Перед дальнейшим прочтением настоятельно рекомендую ознакомиться с первой и второй частями.


Большое спасибо за отзывы и комментарии. Я очень рад, что мои статьи действительно помогают разработчикам окунуться в мир Даггера. Именно это и придает силы творить для вас дальше.
В третьей части мы с вами рассмотрим различные интересные и немаловажные фичи библиотеки, которые могут вам очень пригодиться.


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


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


Итак, хватит разглагольствовать, и вперед к новым знаниям!

Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры 50K
Комментарии 30

Dagger 2.11 & Android

Разработка под Android *
Из песочницы

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


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

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

Разбираемся с launchMode Android Activity: standard, singleTop, singleTask и singleInstance

Блог компании OTUS Разработка под Android *
Перевод
Перевод статьи подготовлен специально для студентов продвинутого курса по Android разработке.




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

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

Каждое Activity создается для работы с разными целями. Некоторые из них предназначены для работы отдельно с каждым Intent, например, отправленным Activity для составления электронной почты в почтовом клиенте. В то время как другие предназначены для работы в качестве синглтона, например, Activity почтового ящика.

Вот почему важно указывать, нужно ли создавать новое Activity или использовать существующее, иначе это может привести к плохому UX или сбоям. Благодаря разработчикам ядра Android, это легко сделать с помощью launchMode, который был специально для этого разработан.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 18K
Комментарии 1

Реально ли разработчику в Кремниевой долине стать миллионером? Разбор от Staff Engineer в Lyft

Карьера в IT-индустрии


Изображение: Unsplash

Уже несколько дней интернет-общественность активно обсуждает фильм Юрия Дудя про Кремниевую долину. Опрошенные блогером эксперты рассказали об устройстве мировой IТ-столицы, а также подробно описали жизнь и быт работников технологических компаний.

В фильме проскочила мысль, что многие приезжают в Долину не ради денег, а менять мир, однако талантливые разработчики зарабатывают если не 300к USD/с., то хотя бы под миллион USD в год. И вообще, все приехавшие специалисты быстро вливаются в окружающую действительность стартапов и предпринимательства.

Я решил разобраться, так ли это на самом деле или в реальности не всё так просто. Для этого я поговорил с Денисом Неклюдовым, Staff Engineer в компании Lyft (конкурент Uber) и автором DevJobAccelerator. Итак, посмотрим, как на самом деле выглядит карьерный путь разработчиков в Кремниевой долине – от старта до компенсаций в миллионы долларов.
Читать дальше →
Всего голосов 83: ↑77 и ↓6 +71
Просмотры 54K
Комментарии 147

Как я готовился к собеседованию в Google

Блог компании SkillFactory Карьера в IT-индустрии Лайфхаки для гиков IT-компании
Перевод
Каждый инженер-программист стремится впечатлить людей своим техническим мастерством. Технологические гиганты этого мира — прекрасное место для работы технарей, которые могут предоставить услуги миллиардам пользователей. На моём недавнем собеседовании было несколько раундов, я получил предложения от Google и Amazon. В последние несколько лет онлайн-сообщество очень помогло мне в подготовке к собеседованиям. В этом посте я поделюсь всем о моём пути к собеседованию и верну вклад общества в моё обучение.


Приятного чтения!
Всего голосов 55: ↑50 и ↓5 +45
Просмотры 33K
Комментарии 77

Система непересекающихся множеств и её применения

Алгоритмы *
Добрый день, Хабрахабр. Это еще один пост в рамках моей программы по обогащению базы данных крупнейшего IT-ресурса информацией по алгоритмам и структурам данных. Как показывает практика, этой информации многим не хватает, а необходимость встречается в самых разнообразных сферах программистской жизни.
Я продолжаю преимущественно выбирать те алгоритмы/структуры, которые легко понимаются и для которых не требуется много кода — а вот практическое значение сложно недооценить. В прошлый раз это было декартово дерево. В этот раз — система непересекающихся множеств. Она же известна под названиями disjoint set union (DSU) или Union-Find.

Условие


Поставим перед собой следующую задачу. Пускай мы оперируем элементами N видов (для простоты, здесь и далее — числами от 0 до N-1). Некоторые группы чисел объединены в множества. Также мы можем добавить в структуру новый элемент, он тем самым образует множество размера 1 из самого себя. И наконец, периодически некоторые два множества нам потребуется сливать в одно.

Формализируем задачу: создать быструю структуру, которая поддерживает следующие операции:

MakeSet(X) — внести в структуру новый элемент X, создать для него множество размера 1 из самого себя.
Find(X) — возвратить идентификатор множества, которому принадлежит элемент X. В качестве идентификатора мы будем выбирать один элемент из этого множества — представителя множества. Гарантируется, что для одного и того же множества представитель будет возвращаться один и тот же, иначе невозможно будет работать со структурой: не будет корректной даже проверка принадлежности двух элементов одному множеству if (Find(X) == Find(Y)).
Unite(X, Y) — объединить два множества, в которых лежат элементы X и Y, в одно новое.

На рисунке я продемонстрирую работу такой гипотетической структуры.


Как такое сделать и зачем оно нужно
Всего голосов 114: ↑109 и ↓5 +104
Просмотры 48K
Комментарии 29

Работа для программиста в США: 5 простых шагов

Карьера в IT-индустрии
image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

Мой опыт несколько отличается от нижеописанного (я попала на работу в США после стажировки). Но за 4 года в США пообщалась с людьми, которые попали сюда разными путями и набрала кое-какой опыт. Так что если бы я очень хотела найти работу в США сегодня, то я бы действовала примерно так, как описано ниже.

Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
Читать дальше →
Всего голосов 166: ↑152 и ↓14 +138
Просмотры 280K
Комментарии 138

Как найти работу с релокацией в Европу: практический гайд для IT-специалистов

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

В этой статье я решил собрать наиболее популярные сайты/ресурсы, на которых реально найти вакансии с переездом в страны Европы.

Telegram-каналы



Джоб-борды для IT-специалистов и нишевые сайты


AngelList


На сегодняшний день AngelList является одним из наиболее популярных сайтов по поиску работы в стартапах по всему миру. Процесс поиска вакансий с релокацией на этом сайте очень прост – во вкладке «Compensation» выбираем опцию «Company Will Sponsor Visa». Чтобы сузить полученный список вакансий до максимально релевантных, можно использовать фильтры «Role» и «Location».

image

Glassdoor


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

Чтобы найти вакансии, которые предлагают релокейт, пишем в поисковой строке relocation developer или relocation и название интересной вам позиции. Чтобы сузить результаты поиска, уточняем город/страну, куда хотели бы переехать.

image

Поскольку на сайте Glassdoor нет специального фильтра для поиска работы с переездом, при поиске вакансий описанным выше методом могут попадаться нерелевантные. В целом же, ключевое слово relocation в поисковой строке делает свое дело.
Читать дальше →
Всего голосов 36: ↑31 и ↓5 +26
Просмотры 45K
Комментарии 23

Уязвимости в реализации межпроцессного взаимодействия в Android-приложениях

Блог компании Одноклассники Блог компании JUG Ru Group Информационная безопасность *Разработка под Android *Тестирование мобильных приложений *

Последние 6 лет я работаю экспертом по информационной безопасности в Одноклассниках и отвечаю за безопасность приложений.


Мой доклад сегодня — о механизмах межпроцессного взаимодействия в Android и уязвимостях, связанных с их неверным использованием.



Но сначала пара слов о том, как появился этот доклад.


Наверное, вы уже заметили, что на каждом Heisenbug есть как минимум один доклад про безопасность, например про XSS или поиск уязвимостей в веб-приложениях. Тема мобильной безопасности осталась не охвачена, хотя мы живем в 2020 году, и аудитория мобильных приложений уже давно превысила аудиторию веба. Мне хотелось выбрать тему из мира мобильной безопасности — достаточно конкретную, чтобы выдержать формат технического доклада, но при этом достаточно распространенную.

Читать дальше →
Всего голосов 30: ↑28 и ↓2 +26
Просмотры 4.7K
Комментарии 2

RecyclerView.ItemDecoration: используем по максимуму

Блог компании Surf Разработка мобильных приложений *Интерфейсы *Разработка под Android *Дизайн мобильных приложений *
🔥 Технотекст 2020
Привет, дорогой читатель Хабра. Меня зовут Олег Жило, последние 4 года я Android-разработчик в Surf. За это время я поучаствовал в разного рода крутых проектах, но и с легаси-кодом поработать довелось.

У этих проектов есть как минимум одна общая деталь: везде при разработке приложения использовался список с элементами. Например, список контактов телефонной книги или список настроек вашего профиля.

В наших проектах для списков используется RecyclerView. Я не буду рассказывать, как писать Adapter для RecyclerView или как правильно обновлять данные в списке. В своей статье расскажу о другом важном и часто игнорируемом компоненте — RecyclerView.ItemDecoration, покажу как его применить при вёрстке списка и на что он способен.


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

Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM

Программирование *Java *

Ни для кого не секрет, что на данный момент Java — один из самых популярных языков программирования в мире. Дата официального выпуска Java — 23 мая 1995 года.

Эта статья посвящена основам основ: в ней изложены базовые особенности языка, которые придутся кстати начинающим “джавистам”, а опытные Java-разработчики смогут освежить свои знания.

* Статья подготовлена на основе доклада Евгения Фраймана — Java разработчика компании IntexSoft.
В статье присутствуют ссылки на внешние материалы
.




Читать дальше →
Всего голосов 14: ↑11 и ↓3 +8
Просмотры 29K
Комментарии 7

Энергопотребление Android-приложений

Блог компании Ситимобил Разработка мобильных приложений *Разработка под Android *
Tutorial

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


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


В интернете огромное количество разрозненной информации, собрать которую в единое общее руководство было одной из основных целей этой статьи.


image

Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Просмотры 12K
Комментарии 13

CI TeamCity — Автоматизация build процессов Android и UI тестирования

Java *Google App Engine *Разработка под Android *Gradle *
В этой статье предлагаю Вашему вниманию инструкцию по установке и настройке TeamCity для автоматизации сборки и тестирования Android проектов под Windows.

Также буду уделять внимание особенностям настройки environment’а под Android проект (которые находил в процессе исследования) и различного рода вещам, которые могут помочь облегчить жизнь начинающему тестировщику и разработчику.

Цели:


При обновлении кода проекта должно происходить:

  • Автоматическая сборка проекта
  • Прогон UI автотестов
  • Экспорт APK файлов debug и release для последующего ручного тестирования
  • Уведомление всех участников команды разработки о результатах

План:


  1. Установка и настройка Java JDK
  2. Установка и настройка Android SDK
  3. Установка отдельного Gradle для дебага
  4. Подготовка Android проекта
  5. Установка TeamCity Server и Build Agent
  6. Настройка TeamCity Project → Build для билда проекта и получения установочного APK
  7. Настройка build steps c UI автотестами
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 3.5K
Комментарии 0

Чиним сериализацию объектов в Kotlin раз и навсегда

Блог компании Badoo Java *Разработка мобильных приложений *Разработка под Android *Kotlin *


Недавно я наткнулся на статью о проблеме c Java-сериализацией объектов в Kotlin. Автор предложил решать её добавлением метода readResolve к каждому объекту, который наследуется от java.io.Serializable.


Этот способ выглядит абсолютно правильным, однако его поддержка может оказаться слишком проблематичной. С учетом того, что в нашем проекте эта проблема возникала только при использовании объектов внутри Bundle, мы решили использовать проверку через is для каждой ветки when-выражений в случае sealed классов.


Тем не менее, размышляя об этом, я никак не мог понять, почему Kotlin не генерирует readResolve в компиляторе, поддерживая singleton-свойства объектов. Мне казалось, что это работа для инструментов, а не для человека. Но раз Kotlin не добавляет эту функцию сам, мы можем ему помочь! Этим мы сейчас и займёмся.

Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Просмотры 4.6K
Комментарии 7

Знай сложности алгоритмов

Алгоритмы *
Перевод
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Всего голосов 312: ↑296 и ↓16 +280
Просмотры 737K
Комментарии 99

[Перевод] Java Best Practices. Преобразование Char в Byte и обратно

Java *
Сайт Java Code Geeks изредка публикует посты в серии Java Best Practices — проверенные на production решения. Получив разрешение от автора, перевёл один из постов. Дальше — больше.

Читать дальше →
Всего голосов 37: ↑31 и ↓6 +25
Просмотры 31K
Комментарии 35

SGVsbG8gd29ybGQh или история base64

Алгоритмы *

Краткая предыстория


Вообще, все началось давно. Настолько давно, что вряд ли остались свидетели holy wars тех дней, когда решалось — сколько же бит должно быть в байте.

Это сейчас нам кажется само собой разумеющимся, что 1 байт = 8 бит, что в байте можно закодировать 256 различных значений. Но когда-то было совсем не так. История помнит и семибитные кодировки, и шестибитные, и даже более экзотические системы (например — ЭВМ «Сетунь», которая использовала троичную логику, то есть один троичный бит — трит мог иметь три, а не два значения, для нее было справедливо соотношение 1 трайт = 6 тритам). Но если оставить в стороне всякую экзотику, то мэйнстримом все-таки были кодировки, в которых 6, 7 или 8 бит в байте.

Шестибитная кодировка (например — BCD) позволяла закодировать в одном байте 64 различных значения, что, как казалось, было вполне достаточно для кодирования алфавитно-цифровых символов, а «лишний» седьмой бит расширял кодировку уже до 128 символов.

Однако скоро восьмибитный байт стал общепринятым.
Читать дальше →
Всего голосов 71: ↑64 и ↓7 +57
Просмотры 44K
Комментарии 36

Обзор java.util.concurrent.*

Блог компании Luxoft Программирование *Java *
Tutorial
В повседневной работе не так уж часто приходится сталкиваться с пакетом для многопоточности java.util.concurrent. Иногда существуют проектные ограничения по использованию java 1.4.2, где нет данного пакета, но чаще всего хватает обычной синхронизации и не требуется ничего сверхъестественного. К счастью, периодически возникают задачи, заставляющие немного пораскинуть мозгами и либо написать велосипед, либо порыться в javadoc'ах и найти что-то более подходящее. С велосипедом проблем нет — просто берешь и пишешь, благо ничего суперсложного в многопоточности нет. С другой стороны, меньше кода — меньше багов. Тем более, что на многопоточность никто в здравом уме юнит тестов не пишет, т.к. это уже полноценные интеграционные тесты получаются со всеми вытекающими последствиями.

Что выбрать для конкретного случая? В условиях запарки и deadline'ов довольно сложно охватить весь java.util.concurrent. Выбирается что то похожее и вперед! Так, постепенно, в коде появляются ArrayBlockingQueue, ConcurrentHashMap, AtomicInteger, Collections.synchronizedList(new LinkedList()) и другие интересности. Иногда правильно, иногда нет. В какой то момент времени начинаешь осознавать, что более 95% стандартных классов в java вообще не используются при разработке продукта. Коллекции, примитивы, перекладывание байтиков с одного места на другое, hibernate, spring или EJB, еще какая то библиотека и, вуаля, приложение готово.

Чтобы хоть как то упорядочить знания и облегчить вхождение в тему, ниже идет обзор классов для работы с многопоточностью. Пишу прежде всего как шпаргалку для себя. А если еще кому сгодится — вообще замечательно.
Читать дальше →
Всего голосов 96: ↑87 и ↓9 +78
Просмотры 585K
Комментарии 33

Откуда растут ноги у hashCode

Java *
Опять на собеседованиях по Java спрашивают про hashCode и equals? А кто из собеседующих сам ответит на вопрос, как вычисляется Object.hashCode() и System.identityHashCode()? Насколько дорог вызов этих методов? Как их можно ускорить в HotSpot JVM? Держу пари, едва ли кто даст правильный ответ. Разве что, кто прочитает эту статью.
Читать дальше →
Всего голосов 93: ↑91 и ↓2 +89
Просмотры 81K
Комментарии 43

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность