LinkedIn и JetBrains запартнёрились и теперь и запустили сертификацию по java.
Курс "Java Foundations Professional Certificate by JetBrains" направлен на начинающих и включается 5 глав: синтаксис, ООП, объекты и APIs, структуры данных и JDBC, после чего можно получить сертификат.
Жду программы по Kotlin
#jetbrains #linkedin #сертификация
Курс "Java Foundations Professional Certificate by JetBrains" направлен на начинающих и включается 5 глав: синтаксис, ООП, объекты и APIs, структуры данных и JDBC, после чего можно получить сертификат.
Жду программы по Kotlin
#jetbrains #linkedin #сертификация
Это позволит использовать единую версию SQLite на всех устройствах и получать преимущества в скорости работы от новых функций. Причем эта возможность доступна для всех поддерживаемых платформ, которые поддерживает Room: Android, iOS, Desktop.
🔗 Подробности в документации
#android #sqlite #room #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
В Android Studio Meerkat 2024.3.1 появится возможность создавать KMP Shared модуль для Android и iOS
#androidstudio #kmp #android #ios
#androidstudio #kmp #android #ios
Выполнение запросов SQLite на множестве потоков может привести к замедлению вашего приложения 🤯
Разработчик делает классный разбор того, как работают запросы SQLite в Android и как их оптимизировать. Статья - параллельность в Android SQLite (EN,11м)
Основные выводы:
👉 Используйте забандленную версию SQLite (добавит около 1 Мб за каждый ABI)
👉 Если работает с несколькими БД через ROOM, то задавайте CoroutineContext или Executor для выполнения запросов
👉Больше полезного в статье, почитай. Она того стоит
#android #room #sqlite #jetpack
Разработчик делает классный разбор того, как работают запросы SQLite в Android и как их оптимизировать. Статья - параллельность в Android SQLite (EN,11м)
Основные выводы:
👉 Используйте забандленную версию SQLite (добавит около 1 Мб за каждый ABI)
👉 Если работает с несколькими БД через ROOM, то задавайте CoroutineContext или Executor для выполнения запросов
👉
#android #room #sqlite #jetpack
Forwarded from AvitoTech
Зачем мы пошли в разработку своих решений на базе low-сode & Backend-Driven UI
Представим, что перед нами стоит максимально тривиальная задача — поменять в карточке объявлений цену, выделив ее ярким фоном, и название товара.
Обновления необходимо внести на всех трех платформах: Web, Android и iOS. Следовательно, задача должна пройти полный цикл разработки — от постановки в бэклог до финального релиза. И вот тут возникает проблема. Во-первых, команды могут быть заняты решением более приоритетных задач. Во-вторых, разные платформы обновляются по-разному. И, как итог, time to market даже для такого простого изменения составит существенную величину.
📌 Решить это можно через переход на WebView или использование кроссплатформенных инструментов, таких как Flutter. Однако мы остановились на подходе Backend-Driven UI. Что из этого вышло рассказал в новой статье Михаил Шевченко, архитектор и разработчик backend low-code-платформы Bricks в Авито.
#backend_avitotech #habr_avitotech
Представим, что перед нами стоит максимально тривиальная задача — поменять в карточке объявлений цену, выделив ее ярким фоном, и название товара.
Обновления необходимо внести на всех трех платформах: Web, Android и iOS. Следовательно, задача должна пройти полный цикл разработки — от постановки в бэклог до финального релиза. И вот тут возникает проблема. Во-первых, команды могут быть заняты решением более приоритетных задач. Во-вторых, разные платформы обновляются по-разному. И, как итог, time to market даже для такого простого изменения составит существенную величину.
#backend_avitotech #habr_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
Развитие Android глазами разработчика(11м)
Обзор как развивался с 2007 года и до новых дней: Ant, Eclispe, NetBeans, RoboGuiece, ActionBarSherlock, AsyncTask, EventBus, MVC, Android Studio, Gradle, Material Design, RxJava, Volley, Retrofit, MVP/MVVM, Dagger, Kotlin, Coroutines, Gradle Kotlin DSL, Jetpack Compose, MVI,
#android
Обзор как развивался с 2007 года и до новых дней: Ant, Eclispe, NetBeans, RoboGuiece, ActionBarSherlock, AsyncTask, EventBus, MVC, Android Studio, Gradle, Material Design, RxJava, Volley, Retrofit, MVP/MVVM, Dagger, Kotlin, Coroutines, Gradle Kotlin DSL, Jetpack Compose, MVI,
#android
Детские ошибки при сборке Gradle-приложений (10м)
Статья с рекомендациями по ускорению Gradle сборки Android и не только проектов
👉 Прибегайте к инкрементальной сборке
👉 Настройте Gradle Build Cache
👉 Включите Gradle Configuration Cache. Нужно чтобы все подключенные плагины поддерживали Config Cache. Актуальный статус тут
👉 Используйте Gradle Daemon
👉 ABI vs non-ABI зависимости
Всё очень базово и вы не найдете в статье рецепты, но точно подсветит базу
#gradle #android #производительность
Статья с рекомендациями по ускорению Gradle сборки Android и не только проектов
👉 Прибегайте к инкрементальной сборке
👉 Настройте Gradle Build Cache
👉 Включите Gradle Configuration Cache. Нужно чтобы все подключенные плагины поддерживали Config Cache. Актуальный статус тут
👉 Используйте Gradle Daemon
👉 ABI vs non-ABI зависимости
Всё очень базово и вы не найдете в статье рецепты, но точно подсветит базу
#gradle #android #производительность
Google I/O 2025 пройдет 20-21 мая. Ждем новые анонсы и много слов AI. Скорее всего в рамках Googel IO и выпустят стабильную Android 16
#googleio
#googleio
Google выпустила Codelab по погружению в разработку под Android XR - ОС на основе Android для устройств смешенной реальности
#android #codelab #androidxr
#android #codelab #androidxr
This media is not supported in your browser
VIEW IN TELEGRAM
Демонстрация добавления перевода строк с помощь Gemini в Android Studio
Какие сценарии для AI в IDE вы еще бы хотели увидеть ?
#androidstudio #gemini
Какие сценарии для AI в IDE вы еще бы хотели увидеть ?
#androidstudio #gemini
Не нужно делать UseCase для простых вызовов
В статье приводится пример с получением данных через UseCase с простым вызовом метода из единственной зависимости. Конечно, есть принятый подход, но зачем делать лишний класс только потому, что "так принято".
Мне не нравится делать так:
а на замену просто получать данные из репозитория в ViewModel:
Не делайте избыточный код просто потому, что так принято у всех остальных или потому, что так сказал какой-то умный эксперт по разработке. Оценивайте здраво, что вам нужно сейчас, и при изменении требований вводите новые элементы в архитектуре.
#android #архитектура #лучшиепрактики
В статье приводится пример с получением данных через UseCase с простым вызовом метода из единственной зависимости. Конечно, есть принятый подход, но зачем делать лишний класс только потому, что "так принято".
Мне не нравится делать так:
class FetchMemesUseCaseImpl(
private val memeRepository: MemeRepository
) : FetchMemesUseCase {
override suspend operator fun invoke(): List<Meme> {
return memeRepository.fetchMemes()
}
class MemeListViewModel(
private val fetchMemesUseCase: FetchMemesUseCase
) : ViewModel()
а на замену просто получать данные из репозитория в ViewModel:
class MemeListViewModel(
private val memeRepository: MemeRepository
) : ViewModel()
Не делайте избыточный код просто потому, что так принято у всех остальных или потому, что так сказал какой-то умный эксперт по разработке. Оценивайте здраво, что вам нужно сейчас, и при изменении требований вводите новые элементы в архитектуре.
#android #архитектура #лучшиепрактики
В вашем коде есть UseCase в одну строку? (как в посте выше)
Anonymous Poll
50%
Да
29%
Нет
2%
Не знаю
15%
Не использую UseCase
0%
Не пишу код
4%
Не участвую в опросе
Увлекательное путешествие в мир безопасности Android! Разобрали самые интересные и коварные уязвимости, такие как Path Traversal, SQL-инъекции и Tapjacking. Но основное внимание уделили WebView: неправильной валидации данных, уязвимостям в библиотеке для парсинга URL, JavaScript Interface и загрузке диплинков.
В докладе нет скучных терминов и монотонных объяснений. Вместо этого — захватывающая история поиска уязвимостей и их устранения, основанная на личном опыте при разработке приложений.
Будет полезно всем тем, кто интересуется безопасностью Android-приложений.
📹 Версия на VK Video
#android #безопасность #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как лишние ресурсы могут повлиять на UI вашего приложения
Библиотеки от Google и других популярных SDK часто содержат строки для десятков локалей, тогда как большинство приложений поддерживают всего 7–10 наиболее востребованных языков.
Механизм выбора ресурсов в Android устроен таким образом, что система подбирает наиболее подходящий ресурс с учётом квалификаторов (например, локали). Если для конкретной локали, установленной на устройстве, в вашем проекте отсутствует соответствующий перевод, система может использовать строку из библиотеки по умолчанию. Это может привести к неожиданному отображению интерфейса.
Чтобы избежать подобных ситуаций, вы можете явно задать набор локалей, которые поддерживает ваше приложение. Тогда все ресурсы для неуказанных локалей не попадут в финальный APK, что не только снижает его размер, но и обеспечивает предсказуемость UI.
Пример настройки в build.gradle.kts (application модуль):
Ранее Android Gradle Plugin позволял фильтровать ресурсы по различным группам квалификаторов (например, плотность экрана, ориентация и т.д.), однако начиная с AGP 8.0 эта возможность объявлена устаревшей и поддерживается только фильтрация по локалям. Это связано с тем, что App Bundle эффективно разделяет ресурсы по плотности экрана, а применение других фильтров использовалось крайне редко.
#android #gradle #локализация #лучшиепрактики
Библиотеки от Google и других популярных SDK часто содержат строки для десятков локалей, тогда как большинство приложений поддерживают всего 7–10 наиболее востребованных языков.
Механизм выбора ресурсов в Android устроен таким образом, что система подбирает наиболее подходящий ресурс с учётом квалификаторов (например, локали). Если для конкретной локали, установленной на устройстве, в вашем проекте отсутствует соответствующий перевод, система может использовать строку из библиотеки по умолчанию. Это может привести к неожиданному отображению интерфейса.
Чтобы избежать подобных ситуаций, вы можете явно задать набор локалей, которые поддерживает ваше приложение. Тогда все ресурсы для неуказанных локалей не попадут в финальный APK, что не только снижает его размер, но и обеспечивает предсказуемость UI.
Пример настройки в build.gradle.kts (application модуль):
android {
androidResources {
// Автоматически сгенерировать список локалей на основе ресурсов проекта
// По умолчанию false
generateLocaleConfig = true
// Либо явно указать поддерживаемые локали
localeFilters.addAll(setOf("en", "ru", "es", "de"))
}
}Ранее Android Gradle Plugin позволял фильтровать ресурсы по различным группам квалификаторов (например, плотность экрана, ориентация и т.д.), однако начиная с AGP 8.0 эта возможность объявлена устаревшей и поддерживается только фильтрация по локалям. Это связано с тем, что App Bundle эффективно разделяет ресурсы по плотности экрана, а применение других фильтров использовалось крайне редко.
#android #gradle #локализация #лучшиепрактики
Forwarded from AvitoTech
This media is not supported in your browser
VIEW IN TELEGRAM
Три слова для привлечения внимания любого тимлида: OKR, планирование и мотивация команды 🚀
А теперь, пока вы тут: встречаемся 26 февраля на Avito TeamLead Drinkup #3!
Обсудим, как оценивать софт скиллы на собеседовании, растить и мотивировать команду и зачем ИИ в менеджменте. Без нетворка, конечно, не оставим — он будет после основной программы.
Для регистрации кликайте сюда. Осталось не так много мест!🔥
#management_avitotech
А теперь, пока вы тут: встречаемся 26 февраля на Avito TeamLead Drinkup #3!
Обсудим, как оценивать софт скиллы на собеседовании, растить и мотивировать команду и зачем ИИ в менеджменте. Без нетворка, конечно, не оставим — он будет после основной программы.
Для регистрации кликайте сюда. Осталось не так много мест!
#management_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышла вторая из четырёх Beta версий Android 16. Улучшили работу с медиа, новые возможности Camera2 API, форсирование Edge-to-edge и другие. Как всегда расскажу отдельными постами про самые интересные фичи
#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
val intent = Intent(MediaStore.ACTION_MOTION_PHOTO_CAPTURE)
// или MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE
// Задаем куда сохранить
intent.putExtra(MediaStoreEXTRA_OUTPUT, uri)
// или Uri через ClidData
intent.setClipData(clipData)
context.startActivity(intent)
#android16
Please open Telegram to view this post
VIEW IN TELEGRAM