Опубликовано

2-е издание книги “Android глазами хакера”

Android глазами хакера. 2-е издание

Рассмотрена внутренняя архитектура ОС Android, используемые ею разделы и файловые системы, принцип работы механизмов обновления и внутренних инструментов безопасности. Рассказано о разграничении доступа в ОС Android, о привилегиях, методах получения прав root, кастомизации и установке нестандартных прошивок. Описаны инструменты для дизассемблирования, отладки и анализа кода мобильных приложений, приведены примеры модификации кода с целью изменения функций ПО и внедрения в приложение сторонних модулей. Даны подробные рекомендации по деобфускации кода и обходу антиотладки, а также практические советы по защите собственных приложений от декомпиляции и исследования. Приводятся сведения о вредоносных программах для платформы Android, используемых ими уязвимостях, даны примеры кода таких программ. Рассказывается об использовании стандартных функций Android в нестандартных целях и способах противодействия вредоносному ПО. Во втором издании приводятся сведения об изменениях и нововведениях в Android 14.

Для разработчиков мобильных приложений, реверс-инженеров, специалистов по информационной безопасности и защите данных

БЕЗОПАСНОСТЬ ANDROID, ВЗЛОМ ПРИЛОЖЕНИЙ И ЗАЩИТА ОТ ВЗЛОМА

В книге рассмотрены:

  • Безопасность Android
  • Внутреннее устройство системы
  • Кастомизация прошивки
  • Получение root
  • Практические приемы взлома
  • Реверс-инжиниринг
  • Предотвращение взлома и исследования приложений
  • Мобильные вредоносные программы

Книга состоит из трех частей:

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

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

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

Если ты хочешь узнать, как устроен Android «под капотом», как работает его система безопасности и как ее обойти, как действуют мобильные трояны, как дизассемблировать и взламывать чужие приложения и как защитить от взлома свои, — поздравляю, ты нашел настоящее сокровище! Книга будет интересна и полезна любому читателю: от начинающего программиста до профессионала.
Валентин Холмогоров, ведущий редактор журнала «Хакер»

Книгу “Android глазами хакера. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение………………………………………………………………………………………………….. 9

Что вы найдете в этой книге?……………………………………………………………………………………………………. 10

Для кого эта книга?……………………………………………………………………………………………………………………. 11

Предисловие ко второму изданию……………………………………………………………………………………………. 11

Условные обозначения……………………………………………………………………………………………………………… 12

Приложение AnTrack…………………………………………………………………………………………………………………. 12

Часть I…………………………………………………………………………………………………. 13

Глава 1. Пять столпов Android. Технологии, лежащие в основе
самой популярной ОС……………………………………………………………………………. 15

Виртуальная машина………………………………………………………………………………………………………………… 15

Многозадачность………………………………………………………………………………………………………………………. 18

Binder…………………………………………………………………………………………………………………………………………… 21

Сервисы Google………………………………………………………………………………………………………………………….. 23

Ядро Linux и рантайм……………………………………………………………………………………………………………….. 24

Android Go…………………………………………………………………………………………………………………………………… 26

Глава 2. От кнопки включения до рабочего стола…………………………………. 29

Шаг первый. Aboot и таблица разделов………………………………………………………………………………….. 29

Шаг второй. Раздел boot……………………………………………………………………………………………………………. 31

Шаг второй, альтернативный. Раздел recovery……………………………………………………………………….. 33

Шаг третий. Инициализация…………………………………………………………………………………………………….. 33

Шаг четвертый. Zygote и app_process………………………………………………………………………………………. 35

Глава 3. Treble, A/B-разметка, динамические и модульные обновления…. 39

Treble…………………………………………………………………………………………………………………………………………… 40

A/B-разметка………………………………………………………………………………………………………………………………. 41

Динамические обновления………………………………………………………………………………………………………… 44

Виртуальная A/B-разметка………………………………………………………………………………………………………. 46

Модульные обновления…………………………………………………………………………………………………………….. 46

Трюк с сохранением пространства………………………………………………………………………………………….. 48

Глава 4. Броня Android…………………………………………………………………………… 51

Полномочия………………………………………………………………………………………………………………………………… 52

Ограничения……………………………………………………………………………………………………………………………….. 55

Запрет доступа к другим приложениям……………………………………………………………………….. 56

Шифрование данных…………………………………………………………………………………………………………………. 57

Доверенная среда исполнения………………………………………………………………………………………………….. 59

Доверенная загрузка………………………………………………………………………………………………………………….. 61

Защита от срыва стека………………………………………………………………………………………………………………. 62

SELinux……………………………………………………………………………………………………………………………………….. 65

Seccomp-bpf……………………………………………………………………………………………………………………………….. 66

Виртуализация…………………………………………………………………………………………………………………………… 68

Google Play Protect……………………………………………………………………………………………………………………… 69

Smart Lock………………………………………………………………………………………………………………………………….. 70

WebView……………………………………………………………………………………………………………………………………… 72

SafetyNet (Play Integrity API)…………………………………………………………………………………………………….. 73

Kill Switch…………………………………………………………………………………………………………………………………….. 74

Цифровые подписи APK…………………………………………………………………………………………………………….. 74

Итог……………………………………………………………………………………………………………………………………………… 76

Глава 5. Альтернативные прошивки, рутинг и кастомизация……………….. 77

GrapheneOS…………………………………………………………………………………………………………………………………. 77

Tor……………………………………………………………………………………………………………………………………………….. 79

Рутинг………………………………………………………………………………………………………………………………………….. 80

SuperSU……………………………………………………………………………………………………………………………. 82

Magisk………………………………………………………………………………………………………………………………. 82

Модификации…………………………………………………………………………………………………………………………….. 83

Часть II……………………………………………………………………………………………….. 85

Глава 6. Основы взлома…………………………………………………………………………. 87

Делаем платное бесплатным……………………………………………………………………………………………………. 87

Снаряжаемся…………………………………………………………………………………………………………………… 88

Вскрываем подопытного……………………………………………………………………………………………….. 89

Изучаем код…………………………………………………………………………………………………………………….. 90

Вносим правки………………………………………………………………………………………………………………… 92

Глава 7. Внедряемся в чужое приложение………………………………………………. 95

Ищем точку входа……………………………………………………………………………………………………………………… 95

Пишем payload…………………………………………………………………………………………………………………………… 97

Вызываем payload……………………………………………………………………………………………………………………… 98

Крадем данные………………………………………………………………………………………………………………………… 100

Периодические задачи…………………………………………………………………………………………………………….. 103

Глава 8. Продираемся сквозь обфусцированный код…………………………… 105

Как работает обфускация……………………………………………………………………………………………………….. 105

Упаковщики……………………………………………………………………………………………………………………………… 109

Деобфускаторы………………………………………………………………………………………………………………………… 109

Небольшой пример………………………………………………………………………………………………………………….. 112

Глава 9. Взлом с помощью отладчика………………………………………………….. 117

Отладчик и реверсинг……………………………………………………………………………………………………………… 117

Флаг отладки……………………………………………………………………………………………………………………………. 118

Декомпиляция и дизассемблирование…………………………………………………………………………………… 118

Android Studio…………………………………………………………………………………………………………………………… 118

Используем дизассемблированный код…………………………………………………………………………………. 121

Глава 10. Frida……………………………………………………………………………………… 123

Dynamic Instrumentation Toolkit…………………………………………………………………………………………….. 123

Первые шаги…………………………………………………………………………………………………………………………….. 124

Пишем код………………………………………………………………………………………………………………………………… 126

Внедряемся……………………………………………………………………………………………………………………………….. 127

Ломаем CrackMe……………………………………………………………………………………………………………………… 129

Перехват нативных библиотек……………………………………………………………………………………………….. 131

Другие примеры применения Frida…………………………………………………………………………………………. 132

Обход защиты на снятие скриншотов………………………………………………………………………… 133

Извлечение SSL-сертификата приложения из KeyStore…………………………………………….. 134

Обход детекта root……………………………………………………………………………………………………….. 135

Обход упаковщиков……………………………………………………………………………………………………… 136

Выводы……………………………………………………………………………………………………………………………………… 137

Глава 11. Drozer и другие инструменты……………………………………………….. 139

Активности……………………………………………………………………………………………………………………………….. 140

Перехват интентов…………………………………………………………………………………………………………………… 142

Перехват возвращаемого значения………………………………………………………………………………………… 143

Content Provider………………………………………………………………………………………………………………………… 144

Сервисы…………………………………………………………………………………………………………………………………….. 145

Другие возможности………………………………………………………………………………………………………………… 146

Другие уязвимости…………………………………………………………………………………………………………………… 146

Выводы………………………………………………………………………………………………………………………….. 149

