We Love Android – Telegram
We Love Android
631 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Forwarded from По-явански
Раздельная компиляция, min, compile, target

В целом Java-технологии привычные к раздельной компиляции. Серверные приложения компилируются с Java Class Library, которая подкладывается в compile classpath при сборке, а запускаются с другим экземпляром JCL, которая лежит на сервере.

Однако, эта раздельность почти не чувствуется. Она незримо присутствует и заключается в том, что в итоговом jar у нас не лежит весь java.lang, java.util и что мы там ещё любим. Мы запускаем приложение с той же версией JDK, с которой собирали, и всё просто работает.

Таким образом, приложение разрабатывается под одну версию платформы, без оглядки на более старые и с надеждой на совместимость с новыми.

В desktop-приложениях (кто-то их ещё пишет?) всё ещё проще: зачастую JVM приносят с собой, и раздельной компиляции как не бывало.

В Android же, как известно, зоопарк: на конечных устройствах много разных версий. И вот тут система сборки спроектирована очень удачно:
• compile SDK — последняя версия, известная разработчику приложения на момент сборки. Она подкладывается в compile classpath, за счёт чего разработчик видит все новые фичи платформы;
• min SDK — минимальная поддерживаемая версия. Старой платформе, которую разработчик не хочет поддерживать, позволяет отклонять установку приложений. Инструментарию позволяет подсказать программисту, что те или иные declarations недоступны в min и могут отсутствовать в runtime classpath, поэтому нужно обернуть их использование в if;
• target SDK — версия, на поведение которой рассчитывает приложение. Позволяет более новой версии платформы сохранить поведение старой в старом приложении.

Таким образом, в быстро меняющемся мире Android-приложение компилируется для свежей версии платформы (compile SDK), ифами поддерживает более старые версии (вплоть до min SDK), а платформа, если она новее, чем ожидаемая (target SDK), сохраняет старое совместимое поведение (тоже ифами).

Это прекрасно. Это шедевр.

Для сравнения, ситуация в мире плагинов для IntelliJ: выбираешь одну версию, которая и будет твоим compile и min. Хочешь поддержать постарше — опускаешь версию, перестаёшь видеть новые declarations. Если в новых версиях что-то deprecated — ты об этом узнаешь на этапе валидации плагина, где-то после компиляции и упаковки.

Именно поэтому при обновлении IDE плагины часто либо отключаются (разработчик указал максимальную поддерживаемую версию), либо разваливаются (мой вариант:).

Зависишь от других плагинов? Вообще страдай. Там может быть установлена любая версия. Например, если зависишь от Android-плагина для IDE, то при компиляции видишь версию, которой полгода, а в бетах Android Studio уже много раз переименовали классы, поменяли на интерфейсы, переместили в другой пакет. (И сделали это в стенах той же компании, где придумали min, compile, target.) Удачи!
😁3👍2🔥1
Forwarded from Dev Easy Notes (Nikita)
Итак, ребята, взгляните на статью. Ничего не смущает? А вот эта? Дело в не в оформлении или стиле повествования дело в самой теме. Что первая статья, что вторая по своей сути просто пересказ книги Мартина с щепоткой заезженных истин вроде: важна золотая середина, выбирайте что лучше для вашего приложения отталкивайтесь от бизнеса требований и бла, бла, бла.

Первую статью закинули в наш Android чатик компании, с припиской поделится мнениями. Меня это не на шутку удивило, на самом деле разозлило. За последние лет 5, никто ничего концептуально нового для многомодульной архитектуры не придумал. Все эти статьи буквально пересказ предшественников и в 2023 году на серьезных щах обсуждать эти подходы это блять смешно. Вот серьезно идите посмотрите доклад Неклюдова, а потом прочитав эти статьи ответьте на вопрос, много нового они привнесли?

Вот знаете же миф о том, чтобы разработчику оставаться на одном месте ему нужно постоянно учиться. Я вот уже давно не читаю статьи по мобильной разработке и все жду того момента, когда ничего не буду понимать. За последние 5 лет самым значимым изменением было внедрение compose. Но это всего лишь один UI слой, не говоря уже о том, что большие проекты только-только начинают на него переезжать и то с большим скрипом.

Архитектуры в мобилке до жути простые и они везде одинаковые в 90% случаев. Оставшиеся 10% это какие-нибудь рибс, и то по сути те же яйца, только в профиль. Я даже не уверен, что имеет смысл говорить об архитектуре модулей когда речь идет о мобильном приложение. У бэкендеров другое дело, у них реально миллион способов связать сервисы друг с другом и там имеет место обсуждение архитектур. Потому как проеб в архитектуре у бэкендеров это реальная потеря бабок.

Больше всего забавляет архитектурная секция, где тебя просят сделать архитектору обычного мобильного приложения, у нас в компании такая есть. Хотите я за пару абзацев научу вас ее проходить?

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

Затем вы собираете требования по фичам проекта и тупо отдельные фичи располагаете в разных модулях. Делаете модуль app, показываете что там есть di, затем добавим модуль навигации, ну а че бы и нет. Дальше у вас только два варианта как располагать модули. Либо всю бизнес логику делать внутри feature и если нужно шарить делаете api модуль с интерфейсами, либо делаете отдельные domain модули в которых уже будут всякие repository и interactor.

Дальше желательно сказать что проксирующие интеракторы это херня из под коня и если интервьюер адекватный, ему это понравится. Дальше вам лишь нужно выбрать уже готовую архитектору для Presentation слоя: MVVM или MVI. MVP уже никто не воспринимает всерьез. Расклад такой: с MVVM проще онбординг новых сотрудников, и она лучше по памяти когда дохера событий на экране, но она хуже когда много асинхронщины. MVI сложнее в онбординге, и создается новый State на любой чих, зато один единый State и вы забываете что такое Race Condition. Бум, все, идите к начальству и просите зарплату архитектора.
👍6🤔3🔥1
Forwarded from addmeto (Grigory Bakunov)
Слухи ходили давно, но вот официальное подтверждение: Xiaomi отменили разрабатываемую ей в течении 13 лет оболочку MIUI. Вместо нее будет новое решение, HyperOS. Главная заявленная цель — интегрировать в единую экосистему основные девайсы Xiaomi, т.е. выйти за пределы телефонов.

Мне немного жаль, MIUI мне казалась неплохой. Ну, посмотрим на замену, она появится на телефонах Xiaomi 14-й серии.

https://www.androidauthority.com/xiaomi-hyperos-3376622/
🥱3👍1🤔1
Forwarded from Mobile Native ️️
Измеряя sequences

Достаточно объемная статья с исследованием производительности sequences и довольно интересными результатами выигрыша/проигрыша использования различных функций.

👉 Что такое Sequences
👉 Как Sequences работает под капотом
👉 Как работает преобразование обычных коллекций
👉 Как работает преобразование sequences
👉 Измерения (map, sort, filter, distinct, take, etc)

Видеоверсия → Измеряем sequence 📹

Читать (Ru)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1😱1
Forwarded from Mobile Developer (Алексей Гладков)
Разбираемся с Kotlin Compiler Plugin [EN]
https://betterprogramming.pub/say-hello-to-kotlin-compiler-plugin-f4e857be9a1

Пока писал свой курс наткнулся на эту замечательную статью
👉 В чем разница между KSP и KCP
👉 Как работает компилятор котлина
👉 Что такое PSI
👉 Как работает IR
👉 и многое другое

Приятного чтения!
👍1🔥1😱1
Forwarded from Mobile AppSec World (Yury Shabalin)
Подборка историй о взломах мобильных приложений

Всем привет!

Недавно пришла в голову идея составить небольшую подборку из громких в свое время историй про взлом мобильных приложений. То есть о тех историях, которые получили публичную известность благодаря СМИ и немного пошумели.

Мне кажется, что получилось достаточно неплохо, по крайней мере мне самому было интересно ее перечитать после публикации.

Так что приятного и легкого чтения =)

#news #vulns
3👍1
Forwarded from Mobile Compose
#Article #Medium #Fun

Building the Flappy Musk.eteer Arcade Game with Jetpack Compose

Не бизнес-приложениями едиными. Тут вам история как собрать с нуля свою версию Flappy Bird на Jetpack Compose без смс и регистрации.

Зеркало статьи 👉 тут
👍3😱1
Forwarded from Android Guards
Android предоставляет весьма широки возможности по логированию различных событий. Одним из наиболее полезных, на мой взгляд, является логирование SQL запросов, которые делают приложения. Не важно, напрямую или через ORM. В логах будут те запросы, которые непосредственно выполняет БД. Включить эту возможность можно командой: adb shell setprop log.tag.SQLiteStatements VERBOSE. После чего в logcat должны появиться логи запросов. А если поискать в исходниках Android ссылки на метод isLoggable, то можно найти другие подобные теги и включить логирование для них аналогичным способом.
#aht
👍4🔥1
Forwarded from Compose Broadcast (Кирилл Розов)
QRose - Compose Multiplatform библиотека для создания QR кодов. Поддерживает Android, iOS, macOS, Web
👍6🤝4🎄3
Forwarded from Android Broadcast (Кирилл Розов)
Одно из будущих фичей Android Studio Iguana станет проверка Compose UI на адаптивность под разные размеры экранов и доступность. Фича называется Compose UI Check

#androidstudio
👍4🔥1🤔1
Forwarded from Yandex for Mobile (Ксения Дегтярева)
✔️ Новое видео на канале Yandex for Mobile: обсуждаем разработку Карт и первый коммит с КММ в Яндексе

Мы позвали на интервью Дениса Загаевского, старшего разработчика в мобильных Картах и Навигаторе. Обсудили сразу несколько тем: какие задачи решают ребята в Картах, как подстраиваются под сложности определения геолокации, развивается ли МарKit, как уживаются приложения Карт и Навигатора. Раскрыли несколько тайн: кто сделал первый коммит с KMM в Яндексе, нужен ли для KMM свой Dagger и зачем мобильному разработчику своя виртуальная машина.

🔜 Смотрите выпуск и подписывайтесь на канал — мы готовим очень много хорошего контента.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2💩1👨‍💻1
Forwarded from Mobile Native ️️
Deep Dive Into Android Memory

Отличная статья про то, как приложения работают с памятью в андроиде, что происходит при нехватке памяти, как и какие процессы запускаются и т.д.

👉 Garbage Collection
👉 Kswapd(Kernel Swap Daemon)
👉 Low Memory Killer
👉 Memory Management

Читать (En)
🔥3👍2
Forwarded from Dev Easy Notes (Nikita)
Я недавно писал о том, что я давно не читаю статей по мобильной разработке. На самом деле такая же тема у меня и с докладами. Когда был молодым я их смотрел десятками, все было в новинку и интересно. Сейчас я смотрю их крайне редко, в основном это доклады крутых олдов вроде Боиштяна.

Это все что касается именно технических докладов. Однако чем опытнее я становлюсь, тем меня почему-то больше привлекают доклады про жизнь. Потому как разобраться в какой-то технологии ты точно сможешь и без доклада, а вот разобраться в себе, это оказывается гораздо сложнее. У меня большинство людей из окружения ITшники, внезапно. И я вижу проблему, что мы порой слишком увлекаемся работой и забиваем на все остальные сферы жизни типа: здоровья, отношений, хобби. Поэтому в эту тему у меня есть целых 2, must have доклада, именно про жизнь, которые как мне кажется будет дико полезно посмотреть каждому:

👉 Один из самых крутых докладов который я видел в принципе. Это наверное даже больше стендап, нежели доклад. У меня есть близкий друг, который пересматривает этот видос раз в год. На самом деле если вы в сфере IT больше пяти лет, я бы советовал прям сейчас его включить.
👉 Второй доклад примерно про ту же тему с советами по здоровью, эффективность и про то что после 30 оказывается не финишь) В нем кстати есть очень крутой совет про оценку сроков.
👍3🔥21🤔1
Image Toolbox - это приложение для обработки фотографий и графический редактор, созданное на основе современного технологического стека с использованием чистой архитектуры. В нем есть такие функции, как применение фильтров, обрезка, редактирование EXIF, выбор качества и типа выходного изображения, а также множество других возможностей. Внутри Kotlin, корутины, Flow, Accompanist, Hilt, Coil, Compose Navigation Reimagined, Jetpack в разных проявлениях.

Image Toolbox на GitHub: https://github.com/T8RIN/ImageToolbox
Платформа: Android
⭐️: 748
🤔42🔥1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Вышел Kotlin 1.9.20
📺 Видео обзор (EN, 13 мин)

Kotlin Multiplatform (KMP)
🎉 Стабильный Kotlin Multiplatform 🎉
👉 IDE Новый шаблон с иерархией для настройки KMP проектов
👉 IDE Новый wizard создания проекта
👉 Полная поддержка Gradle Cache в KMP
👉 Пооддержка compile кэша для Kotlin/Native в Compose Multiplatform

Kotlin/JVM
👉 Поддержка генерации байткода JVM 21

K2 компилятор
👉 K2 компилятор в Beta для всех таргетов (включая Kotlin/Wasm)
👉 kapt стал поддерживать K2

Kotlin/Native
👉 Custom memory allocator теперь работает по умолчанию в Kotlin/Native
👉 Улучшение производительности Garbage Collector в kotlin/Native
👉 Удаление старого менеджера памяти
👉 Удалили deprecated target-ы

Wasm
👉 Новый таргет для Kotlin/Wasm - wasm-wasi поддерживат свежий Wasm GC
👉 WASI API в KotlinWasm stdlib

stdlib
👉 Появились generic функции для работы с Enum
👉 stdlib Kotlin.Native стала Stable

Больше читайте в официальном релизе
🔥4👍2🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Что будет если команда, не видавшая Compose, решила делать новую сложную фичу на нём?

Меня зовут Дмитрий Максимов, я Android разработчик в Dodo Engineering. Больше 2-х лет я пробовал Jetpack Compose в пет-проектах, но хотелось прокачать свои знания по полной и попробовать фреймворк в настоящем проде. В этой статье расскажу, как мы сделали сложный Compose экран с нестандартным скроллом и снаппингом контента.

Статья: https://habr.com/ru/companies/dododev/articles/764540/
Платформа: Android
👍2🔥2🤔1