Уже попробовали обновленный профайлер? А Google выкатывает статью о применении его в A/B тестах
Подразумевается, что с помощью power profiler можно найти:
👉 Энергозатраный неоптимизированный код
👉 Лишние фоновые процессы
Сценарии, описанные в статье, реализуемы и с помощью стандартного профайлера. Но почему бы и не воспользоваться точной количественной метрикой?
Подразумевается, что с помощью power profiler можно найти:
👉 Энергозатраный неоптимизированный код
👉 Лишние фоновые процессы
Сценарии, описанные в статье, реализуемы и с помощью стандартного профайлера. Но почему бы и не воспользоваться точной количественной метрикой?
Пятница! Если уж релизите в пятницу, то проведите дополнительные тесты, а именно Accessibility Check
Android Studio Iguana уже стабильна, а это значит вам точно доступен UI check mode, которая покажет как на разных экранах будет выглядеть ваше приложение
Подробнее с примерами и что делать, если проблемы обнаружены
Android Studio Iguana уже стабильна, а это значит вам точно доступен UI check mode, которая покажет как на разных экранах будет выглядеть ваше приложение
Подробнее с примерами и что делать, если проблемы обнаружены
Раньше, во времена XML, у нас была удобная превьюшка цветов. С приходом Jetpack Compose мы потеряли этот функционал.
Полезный плагин, который это возвращает на поля для вашего удоства! А что внутри?
👉 Превью для объектов типа
👉 Старый добрый color picker по клику на превью
👉 Превью для функций
Библиотека свежая, поэтому не стесняйтесь оставлять issues. Исходники можно глянуть тут
Полезный плагин, который это возвращает на поля для вашего удоства! А что внутри?
👉 Превью для объектов типа
Color
👉 Старый добрый color picker по клику на превью
👉 Превью для функций
compositeOver
, copy
, convert
и lerp
Библиотека свежая, поэтому не стесняйтесь оставлять issues. Исходники можно глянуть тут
Фокус как состояние: эффективный фокус-менеджмент на Android TV с Jetpack Compose.
👉 Это не стандартное решение типа Leanback или Compose for TV
👉 Основная проблема решения - фокус не является частью состояния, поэтому приходится использовать модификаторы помощи
👉 Текущий фокус определен для экрана в целом
👉 Благодаря этому подходу можно легко тестировать фокус и его ожидаемое изменение
👉 Восстановление фокуса работает из коробки, так как теперь он зависит от состояния, а также становится проще отлаживать приложение
Исходя из реализации, стандартный фокус-менеджмент блокируется целиком, и подменяется реализацией через состояние. Отсюда возникают проблемы и собственные решения в списках и в иных пограничных случаях.
👉 Это не стандартное решение типа Leanback или Compose for TV
👉 Основная проблема решения - фокус не является частью состояния, поэтому приходится использовать модификаторы помощи
focusRequester, onFocusChanged, focusable
и focusProperties
👉 Текущий фокус определен для экрана в целом
👉 Благодаря этому подходу можно легко тестировать фокус и его ожидаемое изменение
👉 Восстановление фокуса работает из коробки, так как теперь он зависит от состояния, а также становится проще отлаживать приложение
Исходя из реализации, стандартный фокус-менеджмент блокируется целиком, и подменяется реализацией через состояние. Отсюда возникают проблемы и собственные решения в списках и в иных пограничных случаях.
Продолжаем тему собеседований. Блок вопросов про многопоточность в приложении. Подойдет как для подготовки к собеседованиям, так и для использования в вопросах на собеседовании:
👉 Что такое корутины и как они связаны с потоками?
👉 Зачем вам использовать корутины?
👉 Как создать корутину и управлять ею?
👉 В чем разница между launch, async и runBlocking?
👉 Что представляет собой coroutineScope?
👉 Зачем нужны suspend функции и в чем их отличие от обычных?
👉 Как обрабатывать исключения в корутинах (кроме try-catch)?
👉 Что такое coroutineContext и coroutineDispatcher, и когда вы их используете?
👉 Как остановить выполнение корутины?
Ответы тут
Документация тут
👉 Что такое корутины и как они связаны с потоками?
👉 Зачем вам использовать корутины?
👉 Как создать корутину и управлять ею?
👉 В чем разница между launch, async и runBlocking?
👉 Что представляет собой coroutineScope?
👉 Зачем нужны suspend функции и в чем их отличие от обычных?
👉 Как обрабатывать исключения в корутинах (кроме try-catch)?
👉 Что такое coroutineContext и coroutineDispatcher, и когда вы их используете?
👉 Как остановить выполнение корутины?
Ответы тут
Документация тут
Medium
Important Coroutine Interview Questions for Experienced Android Developers
Coroutines have revolutionized asynchronous programming in Kotlin, offering a powerful and concise way to handle background tasks in…
За inline замолвите слово.. Мне, честно говоря, нечего более добавить. Если вам кажется что вы мало знаете про
inline
, читайте пост от @rareillyTelegram
Ra'Reilly - Заметки про Android и не только
Продолжаю рубрику #насмотренность. Сегодня смотрим на inline-классы. На мой взгляд это одна из самый недооценённых фичей Котлина. Подозреваю, что это потому что потребность в inline-классах неочевидна. Попробую это исправить.
Напомню. Inline-класс это обёртка…
Напомню. Inline-класс это обёртка…
Немного красивых замеров того как K2 ускоряет сборку. Тесты проводили над Anki-Android для чистой и инкрементальной сборки.
Как самому провести этот бенчмарк и узнать данные для вашего устройства - тут
Остальные замеры тут
Как самому провести этот бенчмарк и узнать данные для вашего устройства - тут
Остальные замеры тут
Реализация кэширования с OkHttp
Ускоряем работу приложения, жертвуя возможной актуальностью данных.
👉 Кэширование API-запросов с использованием
👉 Правила кэширования могут быть установлены в зависимости от статуса интернет-соединения. Например, когда соединение активное, можно использовать кэшированные ответы за последние 30 минут, а в режиме офлайн — ответы, возраст которых составляет до 1 дня, для улучшения пользовательского опыта
👉 Механизм перехватчиков из
В статье приводится пример клиента, который можно прямо сейчас взять и подставить в ваш проект, чтобы сразу увидеть результат. Используете ли вы кэширование запросов в проекте?
Ускоряем работу приложения, жертвуя возможной актуальностью данных.
👉 Кэширование API-запросов с использованием
CacheControl
из OkHttp помогает позволяет сохранять ответы API с заданным сроком годности, уменьшая количество API-запросов и снижая время отклика👉 Правила кэширования могут быть установлены в зависимости от статуса интернет-соединения. Например, когда соединение активное, можно использовать кэшированные ответы за последние 30 минут, а в режиме офлайн — ответы, возраст которых составляет до 1 дня, для улучшения пользовательского опыта
👉 Механизм перехватчиков из
OkHttp
позволяет модифицировать HTTP-запросы и ответы, что способствует реализации правил кэширования. Функции, такие как maxAge()
и maxStale()
, контролируют свежесть ответов, помогая эффективно управлять кэшемВ статье приводится пример клиента, который можно прямо сейчас взять и подставить в ваш проект, чтобы сразу увидеть результат. Используете ли вы кэширование запросов в проекте?
Medium
Increase performance of your app by caching API calls using OkHttp
Let’s be honest, we’ve all been there — frantically refreshing our app, watching the loading spinner spin endlessly as we wait for that…
Jetpack Compose compiler переезжает в kotlin репозиторий
Теперь не нужно беспокоиться о совместимости compose compiler И kotlin версий. С появлением kotlin 2.0.0 они будут совпадать:
[versions]
kotlin = "2.0.0"
[plugins]
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
// Add the Compose Compiler Gradle plugin, the version matches the Kotlin plugin
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
А еще Kotlin 2.0.0-RC2 вышел!
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers Blog
Jetpack Compose compiler moving to the Kotlin repository
With the upcoming release of Kotlin 2.0, the Jetpack Compose a matching Compose compiler will release alongside each release of Kotlin.
Уже пробовали обновиться до Kotlin 2?
Final Results
5%
Да, уже в проде
3%
Да, но возникли проблемы, решили откатиться
75%
Нет, ждем стабильную версию
16%
Нет, не планируем обновляться
Please open Telegram to view this post
VIEW IN TELEGRAM
Как написать свой плагин для Android Studio?
На удивление, все довольно просто:
1) Для проекта есть специальный шаблон в IDE
2) Настраиваем gradle-файл, устанавливая версию IDE, которая поддерживается
3) Определяем действие и прикрепляем ссылку на него в конфигурацию
5) Можно добавить интерфейс к плагину, разработанный с помощью Java Swing
6) Собираем плагин с помощью
"Зачем вам это?" На мой взгляд - для автоматизации рутинных действий внутри команды. Возможность запустить действие через кнопку с параметрами, а не командой в консоли, делает процесс более комфортным и простым
На удивление, все довольно просто:
1) Для проекта есть специальный шаблон в IDE
2) Настраиваем gradle-файл, устанавливая версию IDE, которая поддерживается
3) Определяем действие и прикрепляем ссылку на него в конфигурацию
class MyDemoAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
val message = "Great! You just created your first action!"
Messages.showMessageDialog(
e.project,
message,
"Android Good Reads!",
Messages.getInformationIcon()
)
}
}
5) Можно добавить интерфейс к плагину, разработанный с помощью Java Swing
6) Собираем плагин с помощью
./gradlew buildPlugin
и делимся с командой своим новым плагином. Установка плагина проста: перейдите в Settings -> Plugins -> Installed Tab -> Gear Icon -> Install Plugin From Disk"Зачем вам это?" На мой взгляд - для автоматизации рутинных действий внутри команды. Возможность запустить действие через кнопку с параметрами, а не командой в консоли, делает процесс более комфортным и простым
Новый нейминг для Android Studio! - Feature Drop
Вкратце:
Сначала будет представлено обновление на основе обновлений IntelliJ IDEA, а затем, в Feature Drop, обновление специфичное для Android.
AGP будет обновляться вместе c Feature Drop
В итоге:
Обновление AS и AGP в 2 раза чаще. Как вам?
Финальный шаблон версионирования:
Вкратце:
Сначала будет представлено обновление на основе обновлений IntelliJ IDEA, а затем, в Feature Drop, обновление специфичное для Android.
AGP будет обновляться вместе c Feature Drop
В итоге:
Обновление AS и AGP в 2 раза чаще. Как вам?
Финальный шаблон версионирования:
<Год версии IntelliJ>.<Основная версия IntelliJ>.<Основная версия Studio>
Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться?
Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе статей вы можете заметить больший уклон в эти технологии. Я стараюсь выбирать либо практически полезные статьи, либо интересные, а также иногда делаю разборы нововведений.
Чуть больше обо мне можно узнать тут - https://www.linkedin.com/in/akondratiuk-software-engineer
Пожалуйста, оставляйте свои реакции на постах, чтобы я мог корректировать выбор статей, что вам нравится, а что кажется не интересным!
Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе статей вы можете заметить больший уклон в эти технологии. Я стараюсь выбирать либо практически полезные статьи, либо интересные, а также иногда делаю разборы нововведений.
Чуть больше обо мне можно узнать тут - https://www.linkedin.com/in/akondratiuk-software-engineer
Пожалуйста, оставляйте свои реакции на постах, чтобы я мог корректировать выбор статей, что вам нравится, а что кажется не интересным!
Android Good Reads pinned «Привет! Меня зовут Антон, и последние 4 месяца я пишу для вас выжимки интересных статей про Android. Кажется, пора познакомиться? Я живу и работаю в Швеции, где мы разрабатываем приложение на KMP с Jetpack Compose сразу для обеих платформ, поэтому в выборе…»
Navigation Compose meet Type Safety
Начиная с версии Navigation 2.8.0-alpha08, навигация будет типо-безопасной
👉 Граф навигации собирается с использованием
👉 Теперь, если вы допустите ошибку с аргументом, передаваемым в навигацию, это будет обнаружено еще на этапе компиляции. Возможности проверки в рантайме из XML становятся делом прошлого
👉 Навигация стремится оставаться отдельным компонентом, чтобы не смешиваться с остальной частью приложения и обеспечить возможность легкого перехода в случае необходимости.SOLID friendly!
🤔 Итого:
Мы получаем более простую и стабильную в использовании навигацию, но менее гибкую в настройке
Начиная с версии Navigation 2.8.0-alpha08, навигация будет типо-безопасной
👉 Граф навигации собирается с использованием
Kotlin DSL
, XML
или вручную через NavGraph
, но последние изменения сосредотачиваются именно на Kotlin DSL
👉 Теперь, если вы допустите ошибку с аргументом, передаваемым в навигацию, это будет обнаружено еще на этапе компиляции. Возможности проверки в рантайме из XML становятся делом прошлого
👉 Навигация стремится оставаться отдельным компонентом, чтобы не смешиваться с остальной частью приложения и обеспечить возможность легкого перехода в случае необходимости.
Мы получаем более простую и стабильную в использовании навигацию, но менее гибкую в настройке
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
Navigation Compose meet Type Safety
Bringing Safe Args to Navigation Compose in Navigation 2.8.0-alpha08
Что такое нативная разработка?
Обсудим концепцию нативной разработки в контексте Android и iOS. Это понятие размылось с появлением кроссплатформенных технологий.
Исторически, нативная разработка относилась к приложениям, разработанным с использованием языков, специфичных для своей платформы (Java/Kotlin для Android и Objective-C/Swift для iOS). Однако с появлением дизайн-систем, акцент сместился с технической реализации на UI/UX. Использование родных системе компонентов предполагало что приложением может сойти за нативное?
Автор предлагает, что дизайн-системы и пользовательский опыт не определяют, является ли приложение нативным. Скорее это зависит от контекста платформы, для которой оно предназначено.
Современные мобильные фреймворки, такие как React Native и Flutter, предназначены для облегчения разработки приложений для мобильных платформ, но они работают в своих изолированных средах, требуя большого количества слоев абстракции для взаимодействия с системой, что может привести к избыточности и неэффективности в некоторых случаях. Можно ли это считать нативным подходом? Думаю, что нет
В отличие от этого, Kotlin выделяется как нативный язык благодаря своей архитектуре компилятора, позволяющей прямое взаимодействие с Java, Swift, JavaScript и WebAssembly. Встроенная интероперабельность Kotlin устраняет необходимость в промежуточном слое или собственной виртуальной машине, позволяя ему без проблем обмениваться объектами между платформами и генерировать нативный код для каждой целевой платформы. Получается, что Kotlin является нативным языком для разработки приложений на iOS тоже?
Итого:
Концепция нативности приложения относительна и зависит от контекста платформы, для которой она предназначена. В то время как дизайн-системы и пользовательский опыт важны, они не определяют, что означает быть нативным. Вместо этого способность к обмену памятью и стеком вызовов с базовой системой является ключевым критерием для нативной функциональности, а Kotlin соответствует этому критерию.
Обсудим концепцию нативной разработки в контексте Android и iOS. Это понятие размылось с появлением кроссплатформенных технологий.
Исторически, нативная разработка относилась к приложениям, разработанным с использованием языков, специфичных для своей платформы (Java/Kotlin для Android и Objective-C/Swift для iOS). Однако с появлением дизайн-систем, акцент сместился с технической реализации на UI/UX. Использование родных системе компонентов предполагало что приложением может сойти за нативное?
Автор предлагает, что дизайн-системы и пользовательский опыт не определяют, является ли приложение нативным. Скорее это зависит от контекста платформы, для которой оно предназначено.
Современные мобильные фреймворки, такие как React Native и Flutter, предназначены для облегчения разработки приложений для мобильных платформ, но они работают в своих изолированных средах, требуя большого количества слоев абстракции для взаимодействия с системой, что может привести к избыточности и неэффективности в некоторых случаях. Можно ли это считать нативным подходом? Думаю, что нет
В отличие от этого, Kotlin выделяется как нативный язык благодаря своей архитектуре компилятора, позволяющей прямое взаимодействие с Java, Swift, JavaScript и WebAssembly. Встроенная интероперабельность Kotlin устраняет необходимость в промежуточном слое или собственной виртуальной машине, позволяя ему без проблем обмениваться объектами между платформами и генерировать нативный код для каждой целевой платформы. Получается, что Kotlin является нативным языком для разработки приложений на iOS тоже?
Итого:
Концепция нативности приложения относительна и зависит от контекста платформы, для которой она предназначена. В то время как дизайн-системы и пользовательский опыт важны, они не определяют, что означает быть нативным. Вместо этого способность к обмену памятью и стеком вызовов с базовой системой является ключевым критерием для нативной функциональности, а Kotlin соответствует этому критерию.
Medium
What’s Native?
In the world of mobile programming - after Symbian, Java ME and Windows Phone -, “native” was the adjective used to categorize an…
Изменения в Google Play Console
Много небольших изменений для релиз-менеджеров или отвественных за рост приложения, но с точки зрения разработки мне интересна именно эта фича! Теперь, если у вас ANR краш в SDK с которым вы ничего не можете сделать - его можно пошарить с разработчиком этого SDK
Много небольших изменений для релиз-менеджеров или отвественных за рост приложения, но с точки зрения разработки мне интересна именно эта фича! Теперь, если у вас ANR краш в SDK с которым вы ничего не можете сделать - его можно пошарить с разработчиком этого SDK
Compose и адаптивные layout!
👉 Представлены
👉 Compose для Android TV переходит в бету
👉 Смотрим на красивые виджеты с Jetpack Glance!
Сегодня ожидается чуть больше новостей, касающихся Android от Google I/O!
Изображение взято с Jetcaster, показывающее как офигенно Compose выглядит на всех Android девайсах
👉 Представлены
NavigationSuiteScaffold, ListDetailPaneScaffold & SupportingPaneScaffold
. Для организации экранов. Посмотреть как каждый выглядит можно тут👉 Compose для Android TV переходит в бету
👉 Смотрим на красивые виджеты с Jetpack Glance!
Сегодня ожидается чуть больше новостей, касающихся Android от Google I/O!
Изображение взято с Jetcaster, показывающее как офигенно Compose выглядит на всех Android девайсах