Другие инструменты……………………………………………………………………………………………………………….. 149

Статический анализ……………………………………………………………………………………………………… 149

Jadx…………………………………………………………………………………………………………………….. 149

JEB………………………………………………………………………………………………………………………. 150

Apktool……………………………………………………………………………………………………………….. 150

APKiD………………………………………………………………………………………………………………….. 150

Simplify……………………………………………………………………………………………………………….. 151

DeGuard………………………………………………………………………………………………………………. 151

Bytecode Viewer…………………………………………………………………………………………………. 152

QARK………………………………………………………………………………………………………………….. 153

Динамический анализ………………………………………………………………………………………………….. 153

Objection…………………………………………………………………………………………………………….. 154

Inspeckage………………………………………………………………………………………………………….. 154

Что еще может пригодиться?………………………………………………………………………………………………….. 155

Часть III…………………………………………………………………………………………….. 157

Глава 12. История вирусописательства для Android…………………………….. 159

До нашей эры, или Как написать вирус за 15 минут……………………………………………………………. 159

Geinimi и все-все-все………………………………………………………………………………………………………………… 160

DroidDream и начало борьбы за чистоту маркета……………………………………………………………….. 161

Zeus-in-the-Mobile…………………………………………………………………………………………………………………….. 162

Первый IRC-бот……………………………………………………………………………………………………………………….. 164

Первый полиморфный троян…………………………………………………………………………………………………… 164

Вирус-матрешка………………………………………………………………………………………………………………………. 165

Действительно продвинутый троян……………………………………………………………………………………….. 167

Ransomware……………………………………………………………………………………………………………………………… 168

Adware………………………………………………………………………………………………………………………………………. 170

Click fraud…………………………………………………………………………………………………………………………………. 170

А как же другие ОС?………………………………………………………………………………………………………………… 171

Глава 13. Современные образцы вредоносных программ…………………….. 173

Toast Amigo………………………………………………………………………………………………………………………………. 173

Android/Banker.GT!tr.spy…………………………………………………………………………………………………………. 173

Chrysaor…………………………………………………………………………………………………………………………………….. 174

Rootnik………………………………………………………………………………………………………………………………………. 175

Mandrake………………………………………………………………………………………………………………………………….. 176

Joker…………………………………………………………………………………………………………………………………………… 177

MalLocker…………………………………………………………………………………………………………………………………. 178

Вредоносные библиотеки……………………………………………………………………………………………………….. 180

Уязвимости, используемые троянами…………………………………………………………………………………….. 181

StrandHogg — уязвимость с подменой приложений………………………………………………….. 181

Cloak & Dagger………………………………………………………………………………………………………………. 182

Перекрытие диалогов запросов разрешений……………………………………………………………… 184

Глава 14. Пишем вредоносную программу для Android………………………… 185

Каркас………………………………………………………………………………………………………………………………………. 185

Информация о местоположении…………………………………………………………………………………………….. 187

Список установленных приложений……………………………………………………………………………………… 189

Дамп SMS…………………………………………………………………………………………………………………………………. 190

Запись аудио……………………………………………………………………………………………………………………………. 191

Съемка………………………………………………………………………………………………………………………………………. 192

Складываем все вместе……………………………………………………………………………………………………………. 198

Задания по расписанию………………………………………………………………………………………………. 198

Снимок при включении экрана……………………………………………………………………………………. 199

Запуск при загрузке……………………………………………………………………………………………………… 199

Запись аудио по команде…………………………………………………………………………………………….. 200

Отправка данных на сервер………………………………………………………………………………………… 201

Выводы……………………………………………………………………………………………………………………………………… 201

Глава 15. Используем возможности Android в личных целях……………….. 203

IPC…………………………………………………………………………………………………………………………………………….. 203

Интенты…………………………………………………………………………………………………………………………. 204

Широковещательные сообщения………………………………………………………………………………… 205

Логирование звонков……………………………………………………………………………………………………. 207

Скрытые API…………………………………………………………………………………………………………………………….. 208

Оригинальный фреймворк……………………………………………………………………………………………. 210

Рефлексия………………………………………………………………………………………………………………………. 211

Какие еще скрытые API существуют?………………………………………………………………………… 211

Запрет рефлексии в Android 9……………………………………………………………………………………… 211

Системный API…………………………………………………………………………………………………………………………. 212

Немного теории…………………………………………………………………………………………………………….. 212

