Преимущества ProtoBuf и других бинарных форматов
Как показывает опрос практически все проекты используют JSON для обмена данными с сервером. Если ищите как можно ускорить взаимодействие с сервером и сэкономить время на реализации моделей, то вот почему стоит посмотреть на бинарные форматы
1. Компактность и экономия трафика
Бинарные форматы позволяют значительно уменьшить объём передаваемых данных. Это особенно актуально для мобильных устройств, где экономия трафика и снижение времени передачи могут дать ощутимый выигрыш. Даже JSON + GZIP в лучше случае получаться таким же по весу, а обычно всё равно больше.
2. Высокая скорость сериализации и десериализации
Благодаря оптимизированному бинарному представлению данные быстрее сериализуются и десериализуются. Это приводит к снижению задержек при обмене информацией между клиентом и сервером и улучшает отзывчивость приложения, а также экономит энергию
3. Эффективное использование ресурсов
Меньший объём данных снижает нагрузку на процессор и экономит заряд батареи, что особенно важно для мобильных приложений, работающих в условиях ограниченных ресурсов.
4. Поддержка версионирования и обратной совместимости
ProtoBuf позволяет легко эволюционировать схему данных, добавляя или удаляя поля без нарушения работы уже выпущенных версий приложений. Это упрощает поддержку и обновление API.
5. Кроссплатформенность
Используя единый протокол для обмена данными, можно обеспечить консистентность между различными платформами (Android, iOS и др.), что снижает затраты на разработку и интеграцию. Вам нужно лишь генерировать с помощью плагина код по схеме.
6. Сложности реализации и нюансы
При работе с бинарными форматами важно учитывать ряд моментов:
- Не читаемость в сыром виде: Бинарный формат сложнее анализировать вручную, что требует использования специальных инструментов для отладки. Это как плюс так и минус
- Необходимость определения схемы: Перед использованием данных нужно создать схему, а затем сгенерировать соответствующий код, что добавляет этап разработки. Обычно это делает бэкенд.
- Дополнительные зависимости: Интеграция библиотеки ProtoBuf (или аналогичной) может увеличить сложность сборки и конфигурации проекта.
Как показывает опрос практически все проекты используют JSON для обмена данными с сервером. Если ищите как можно ускорить взаимодействие с сервером и сэкономить время на реализации моделей, то вот почему стоит посмотреть на бинарные форматы
1. Компактность и экономия трафика
Бинарные форматы позволяют значительно уменьшить объём передаваемых данных. Это особенно актуально для мобильных устройств, где экономия трафика и снижение времени передачи могут дать ощутимый выигрыш. Даже JSON + GZIP в лучше случае получаться таким же по весу, а обычно всё равно больше.
2. Высокая скорость сериализации и десериализации
Благодаря оптимизированному бинарному представлению данные быстрее сериализуются и десериализуются. Это приводит к снижению задержек при обмене информацией между клиентом и сервером и улучшает отзывчивость приложения, а также экономит энергию
3. Эффективное использование ресурсов
Меньший объём данных снижает нагрузку на процессор и экономит заряд батареи, что особенно важно для мобильных приложений, работающих в условиях ограниченных ресурсов.
4. Поддержка версионирования и обратной совместимости
ProtoBuf позволяет легко эволюционировать схему данных, добавляя или удаляя поля без нарушения работы уже выпущенных версий приложений. Это упрощает поддержку и обновление API.
5. Кроссплатформенность
Используя единый протокол для обмена данными, можно обеспечить консистентность между различными платформами (Android, iOS и др.), что снижает затраты на разработку и интеграцию. Вам нужно лишь генерировать с помощью плагина код по схеме.
6. Сложности реализации и нюансы
При работе с бинарными форматами важно учитывать ряд моментов:
- Не читаемость в сыром виде: Бинарный формат сложнее анализировать вручную, что требует использования специальных инструментов для отладки. Это как плюс так и минус
- Необходимость определения схемы: Перед использованием данных нужно создать схему, а затем сгенерировать соответствующий код, что добавляет этап разработки. Обычно это делает бэкенд.
- Дополнительные зависимости: Интеграция библиотеки ProtoBuf (или аналогичной) может увеличить сложность сборки и конфигурации проекта.
👍40
Google подтвердила изданию Android Authority, что в ближайшем будущем перестанет публиковать код исходных версий Android по причине "упрощения разработки Android ОС и отказа от поддержания 2 веток разработки".
Разработка Android состоит из 2 основных веток:
👉 публичной, где содержится исходный код стабильной версии ОС
👉 внутренней (internal), где происходит разработка Android ОС.
Поддержка 2 веток приводит к конфликтам слияния, необходимости тратить время на доработки, чтобы опубликовать изменения в публичную ветку, потому что она не содержит всё из internal.
Google всё также будет публиковать исходный код, но многие части будут переходить в закрытую разработку. Также публикация кода станет реже.
Как это повлияет:
👉 Журналисты потеряют доступ к утечкам информации
👉 Пользователи не заметят изменений
🙏 Разработчики приложений не пострадают
Прекрасно понимаю Google, как сложно поддерживать 2 разные ветки разработки, особенно с ростом проекта и его функциональности. Все во благо процветания
Официальный анонс состоится в ближайшую неделю. Скорее всего, Android перейдет на Trunk Based разработку в internal ветке, потому что есть следующая новость...
#android #aosp #googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
🤖 Google вводит разработку нового функционала в AOSP через Feature Flag
Теперь весь новый функционал будет закрываться Feature Flag для изоляции кода, прошедшего тестирование, от частей в разработке.
Это позволит:
👉 сократить срок жизни веток с новым функционалом
👉 упростить и ускорить разработку задач
👉 перейти на trunk-based подход при разработке и сливать весь код в одну ветку, не дожидаясь его тестирования
👉 легко вырезать куски кода с функциями, которые не должны быть видны
Новому подходу должны следовать все разработчики-контрибьюторы в AOSP.
#android #aosp
Теперь весь новый функционал будет закрываться Feature Flag для изоляции кода, прошедшего тестирование, от частей в разработке.
Это позволит:
👉 сократить срок жизни веток с новым функционалом
👉 упростить и ускорить разработку задач
👉 перейти на trunk-based подход при разработке и сливать весь код в одну ветку, не дожидаясь его тестирования
👉 легко вырезать куски кода с функциями, которые не должны быть видны
Новому подходу должны следовать все разработчики-контрибьюторы в AOSP.
#android #aosp
👍15
Используете Trunk Based подход в продакшен проектах?
Anonymous Poll
31%
Да
3%
Нет, но планируем переход
21%
Нет
39%
Что это?
1%
Не пишу код
1%
Другой вариант
5%
Не участвую в опросе
👍4
Новый Mobius приближается и традиционно открывается плейлист со всеми видео прошедшей конференции
Также можно посмотреть на
В комментариях делитесь самыми интересными докладами и что в них было полезного
#android #ios #flutter #kotlin #kmp #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
👍49
#jetpack #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
#android #jetpack #jetpackupdate #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24
👉 Удалили артефакт ktx, так как библиотека теперь полностью на Kotlin
👉 Представили аналог Activity Result API для обработки, который поддерживает смену конфигурации
👉 Перешли на аннотации JSpecify
#android #jetpack #jetpackupdate #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
// Пример использования нового API для авторизации по биометрии
class AuthenticationSampleActivity : FragmentActivity() {
private val authResultLauncher = registerForAuthenticationResult(
onAuthFailedCallback = {
Log.i(TAG, "onAuthenticationFailed, try again")
},
resultCallback = { result: AuthenticationResult ->
when(result) {
is AuthenticationResult.Success -> result.authType
is AuthenticationResult.Error -> result.errorCode
}
}
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val authRequest: AuthenticationRequest =
AuthenticationRequest.Biometric.Builder(...)
// Setup build request
.build()
authResultLauncher.launch(authRequest)
}
}
👍20
#android #jetpack #android16 #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Теперь для тестирования навигации не требуется Android-устройство, эмулятор или использование Robolectric, благодаря тому что артефакт navigation-testing поддерживает JVM Desktop таргет KMP. Также поддерживается iOS.
#android #jvm #desktop #jetpack #jetpackupdate #навигация #ios
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
#android #jetpack #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
#jetpack #jetpackupdate #производительность #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
#jetpack #js #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
👉 Поддержка HLS interstitials для добавления рекламных вставок в HLS-стримы. Подробности тут.
👉 Экспериментальная поддержка декодеров с предварительным прогревом. Позволяет декодировать видео заранее и сделать переключение между видео плавным.
🚀 Оптимизация производительности: системные вызовы происходят на фоновом потоке для уменьшения ANR.
🎉 Новое API MediaExtractorCompat - замена MediaExtractor из фреймворка на основе Media3.
👉 API ExperimentalFrameExtractor для получения кадров из видео на замену MediaMetadataRetriever.getFrameAtTime().
👉 Поддержка работы с Dolby Vision.
🛠 Исправление багов.
Полный Release Notes тут.
#android #jetpack #медиа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Secure Preference - open source библиотека с оберткой над SharedPreferences c шифрованием данных
Фичи решения: полное шифрование, поддержка Coroutines FLow, простое API, автоматическое обновление, поддержка основных Android типов
Автор библиотеки есть среди подписчиков @android_broadcast и скорее всего ответит на ваши вопросы
#andorid #безопасность
Фичи решения: полное шифрование, поддержка Coroutines FLow, простое API, автоматическое обновление, поддержка основных Android типов
val securePrefs by SecurePrefs(context)
securePrefs.put("user_token", token)
val token = securePrefs.get(
key = "user_token",
default = null,
)
securePrefs
.keyResult("user_token", "")
.collect { token ->
println("Current token: $token")
}
Автор библиотеки есть среди подписчиков @android_broadcast и скорее всего ответит на ваши вопросы
#andorid #безопасность
👍38
Ключевые советы для написания тестов: Опыт Сбербанка (15м)
❗️Структурируйте тесты по принципу Arrange-Act-Assert:
Четкое разделение на подготовку, выполнение и проверку помогает создавать понятные и логичные тесты.
❗️Не используйте моки там, где это не нужно:
Моки — мощный инструмент для тестирования, но их неправильное использование может существенно ухудшить производительность.
❗️Пишите читаемые и поддерживаемые тесты:
Тесты должны быть самодокументируемыми, чтобы их мог понять любой разработчик, и легко адаптироваться под изменения кода.
❗️Изолируйте тесты друг от друга:
Независимость тестов гарантирует, что один тест не повлияет на результаты другого, что критично для стабильности автоматизированного тестирования.
❗️Избегайте дублирования кода:
Используйте общие фикстуры и утилиты для подготовки тестовых данных, чтобы сократить повторение и упростить поддержку.
❗️Покрывайте негативные и граничные сценарии:
Необходимо тестировать не только «счастливые» случаи, но и всевозможные ошибки и исключительные ситуации, что повышает надежность приложения.
❗️Регулярный анализ производительности:
Регулярный анализ производительности unit-тестов играет ключевую роль в нашем проекте для поддержания их эффективности и минимизации влияния на общий процесс разработки.
❗️Интегрируйте тестирование в CI/CD:
Автоматизация запуска тестов позволяет быстро получать обратную связь и оперативно обнаруживать проблемы на ранних этапах разработки.
#тестирование
❗️Структурируйте тесты по принципу Arrange-Act-Assert:
Четкое разделение на подготовку, выполнение и проверку помогает создавать понятные и логичные тесты.
❗️Не используйте моки там, где это не нужно:
Моки — мощный инструмент для тестирования, но их неправильное использование может существенно ухудшить производительность.
❗️Пишите читаемые и поддерживаемые тесты:
Тесты должны быть самодокументируемыми, чтобы их мог понять любой разработчик, и легко адаптироваться под изменения кода.
❗️Изолируйте тесты друг от друга:
Независимость тестов гарантирует, что один тест не повлияет на результаты другого, что критично для стабильности автоматизированного тестирования.
❗️Избегайте дублирования кода:
Используйте общие фикстуры и утилиты для подготовки тестовых данных, чтобы сократить повторение и упростить поддержку.
❗️Покрывайте негативные и граничные сценарии:
Необходимо тестировать не только «счастливые» случаи, но и всевозможные ошибки и исключительные ситуации, что повышает надежность приложения.
❗️Регулярный анализ производительности:
Регулярный анализ производительности unit-тестов играет ключевую роль в нашем проекте для поддержания их эффективности и минимизации влияния на общий процесс разработки.
❗️Интегрируйте тестирование в CI/CD:
Автоматизация запуска тестов позволяет быстро получать обратную связь и оперативно обнаруживать проблемы на ранних этапах разработки.
#тестирование
👍20
Вышел scrcpy 3.2 в котором добавили новые аудиосточники и исправили работу на Android 15 и 16
#android #интсрументы
#android #интсрументы
👍27
Context, который приходит в BroadcastReceiver.onReceive() не сможет выполнить (будет выброшено исключение) следующие методы
Anonymous Quiz
21%
bindService
20%
startForegroundService
38%
startActivity
21%
Нет правильного ответа
3👍17
Forwarded from Compose Broadcast
В этой статье вы найдете:
👉 как работают layout-ы в Compose;
👉 изменение layout-а отдельного компонента;
👉 создание кастомных Layout и LazyLayout;
👉 отложенную композицию.
Всё это на примерах, в том числе из дизайн-системы Авито.
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍47