SIP на iOS с Linphone SDK: Быстрая и надёжная VoIP-интеграция в мобильное приложение
Занимаюсь разработкой под iOS с 2012 года. С SIP ранее не работал, и его интеграция оказалась куда сложнее, чем ожидалось. Ниже делюсь основными трудностями и решениями.
Надеюсь получить конструктивную критику, а также советы по альтернативным подходам к решению описанных проблем.
Итак, задача: в кратчайшие сроки реализовать функциональность приёма звонков и набора номера для вызова на домофон.
Статья: https://habr.com/ru/articles/917206/
Платформа: iOS
Занимаюсь разработкой под iOS с 2012 года. С SIP ранее не работал, и его интеграция оказалась куда сложнее, чем ожидалось. Ниже делюсь основными трудностями и решениями.
Надеюсь получить конструктивную критику, а также советы по альтернативным подходам к решению описанных проблем.
Итак, задача: в кратчайшие сроки реализовать функциональность приёма звонков и набора номера для вызова на домофон.
Статья: https://habr.com/ru/articles/917206/
Платформа: iOS
👍1
Запуск бинарных файлов из data/data на Android 10+ (Обход SELinux)
С Android 10 (Target sdk 29) google ввели новую политику безопасности. Новая политика SELinux звучит просто: «Нельзя исполнять файлы из той директории, в которую можно записывать». Всё это очень хорошо, но многие проекты сломались (В том числе и мой). Termux из google play УМЕЕТ запускать бинарные файлы на target sdk 29+. Я решил поделится, как выполнить бинарный файл из data/data/com.ваш.пакет/files на новых версиях sdk БЕЗ полного клонирования Termux и БЕЗ С/C++ части. Сам метод запуска будет именно на java.
Статья: https://habr.com/ru/articles/943188/
Платформа: Android
С Android 10 (Target sdk 29) google ввели новую политику безопасности. Новая политика SELinux звучит просто: «Нельзя исполнять файлы из той директории, в которую можно записывать». Всё это очень хорошо, но многие проекты сломались (В том числе и мой). Termux из google play УМЕЕТ запускать бинарные файлы на target sdk 29+. Я решил поделится, как выполнить бинарный файл из data/data/com.ваш.пакет/files на новых версиях sdk БЕЗ полного клонирования Termux и БЕЗ С/C++ части. Сам метод запуска будет именно на java.
Статья: https://habr.com/ru/articles/943188/
Платформа: Android
😱1
Array или Set для 10 тыс. элементов в Swift?
Я был на собеседовании по iOS. Всё шло хорошо — я ответил на вопрос об optional, рассказал об ARC и даже решил небольшую задачу с замыканиями.
Затем интервьюер откинулся назад и спросил: "Предположим, вам нужно загрузить 10,000 элементов в Swift. Что бы вы использовали: Array или Set?"
Статья: https://apptractor.ru/info/articles/array-ili-set-dlya-10-tys-elementov-v-swift-voprosy-s-sobesedovaniya.html
Платформа: iOS
Я был на собеседовании по iOS. Всё шло хорошо — я ответил на вопрос об optional, рассказал об ARC и даже решил небольшую задачу с замыканиями.
Затем интервьюер откинулся назад и спросил: "Предположим, вам нужно загрузить 10,000 элементов в Swift. Что бы вы использовали: Array или Set?"
Статья: https://apptractor.ru/info/articles/array-ili-set-dlya-10-tys-elementov-v-swift-voprosy-s-sobesedovaniya.html
Платформа: iOS
👍3🔥1
Взлом Android-собеседования: вопросы, которые действительно важны
• Объясните билдеры Kotlin Flow и как вы бы использовали их в реальном проекте
• Как вы справляетесь с утечками памяти в Android-приложениях
• Объясните разницу между launch и async в корутинах
• Как вы реализуете обработку ошибок в Android-приложениях
• Объясните архитектуру Android-приложения и почему предпочитается MVVM
Статья: https://medium.com/codetodeploy/cracking-android-interviews-the-questions-that-actually-matter-with-real-answers-9a29a66cd878
Платформа: Android
• Объясните билдеры Kotlin Flow и как вы бы использовали их в реальном проекте
• Как вы справляетесь с утечками памяти в Android-приложениях
• Объясните разницу между launch и async в корутинах
• Как вы реализуете обработку ошибок в Android-приложениях
• Объясните архитектуру Android-приложения и почему предпочитается MVVM
Статья: https://medium.com/codetodeploy/cracking-android-interviews-the-questions-that-actually-matter-with-real-answers-9a29a66cd878
Платформа: Android
🤪2
Neumorphic Compose UI Kit - неоморфизм для Jetpack Compose
Neumorphic Compose UI Kit - современный, кастомизируемый неоморфный набор элементов для Jetpack Compose. Он создаёт элегантный, плавный и тактильный дизайн. Этот кит доступен бесплатно по лицензии MIT, что делает его идеальным выбором для разработчиков, стремящихся интегрировать элементы неоморфного UI в свои приложения для Android.
Neumorphic Compose UI Kit на GitHub: https://github.com/BoltUIX/NeumorphicCompose
Платформа: Android
⭐️: 7
Neumorphic Compose UI Kit - современный, кастомизируемый неоморфный набор элементов для Jetpack Compose. Он создаёт элегантный, плавный и тактильный дизайн. Этот кит доступен бесплатно по лицензии MIT, что делает его идеальным выбором для разработчиков, стремящихся интегрировать элементы неоморфного UI в свои приложения для Android.
Neumorphic Compose UI Kit на GitHub: https://github.com/BoltUIX/NeumorphicCompose
Платформа: Android
⭐️: 7
🤪5👍2
«Стеклянный мир» iOS 26. Адаптируем приложение под новые гайдлайны
Уже скоро релиз iOS 26 и обновления SDK приложений. Apple снова вносит корректировки, а разработчики и дизайнеры снова подстраиваются. У текущих приложений будет переходный период, но вопрос с обновлением интерфейсов рано или поздно настанет и придется адаптировать под новый SDK и стиль Liquid Glass, чтобы продукт выглядел современно.
При разработке нативных приложений CleverPumpkin активно использует системные компоненты, поэтому мы уже начали адаптировать дизайн приложений наших заказчиков под обновленные гайдлайны.
Наш дизайнер интерфейсов Фёдор Миронов поделится наблюдениями о новых гайдлайнах и расскажет, какие изменения принесёт Liquid Glass. А ещё покажет несколько примеров обновления интерфейсов тестового приложения и нашего финтех-проекта Moneon. Тем более, теперь есть HIG (Human Interface Guidelines) для Figma и можно детально изучить нововведения.
Статья: https://habr.com/ru/companies/cleverpumpkin/articles/943434/
Платформа: iOS
Уже скоро релиз iOS 26 и обновления SDK приложений. Apple снова вносит корректировки, а разработчики и дизайнеры снова подстраиваются. У текущих приложений будет переходный период, но вопрос с обновлением интерфейсов рано или поздно настанет и придется адаптировать под новый SDK и стиль Liquid Glass, чтобы продукт выглядел современно.
При разработке нативных приложений CleverPumpkin активно использует системные компоненты, поэтому мы уже начали адаптировать дизайн приложений наших заказчиков под обновленные гайдлайны.
Наш дизайнер интерфейсов Фёдор Миронов поделится наблюдениями о новых гайдлайнах и расскажет, какие изменения принесёт Liquid Glass. А ещё покажет несколько примеров обновления интерфейсов тестового приложения и нашего финтех-проекта Moneon. Тем более, теперь есть HIG (Human Interface Guidelines) для Figma и можно детально изучить нововведения.
Статья: https://habr.com/ru/companies/cleverpumpkin/articles/943434/
Платформа: iOS
🤪3🔥1
Androidify: создание AI first Android-приложений с Gemini, Jetpack Compose и Firebase
Androidify — это новое “референсное” приложение Google, которое позволяет вам создать собственного Android-бота, используя селфи и искусственный интеллект. С сегодняшнего дня приложение доступно в веб-версии или в виде приложения в Google Play. В новом Androidify вы можете загрузить селфи или написать подсказку о том, что вам нужно, добавить аксессуары и наблюдать, как искусственный интеллект создаёт вашего уникального бота. В этой статье Google рассказывает про API искусственного интеллекта и инструментах Android, которые разработчики использовали при создании приложения.
Статья: https://android-developers.googleblog.com/2025/09/androidify-ai-gemini-android-jetpack-compose-firebase-camerax.html
Платформа: Android
Androidify — это новое “референсное” приложение Google, которое позволяет вам создать собственного Android-бота, используя селфи и искусственный интеллект. С сегодняшнего дня приложение доступно в веб-версии или в виде приложения в Google Play. В новом Androidify вы можете загрузить селфи или написать подсказку о том, что вам нужно, добавить аксессуары и наблюдать, как искусственный интеллект создаёт вашего уникального бота. В этой статье Google рассказывает про API искусственного интеллекта и инструментах Android, которые разработчики использовали при создании приложения.
Статья: https://android-developers.googleblog.com/2025/09/androidify-ai-gemini-android-jetpack-compose-firebase-camerax.html
Платформа: Android
👍1
Flow-контейнеры в Compose
В этой статье мы подробно рассмотрим возможности flow-контейнеров, узнаем, как управлять расположением элементов, выравнивать их по отдельности и использовать «веса» (weights) для создания адаптивных сеточных структур.
Статья: https://apptractor.ru/info/articles/flow-konteynery-v-compose.html
Платформа: Android
FlowRow и FlowColumn — это composables, похожие на Row и Column, но с одним ключевым отличием: элементы автоматически переносятся на следующую строку, когда в контейнере заканчивается место. Такое поведение создает несколько строк или столбцов, позволяя создавать более адаптивные интерфейсы, в которых контент не обрезается, если элементы слишком велики для одного измерения. Они особенно полезны для создания таких элементов интерфейса, как набор «чипов» или фильтров, где элементы должны переноситься на следующую строку по мере уменьшения пространства на экране.В этой статье мы подробно рассмотрим возможности flow-контейнеров, узнаем, как управлять расположением элементов, выравнивать их по отдельности и использовать «веса» (weights) для создания адаптивных сеточных структур.
Статья: https://apptractor.ru/info/articles/flow-konteynery-v-compose.html
Платформа: Android
❤1
AwaitlessKit - синхронные обёртки для async функций
AwaitlessKit предоставляет макросы Swift для автоматической генерации синхронных обёрток для async функций, упрощая вызов новых асинхронных API из существующего неасинхронного кода. Это помогает постепенно внедрять async/await, не нарушая работу старых API и не переписывая всё сразу.
AwaitlessKit на GitHub: https://github.com/bonkey/AwaitlessKit
Платформа: iOS
⭐️: 3
AwaitlessKit предоставляет макросы Swift для автоматической генерации синхронных обёрток для async функций, упрощая вызов новых асинхронных API из существующего неасинхронного кода. Это помогает постепенно внедрять async/await, не нарушая работу старых API и не переписывая всё сразу.
AwaitlessKit на GitHub: https://github.com/bonkey/AwaitlessKit
Платформа: iOS
⭐️: 3
👍1
•
(iOS En) iOS 26 Lock Screen Carousel With Reflection Effect Using SwiftUI•
(iOS En) How to hide the content of a view in a screenshot (iOS tutorial)•
(iOS En) Swift concurrency for curious Kotliners•
(iOS En) SwiftUI: How To Seamlessly Morph Liquid Glass Shapes•
(iOS En) Auto Resizing Dynamic Sheets Using SwiftUI•
(iOS En) Mastering Liquid Glass in SwiftUI – Buttons, Containers & Transitions•
(And Ru) Облегчаем жизнь больших экранов на Compose•
(And Ru) Разбор MAX программистом•
(And Ru) ProGuard — Стандарт Мобильной Безопастности?•
(And Ru) Ты готов к собеседованию в Альфа-Банк? Интервью мобильного разработчика•
(And En) TheAndroidShow: The latest for devs from Made by Google, Gemini in Android Studio, a new Androidify•
(And En) What's new in Android Studio Narwhal 3 Feature Drop•
(And En) Androidify app deep dive•
(And En) Bring your most expressive apps to the wrist: Wear OS 6 and the new Pixel Watch 4•
(And En) Connect Model Context Protocol (MCP) servers to Android Studio to improve AI agent capabilities•
(And En) Now in Android: 121 – Android Studio Narwhal, Android 16 QPR2 beta, and more•
(And En) Build your Kotlin and Android apps with Buck2•
(And En) Exposed inline value classes for Java in Kotlin 2.2•
(And En) Kotlin Worst Practices — How to Maximize Your Hassle•
(And En) Putting Kotlin Flows Together•
(And En) Develocity Analytics: Get end-to-end visibility into your build process•
(Crs En) Blueprints for Scale: What AWS Learned Building a Massive Multiplatform Project•
(Crs En) Lessons learned decoupling Architecture Components from platform specific code•
(Dev Ru) Лучший билд команды и проекта в IT•
(Dev Ru) DevRel в мобильной разработке: между платформами, комьюнити и командой•
(Dev Ru) Числа в программировании — Почему компьютер не понимает 0.1 + 0.2•
(Dev En) How You Use an AI Coding Agent the RIGHT Way For Mobile Development•
(Dev En) Introducing EmbeddingGemma: The Best-in-Class Open Model for On-Device EmbeddingsПрошлогодние видео:
•
(And Ru) Организация кода в проекте — в какой пакет положить Kotlin класс•
(Dev Ru) Архитектурное собеседование — по обе стороны баррикад (+ все собеседования)•
(Dev Ru) Backend-Driven UI и конструкторы. Благо или зло?•
(Dev Ru) Открытое собеседование — технический руководитель: разбор кейсаPlease open Telegram to view this post
VIEW IN TELEGRAM
👍1
Жизненный цикл UIViewController в 2025 году: что изменилось и что устарело
В 2022 году я написал статью «Жизненный цикл UIViewController», где подробно разобрал порядок вызова методов и основные сценарии работы с ними.
С тех пор прошло больше трёх лет, и в iOS появилось несколько изменений, которые делают старую статью уже не до конца актуальной.
• Некоторые методы вышли из практики (например, viewDidUnload или didReceiveMemoryWarning). Первый был удалён из API, второй формально остаётся частью UIViewController, но в современных версиях iOS практически не используется.
• Добавились новые хуки (viewIsAppearing, viewSafeAreaInsetsDidChange, viewLayoutMarginsDidChange).
• Появился полноценный Scene lifecycle для работы с многозадачностью и мультиоконностью.
• Лучшие практики работы с Auto Layout тоже немного изменились.
В этой статье я собрал актуальное руководство по жизненному циклу UIViewController на 2025 год.
Статья: https://habr.com/ru/articles/943778/
Платформа: iOS
В 2022 году я написал статью «Жизненный цикл UIViewController», где подробно разобрал порядок вызова методов и основные сценарии работы с ними.
С тех пор прошло больше трёх лет, и в iOS появилось несколько изменений, которые делают старую статью уже не до конца актуальной.
• Некоторые методы вышли из практики (например, viewDidUnload или didReceiveMemoryWarning). Первый был удалён из API, второй формально остаётся частью UIViewController, но в современных версиях iOS практически не используется.
• Добавились новые хуки (viewIsAppearing, viewSafeAreaInsetsDidChange, viewLayoutMarginsDidChange).
• Появился полноценный Scene lifecycle для работы с многозадачностью и мультиоконностью.
• Лучшие практики работы с Auto Layout тоже немного изменились.
В этой статье я собрал актуальное руководство по жизненному циклу UIViewController на 2025 год.
Статья: https://habr.com/ru/articles/943778/
Платформа: iOS
👍2
Мой путь новичка в разработке: FreeSpace — мобильное приложение для любителей космоса
Меня зовут Маша, я выпускница «IT Школы Samsung». Хочу рассказать о своём проекте — мобильном приложении FreeSpace, которое объединяет новости о космосе, интерактивную карту и сообщество энтузиастов. Это не просто рассказ о коде, но и история моего пути в Android-разработке.
Статья: https://habr.com/ru/companies/samsung/articles/943884/
Платформа: Android
Меня зовут Маша, я выпускница «IT Школы Samsung». Хочу рассказать о своём проекте — мобильном приложении FreeSpace, которое объединяет новости о космосе, интерактивную карту и сообщество энтузиастов. Это не просто рассказ о коде, но и история моего пути в Android-разработке.
Статья: https://habr.com/ru/companies/samsung/articles/943884/
Платформа: Android
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Reveal - эффект подсветки (обучающие подсказки) для Compose Multiplatform
Reveal - библиотека для организации онбординга или пошагового руководства с прекрасным API для Compose Multiplatform, ориентированным на Android, iOS, ПК и веб. Все платформы, кроме Android, правда, не очень хорошо протестированы.
Reveal на GitHub: https://github.com/svenjacobs/reveal
Платформа: Android
⭐️: 554
Reveal - библиотека для организации онбординга или пошагового руководства с прекрасным API для Compose Multiplatform, ориентированным на Android, iOS, ПК и веб. Все платформы, кроме Android, правда, не очень хорошо протестированы.
Reveal на GitHub: https://github.com/svenjacobs/reveal
Платформа: Android
⭐️: 554
❤2
Как правильно отлаживать iOS-приложения
Пообщавшись с десятками iOS-разработчиков на конференциях и встречах, я обнаружил, что около 80% из нас до сих пор используют устаревшие методы отладки. Мы игнорируем мощные инструменты, которые уже давно существуют в Xcode и ждут, когда же они смогут преобразить наш процесс разработки.
Итак, позвольте мне сэкономить вам пять лет проб и ошибок, которые я провёл в процессе отладки. Вот всё, что я хотел бы услышать от кого-то с самого начала о правильной отладке приложений на Swift.
Статья: https://apptractor.ru/info/articles/kak-pravilno-otlazhivat-ios-prilozheniya.html
Платформа: iOS
Пообщавшись с десятками iOS-разработчиков на конференциях и встречах, я обнаружил, что около 80% из нас до сих пор используют устаревшие методы отладки. Мы игнорируем мощные инструменты, которые уже давно существуют в Xcode и ждут, когда же они смогут преобразить наш процесс разработки.
Итак, позвольте мне сэкономить вам пять лет проб и ошибок, которые я провёл в процессе отладки. Вот всё, что я хотел бы услышать от кого-то с самого начала о правильной отладке приложений на Swift.
Статья: https://apptractor.ru/info/articles/kak-pravilno-otlazhivat-ios-prilozheniya.html
Платформа: iOS
👍1
Voyager - фреймворк для навигации и маршрутизации в SwiftUI
Voyager - фреймворк для навигации и маршрутизации в SwiftUI. Voyager позволяет разработчикам снабдить свои приложения на базе SwiftUI маршрутизацией, которая применяется не только к навигации, но и к вкладкам. Кроме того, внедрив в маршрутизатор DeeplinkHandler, вы сможете обрабатывать любые глубокие ссылки, которые будут представлять какой-либо маршрут от этого маршрутизатора.
Voyager на GitHub: https://github.com/bryan-vh/Voyager
Платформа: iOS
⭐️: 19
Voyager - фреймворк для навигации и маршрутизации в SwiftUI. Voyager позволяет разработчикам снабдить свои приложения на базе SwiftUI маршрутизацией, которая применяется не только к навигации, но и к вкладкам. Кроме того, внедрив в маршрутизатор DeeplinkHandler, вы сможете обрабатывать любые глубокие ссылки, которые будут представлять какой-либо маршрут от этого маршрутизатора.
Voyager на GitHub: https://github.com/bryan-vh/Voyager
Платформа: iOS
⭐️: 19
👍2
10 SwiftUI-хаков для более чистых приложений
Вам не нужно мириться с повторениями. С помощью нескольких умных расширений и шаблонов вы можете сделать код SwiftUI чище, короче и при этом таким же мощным. Вот десять небольших трюков, которые незаметно избавят вас от ненужных элементов, придав коду вашего приложения элегантный вид.
Статья: https://apptractor.ru/info/articles/10-swiftui-hakov-dlya-bolee-chistyh-prilozheniy.html
Платформа: iOS
Вам не нужно мириться с повторениями. С помощью нескольких умных расширений и шаблонов вы можете сделать код SwiftUI чище, короче и при этом таким же мощным. Вот десять небольших трюков, которые незаметно избавят вас от ненужных элементов, придав коду вашего приложения элегантный вид.
Статья: https://apptractor.ru/info/articles/10-swiftui-hakov-dlya-bolee-chistyh-prilozheniy.html
Платформа: iOS
👍3
Освоение условных макетов в Jetpack Compose: гибкий подход
Создание динамических пользовательских интерфейсов часто подразумевает адаптацию к различным размерам экрана и содержимому. Узнайте, как грамотно отображать или скрывать компонуемые элементы в зависимости от доступного пространства, без жёстко заданных значений.
Статья: https://proandroiddev.com/mastering-conditional-layouts-in-jetpack-compose-the-flexible-way-8660d6e5dd0f
Платформа: Android
Создание динамических пользовательских интерфейсов часто подразумевает адаптацию к различным размерам экрана и содержимому. Узнайте, как грамотно отображать или скрывать компонуемые элементы в зависимости от доступного пространства, без жёстко заданных значений.
Статья: https://proandroiddev.com/mastering-conditional-layouts-in-jetpack-compose-the-flexible-way-8660d6e5dd0f
Платформа: Android
Medium
Mastering Conditional Layouts in Jetpack Compose: The Flexible Way
Building dynamic UIs often means adapting to varying screen sizes and content. Learn how to intelligently show or hide Composables based on…
❤1
SkyHigh 16KB Doctor - помощь в миграции на 16 Кб
Для Android-разработчиков, использующих нативные библиотеки, появилось новое требование Google Play: обеспечить поддержку 16-килобайтных страниц памяти для приложений, нацеленных на Android 15. Ручная проверка и обновление каждой .so библиотеки может стать сложной задачей. SkyHigh 16KB Doctor - плагин Gradle, который сканирует Android APK/AAB на наличие нативных библиотек .so, проверяет значения ELF p_align (целевое значение для 16 КБ страниц), сопоставляет библиотеки с владельцами (модуль или зависимость) и создает удобные для машины и человека отчеты.
SkyHigh 16KB Doctor на GitHub: https://github.com/sparrow007/skyhigh-16kb-doctor
Платформа: Android
⭐️: 18
Для Android-разработчиков, использующих нативные библиотеки, появилось новое требование Google Play: обеспечить поддержку 16-килобайтных страниц памяти для приложений, нацеленных на Android 15. Ручная проверка и обновление каждой .so библиотеки может стать сложной задачей. SkyHigh 16KB Doctor - плагин Gradle, который сканирует Android APK/AAB на наличие нативных библиотек .so, проверяет значения ELF p_align (целевое значение для 16 КБ страниц), сопоставляет библиотеки с владельцами (модуль или зависимость) и создает удобные для машины и человека отчеты.
SkyHigh 16KB Doctor на GitHub: https://github.com/sparrow007/skyhigh-16kb-doctor
Платформа: Android
⭐️: 18
❤4
Писать код легко. Читать его — нет.
Ментальная модель — это то, что вы создаёте, читая код. Это ваша внутренняя карта того, как работает система, где находятся сложные части, что от чего зависит. Без неё вы просто смотрите на строки текста.
Статья: https://apptractor.ru/info/articles/pisat-kod-legko-chitat-ego-net.html
Платформа: разработка
Ментальная модель — это то, что вы создаёте, читая код. Это ваша внутренняя карта того, как работает система, где находятся сложные части, что от чего зависит. Без неё вы просто смотрите на строки текста.
Статья: https://apptractor.ru/info/articles/pisat-kod-legko-chitat-ego-net.html
Платформа: разработка
❤1
Повышение производительности приложения за счет лучшего сокращения ресурсов
Новый подход улучшает сокращение ресурсов за счёт полной интеграции с существующим конвейером оптимизации кода. В новом подходе R8 одновременно оптимизирует как код, так и ссылки на ресурсы, гарантируя, что все ресурсы, на которые ссылается исключительно неиспользуемый код, идентифицируются как неиспользуемые и затем удаляются. Это полностью устраняет необходимость в безусловных правилах сохранения (unconditional keep rules), генерируемых AAPT2 (инструментом упаковки ресурсов для Android), и предоставляет гораздо более детальную и точную информацию для удаления неиспользуемого кода и ресурсов.
Статья: https://apptractor.ru/info/articles/povyshenie-proizvoditelnosti-prilozheniya-za-schet-luchshego-sokrascheniya-resursov.html
Платформа: Android
Новый подход улучшает сокращение ресурсов за счёт полной интеграции с существующим конвейером оптимизации кода. В новом подходе R8 одновременно оптимизирует как код, так и ссылки на ресурсы, гарантируя, что все ресурсы, на которые ссылается исключительно неиспользуемый код, идентифицируются как неиспользуемые и затем удаляются. Это полностью устраняет необходимость в безусловных правилах сохранения (unconditional keep rules), генерируемых AAPT2 (инструментом упаковки ресурсов для Android), и предоставляет гораздо более детальную и точную информацию для удаления неиспользуемого кода и ресурсов.
Статья: https://apptractor.ru/info/articles/povyshenie-proizvoditelnosti-prilozheniya-za-schet-luchshego-sokrascheniya-resursov.html
Платформа: Android
❤1