Уровень доступа privileged…………………………………………………………………………………………… 213

Уровень доступа signature……………………………………………………………………………………………. 215

Уровень доступа development…………………………………………………………………………………….. 215

Права администратора и сервис Accessibility……………………………………………………………………….. 216

Нажимаем кнопки смартфона……………………………………………………………………………………… 217

Извлекаем текст из полей ввода………………………………………………………………………………….. 219

Блокируем устройство и защищаемся от удаления………………………………………………….. 221

Перехватываем и смахиваем уведомления………………………………………………………………… 224

Права root…………………………………………………………………………………………………………………………………. 226

Запускаем команды……………………………………………………………………………………………………… 226

Получаем права суперпользователя………………………………………………………………………….. 228

Несколько примеров…………………………………………………………………………………………………….. 230

Сторонние библиотеки………………………………………………………………………………………………… 233

Расширение функциональности……………………………………………………………………………………………… 233

Плагины…………………………………………………………………………………………………………………………. 233

API………………………………………………………………………………………………………………………. 234

Простейший плагин…………………………………………………………………………………………… 234

Поиск плагинов………………………………………………………………………………………………….. 235

Запуск функций плагина…………………………………………………………………………………… 236

Динамическая загрузка кода……………………………………………………………………………………….. 238

Простейший пример………………………………………………………………………………………….. 238

Долой рефлексию………………………………………………………………………………………………. 240

Когда модулей много………………………………………………………………………………………… 241

Берем модули с собой……………………………………………………………………………………….. 242

Глава 16. Скрываем и запутываем код………………………………………………… 245

Обфускация………………………………………………………………………………………………………………………………. 245

Собственный словарь…………………………………………………………………………………………………… 246

Скрытие строк………………………………………………………………………………………………………………………….. 247

Сохраняем строки в strings.xml……………………………………………………………………………………. 247

Разбиваем строки на части………………………………………………………………………………………….. 248

Кодируем помощью XOR…………………………………………………………………………………………….. 248

Шифруем строки…………………………………………………………………………………………………………… 250

Советы по использованию шифрования…………………………………………………………………….. 252

Храним данные в нативном коде……………………………………………………………………………………………. 253

«Крашим» измененное приложение……………………………………………………………………………………….. 254

Сверяем цифровую подпись………………………………………………………………………………………… 255

Проверяем источник установки…………………………………………………………………………………… 257

Защита от реверса и отладки…………………………………………………………………………………………………. 257

Root………………………………………………………………………………………………………………………………… 257

Эмулятор……………………………………………………………………………………………………………………….. 259

Отладчик……………………………………………………………………………………………………………………….. 261

Xposed……………………………………………………………………………………………………………………………. 263

Frida……………………………………………………………………………………………………………………………….. 264

Клонирование……………………………………………………………………………………………………………….. 267

Предметный указатель…………………………………………………………………………. 268

Зобнин Евгений Евгеньевич

Зобнин Евгений Евгеньевич, редактор журнала «Хакер», программист, в прошлом системный администратор. Автор статей на тему внутреннего устройства настольных и мобильных ОС, безопасности и взлома. Имеет 20-летний опыт в области UNIX-подобных операционных систем, последние 10 лет пишет статьи об устройстве Android. Автор популярного приложения AIO Launcher.

Опубликовано

Изучаем программирование на Kotlin для Android

Программирование на Kotlin для Android

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

Для программистов

Разработка мобильных приложений для Android может показаться сложной задачей, особенно если для этого требуется изучить новый язык программирования. Речь идет о Kotlin, ставшем официальным языком разработки для этой операционной системы. Книга поможет быстро освоить этот язык, обладающий целым рядом технологических преимуществ, а также перейти с Java на Kotlin.

Авторы приводят реализацию наиболее распространенных задач в нативной разработке для Android и показывают, как Kotlin помогает решить проблему параллелизма. Делая акцент на структурированном параллелизме, новой парадигме асинхронного программирования, книга помогает освоить одну из самых мощных конструкций Kotlin — сопрограммы.

  • Познакомьтесь с основами Kotlin и его фреймворком коллекций
  • Изучите операционную систему Android, контейнер приложения и его компоненты
  • Познакомьтесь с потокобезопасностью и узнайте, как работать с параллелизмом
  • Пишите последовательный асинхронный код с низкими затратами
  • Изучите структурированный параллелизм с помощью сопрограмм и узнайте, как сопрограммы взаимодействуют между собой с помощью каналов
  • Узнайте, как использовать потоки для асинхронной обработки данных
  • Изучите вопросы производительности с помощью инструментов профилирования
  • Оптимизируйте производительность, чтобы сократить потребление ресурсов

Книгу “Программирование на Kotlin для Android” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторах. 11

Предисловие. 13

Кому адресована эта книга. 14

Почему мы написали эту книгу. 15

Как организована эта книга. 15

Условные обозначения и соглашения. 16

Примеры кода. 17

Благодарности. 17

ГЛАВА 1. Основы языка Kotlin. 19

Система типов Kotlin. 20

Примитивные типы. 20

Null-безопасность. 21

Тип Unit 23

Функциональные типы. 24

Обобщенные типы. 25

Переменные и функции. 25

Переменные. 26

Лямбда-выражения. 26

Функции-расширения. 27

Классы. 29

Инициализация класса. 29

Свойства. 31

Модификатор lateinit 32

Свойства с отложенной инициализацией. 34

Делегаты. 35

Объекты-компаньоны. 36

Классы данных. 37

Классы перечислений. 38

Запечатанные классы. 40

Модификаторы видимости. 41

Резюме. 42

ГЛАВА 2. Фреймворк коллекций Kotlin. 45

Основные понятия. 45

Совместимость с Java. 46

Изменяемость. 46

Перегруженные операторы. 48

Создание контейнеров. 49

Функциональное программирование. 50

Сравнение функционального и процедурного программирования:
простой пример. 50

Функциональное программирование в Android. 51

Функции-преобразователи. 52

Булевы функции. 52

Фильтры. 53

Функция map. 53

Функция flatMap. 55

Группировка. 56

Сравнение итераторов и последовательностей. 57

Пример. 59

Проблема. 59

Реализация. 60

Резюме. 66

ГЛАВА 3. Основы Android. 67

Стек Android. 67

Аппаратное обеспечение. 67

Ядро. 68

Системные службы. 68

Среда выполнения Android. 69

Приложения. 69

Прикладное окружение Android. 69

Намерения и фильтры намерений. 70

Контекст. 73

Компоненты приложения Android: строительные блоки. 75

Компонент Activity и его друзья. 76

Службы. 80

Провайдеры контента. 85

BroadcastReceiver 86

Архитектуры приложений Android. 88

MVC: основы. 88

Виджеты. 89

Локальная модель. 89

Паттерны Android. 90

Model-View-Intent 90

Model-View-Presenter 90

Model-View-ViewModel 91

Резюме. 92

ГЛАВА 4. Параллельное программирование в Android. 94

Потокобезопасность. 95

Атомарность. 95

Видимость. 96

Модель многопоточного выполнения Android. 97

Пропуск кадров. 98

Утечка памяти. 101

Инструменты для управления потоками. 103

Looper/Handler 104

Исполнители Executors и объекты ExecutorService. 106

Инструменты для управления заданиями. 107

JobScheduler 109

WorkManager 111

Резюме. 112

ГЛАВА 5. Потокобезопасность. 113

Пример проблемы, связанной с потокобезопасностью.. 113

Инварианты. 115

Мьютексы. 116

Потокобезопасные коллекции. 116

Привязка к потоку. 119

Конфликт потоков. 120

Сравнение блокирующего и неблокирующего вызовов. 121

Очереди работ. 122

Противодавление. 123

Резюме. 125

ГЛАВА 6. Организация параллелизма с использованием обратных вызовов. 127

Пример: функция обработки покупок. 128

Создание приложения. 130

Компонент ViewModel 130

Представление. 131

Реализация логики. 135

Обсуждение. 136

Ограничения модели многопоточного выполнения. 138

Резюме. 139

ГЛАВА 7. Сопрограммы.. 141

Что такое сопрограмма?. 141

Наша первая сопрограмма. 142

Функция async. 144

Краткий обзор структурированного параллелизма. 146

Связь “родитель — потомок” в структурированном параллелизме. 148

CoroutineScope и CoroutineContext 150

Функции, поддерживающие возможность приостановки. 155

Функции, поддерживающие возможность приостановки, “под капотом”. 156

Использование сопрограмм и функций, поддерживающих возможность
приостановки: практический пример. 160

Не ошибитесь с модификатором suspend. 163

Резюме. 164

ГЛАВА 8. Структурированный параллелизм и сопрограммы.. 166

Функции, поддерживающие возможность приостановки. 166

Настройка места действия. 167

Традиционный подход с использованием java.util.concurrent.ExecutorService. 168

Вспомним, что такое HandlerThread. 172

Использование приостанавливаемых функций и сопрограмм. 175

Сравнение приостанавливаемых и традиционной многопоточности: итоги. 179

Отмена. 179

Жизненный цикл сопрограмм. 180

Отмена сопрограммы. 182

Отмена задачи, делегированной сторонней библиотеке. 184

Сопрограммы, которые действуют согласованно, чтобы их можно было отменить. 188

Функцию delay() можно отменить. 190

Обработка отмены. 191

Причины отмены. 192

Супервизия. 195

Функция supervisorScope. 197

Параллельная декомпозиция. 197

Автоматическая отмена. 199

Обработка исключений. 199

Необработанные и открытые исключения. 199

Открытые исключения. 201

Необработанные исключения. 204

Резюме. 207

Размышления напоследок. 208

ГЛАВА 9. Каналы.. 209

Обзор каналов. 209

Рандеву-канал. 211

Неограниченный канал. 215

Объединенный канал. 216

Буферизованный канал. 217

Функция produce. 218

Взаимодействующие последовательные процессы. 219

Модель и архитектура. 219

Первая реализация. 220

Выражение select 225

Собираем все воедино. 227

Мультиплексор и демультиплексор. 228

Проверка производительности. 229

Противодавление. 231

Сходства с моделью акторов. 232

Последовательное выполнение внутри процесса. 232

Размышления напоследок. 233

Взаимоблокировки в CSP. 233

Каналы и взаимоблокировки. 236

Ограничения каналов. 236

“Горячие” каналы. 238

Резюме. 239

ГЛАВА 10. Потоки. 241

Введение в потоки. 241

Более реалистичный пример. 242

Операторы. 244

Терминальные операторы. 245

Примеры использования холодного потока. 246

Вариант 1: интерфейс с API на базе функции обратного вызова. 246

Вариант 2: параллельное преобразование потока значений. 251

Вариант 3: создание собственного оператора. 253

Обработка ошибок. 257

Блок try/catch. 257

Разделение ответственности важно. 260

Нарушение прозрачности исключения. 260

Оператор catch. 261

Материализация исключений. 264

Горячие потоки и SharedFlow. 267

Создаем SharedFlow. 268

Регистрируем подписчика. 268

Отправляем значения в SharedFlow. 269

Использование SharedFlow для потоковой передачи данных. 269

Использование SharedFlow в качестве шины событий. 275

StateFlow: специализированная версия SharedFlow. 276

Пример использования StateFlow. 277

Резюме. 279

ГЛАВА 11. Вопросы производительности и инструменты
профилирования Android. 280

Android Profiler 282

Network Profiler 285

CPU Profiler 291

Energy Profiler 301

Memory Profiler 303

Обнаружение утечек памяти с помощью LeakCanary. 308

Резюме. 312

ГЛАВА 12. Снижение потребления ресурсов за счет оптимизации производительности  314

Достижение плоской иерархии представлений с помощью ConstraintLayout 315

Сокращение количества операций рисования с помощью экземпляров
класса Drawable. 319

Минимизация данных в сетевых вызовах. 324

Организация пула и кэширование объектов Bitmap. 324

Избавляемся от ненужной работы. 326

Использование статических функций. 329

Минификация и обфускация с R8 и ProGuard. 329

Резюме. 331

Предметный указатель. 333

Нет фото

Майк Данн (Mike Dunn) работал ведущим инженером по мобильным технологиям в издательстве O’Reilly Media.Один из авторов книги «Нативная разработка мобильных приложений. Перекрестный справочник для iOS и Android».

 

 

Лоранс Пьер-Оливье

Пьер-Оливье Лоранс (Pierre-Olivier Laurence) — ведущий инженер-программист компании Safran Aircraft Engines, со штаб-квартирой в окрестностях Парижа.

 

 

G.Blake_Meike

Дж. Блейк Мик (G. Blake Meike) — старший инженер-программист компании Couchbase и автор нескольких книг, среди которых «Программирование под Android».

 

 

Amanda Hinchman-Dominguez

Аманда Хинчман-Домингес (Amanda Hinchman-Dominguez) — эксперт по языку Kotlin в программе Google Developer Expert. Работает разработчиком для Android в компании Groupon и является активным участником глобального сообщества Kotlin.