Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Дизайн с учетом читаемости кода
Kotlin - язык с кучей возможностей и синтаксическим сахаром. Одни и те же вещи сделать можно множеством способов. Какой правильный? Краткость - это лучший вариант?
Из своего опыта могу сказать, что читабельность важнее. Лучше сделать больше строчек и выделить методы/классы/интерфейсы, чтобы разобраться в коде было проще. Короткие конструкции языка зачастую используют сложные операторы и фичи, которые поймут не все. Даже самому со временем может быть сложно понять этот код.
Что вы думаете на этот счет? Делитесь своим мнением в комментариях
Kotlin - язык с кучей возможностей и синтаксическим сахаром. Одни и те же вещи сделать можно множеством способов. Какой правильный? Краткость - это лучший вариант?
Из своего опыта могу сказать, что читабельность важнее. Лучше сделать больше строчек и выделить методы/классы/интерфейсы, чтобы разобраться в коде было проще. Короткие конструкции языка зачастую используют сложные операторы и фичи, которые поймут не все. Даже самому со временем может быть сложно понять этот код.
Что вы думаете на этот счет? Делитесь своим мнением в комментариях
👍2🔥1
Forwarded from Why Android? 🌚
Смена языка в рантайме всегда была болью. Помню проект, где было куча Utils которые переопределяют Context, сохраняют локаль и т.д. 😬
С выходом Android 13 приложениям разрешили менять язык на отличный от системного.
И, оказывается, Google сделали backport этого апи на все версии Android.
Всего пару действий и legacy можно выпиливать.
1️⃣ Обновляемся до
2️⃣ Создаем
3️⃣ Добавляем его в AndroidManifest
4️⃣ Добавляем
5️⃣ Ну и все
У себя проверял, точно работает на API 21+
Live Demo - Документация
С выходом Android 13 приложениям разрешили менять язык на отличный от системного.
И, оказывается, Google сделали backport этого апи на все версии Android.
Всего пару действий и legacy можно выпиливать.
1️⃣ Обновляемся до
appcompat.1.6.0-rc01 (стабильной нету, следующая сразу 1.7.0-alpha01 🌚)2️⃣ Создаем
xml/locales_config.xml с вашими поддерживаемыми языками<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="en" />
<locale android:name="ru" />
<locale android:name="be" />
</locale-config>3️⃣ Добавляем его в AndroidManifest
<application
android:localeConfig="@xml/locales_config"4️⃣ Добавляем
AppLocalesMetadataHolderService, где autoStoreLocales=true означает, что сервис сам будет сохранять локаль (спойлер: просто в файл 🌚)<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>5️⃣ Ну и все
AppCompatDelegate.getApplicationLocales() - вернет текущую локаль приложенияAppCompatDelegate.setApplicationLocales() - установит нужную вам локаль (допустим в настройках приложения)У себя проверял, точно работает на API 21+
Live Demo - Документация
👍9
Forwarded from Mobile Compose
#Featured #AndroidDevSummit #Compose
Compose Modifiers deep dive
Доклад от небезызвестного Leland Richardson, в котором он предлагает глубже погрузиться в историю модификаторов Compose, а также связанных с ними проблем и ограничений. Ну и самое интересное, рассказывает об изменениях Modifier API — как о тех, на которые уже переехали в версии 1.3, так и о тех, которые добавят в 1.4.
Compose Modifiers deep dive
Доклад от небезызвестного Leland Richardson, в котором он предлагает глубже погрузиться в историю модификаторов Compose, а также связанных с ними проблем и ограничений. Ну и самое интересное, рассказывает об изменениях Modifier API — как о тех, на которые уже переехали в версии 1.3, так и о тех, которые добавят в 1.4.
YouTube
Compose Modifiers deep dive
A deep dive into the history of Modifiers and the constraints of APIs. As well as the problems they are meant to solve leading up to a major overhaul in implementation in 1.3 and the addition of several lower level, but powerful, experimental APIs that we…
👍2
Forwarded from Разработка ждёт балета
Ещё одна ОС от гугла, да. На этот раз для всяких умных устройств и с прицелом на безопасность. На расте.
За новость скажем спасибо @MightySeal
#google #os #rust
За новость скажем спасибо @MightySeal
#google #os #rust
Googleblog
Announcing KataOS and Sparrow
We've open sourced several components for our secure operating system, called KataOS, on GitHub, as well as partnered with Antmicro
🤡7
Forwarded from StartAndroid
Кроме флага debuggable существует флаг profileable.
У profileable билда меньше возможностей по использованию профайлеров, но его производительность гораздо ближе к релизному.
#android #debug #performance #profileable
https://android-developers.googleblog.com/2022/10/accurately-measure-android-app-performance-with-profileable-builds.html
У profileable билда меньше возможностей по использованию профайлеров, но его производительность гораздо ближе к релизному.
#android #debug #performance #profileable
https://android-developers.googleblog.com/2022/10/accurately-measure-android-app-performance-with-profileable-builds.html
👍3🔥1
Forwarded from Android Good Reads (Egor Tolstoy)
This media is not supported in your browser
VIEW IN TELEGRAM
Релиз Appyx 1.0.0
- Вышел первый стабильный релиз Appyx – библиотеки навигации от Bumble.
- Вместе с релизом выпустили три туториала: Basics, Navigation и Custom animation.
- Вышел первый стабильный релиз Appyx – библиотеки навигации от Bumble.
- Вместе с релизом выпустили три туториала: Basics, Navigation и Custom animation.
👍4
Forwarded from Mobile Native ️️
7 Android Lifecycle Interview Questions That Some Got Wrong
Полезная статейка для начинающих с вопросами/ответами по lifecycle, которые могут спросить на собесах.
Читать (En)
Полезная статейка для начинающих с вопросами/ответами по lifecycle, которые могут спросить на собесах.
Читать (En)
👍4
Forwarded from Android Good Reads (Egor Tolstoy)
Open-Obfuscator – новый обфускатор мобильных приложений
- Автор проекта увлекался поиском уязвимостей в существующих обфускаторах, но ему не были рады. Поэтому он решил написать свой, с упором на открытость к разработчикам и рисерчерам. Даже для первого релиза большую часть времени разработки автор вложил в понятную документацию.
- Open-Obfuscator поддерживает обфускацию нативного кода с помощью специального LLVM плагина, и обфускацию Kotlin/Java кода поверх ядра Proguard.
- Нативный обфускатор называется O-MVLL, обфускатор для Kotlin – dProtect.
- Автор проекта увлекался поиском уязвимостей в существующих обфускаторах, но ему не были рады. Поэтому он решил написать свой, с упором на открытость к разработчикам и рисерчерам. Даже для первого релиза большую часть времени разработки автор вложил в понятную документацию.
- Open-Obfuscator поддерживает обфускацию нативного кода с помощью специального LLVM плагина, и обфускацию Kotlin/Java кода поверх ядра Proguard.
- Нативный обфускатор называется O-MVLL, обфускатор для Kotlin – dProtect.
🔥4
Forwarded from Локалхост (Никита Куликов) (Nikita Kulikov)
Как неявная кодогенерация съела несколько часов в моей жизни
Сегодня во время разработки приложения я получаю очень странное падение приложения. Согласно ему мы крашимся во время чтения обычной строки. Место это происходит в многопоточном коде и мне пришлось потратить много времени чтобы высказать предположения а почему так может быть.
Спустя множество потраченных часов просмотра логов и кода я поменял стратегию - решил посмотреть генерируемый код. Для этого я взял собранное приложение и декомпилировал его с помощью JADX. И там я увидел что вместо моей красивой строки следующее:
В этот момент я стал что-то подозревать, так как в продакшене таких ошибок ни у кого не было.
Оказалось все это время у меня крашился внутренний механизм LiveLiterals. AndroidStudio самостоятельно подменяет все константы в коде на LiveLiterals. Это сделано чтобы можно было менять константы в коде без пересборки приложения. Удивительно сколько всего себе позволяет текстовый редактор
Сегодня во время разработки приложения я получаю очень странное падение приложения. Согласно ему мы крашимся во время чтения обычной строки. Место это происходит в многопоточном коде и мне пришлось потратить много времени чтобы высказать предположения а почему так может быть.
Спустя множество потраченных часов просмотра логов и кода я поменял стратегию - решил посмотреть генерируемый код. Для этого я взял собранное приложение и декомпилировал его с помощью JADX. И там я увидел что вместо моей красивой строки следующее:
LiveLiterals$FirmwareVersionBuilderApiImplKt.INSTANCE.m9856xc5cc7c0e(). Сама строка в коде выглядит так: " ".В этот момент я стал что-то подозревать, так как в продакшене таких ошибок ни у кого не было.
Оказалось все это время у меня крашился внутренний механизм LiveLiterals. AndroidStudio самостоятельно подменяет все константы в коде на LiveLiterals. Это сделано чтобы можно было менять константы в коде без пересборки приложения. Удивительно сколько всего себе позволяет текстовый редактор
🤯5🤔3
Forwarded from Android Broadcast (Кирилл Розов)
198839537-2794bac0-8075-470b-9c4d-aea9bc9d719c-Up to 4K.mov
24.4 MB
compose-animation-playground - репо с подборкой реализации разных анимаций на Jetpack Compose
#aniamtion #compose
#aniamtion #compose
👍2
Forwarded from Mobile Developer (Алексей Гладков)
Как Котлин собирается сделать вам хорошо в 2023
https://blog.jetbrains.com/kotlin/2022/11/how-kotlin-is-going-to-fix-your-pains-in-2023/?utm_source=dailykotlin_tl
Вышла статья, где ребята из Jetbrains расписали какие проблемы они выявили с Котлином путем опроса сообщества и как они их собираются исправлять
Приятного чтения!
https://blog.jetbrains.com/kotlin/2022/11/how-kotlin-is-going-to-fix-your-pains-in-2023/?utm_source=dailykotlin_tl
Вышла статья, где ребята из Jetbrains расписали какие проблемы они выявили с Котлином путем опроса сообщества и как они их собираются исправлять
Приятного чтения!
The JetBrains Blog
How Kotlin Is Going To Fix Your Pains in 2023 | The Kotlin Blog
This year, we ran the first Kotlin Developer Survey. We designed the survey to help us identify and prioritize the pain points that most significantly affect Kotlin users' satisfaction. The collected
👍3
Forwarded from Android Guards
Давайте поговорим про исследование приложений на ReactNative? Чтобы задать тон дискуссии я написал небольшую заметку о моих подходах к вопросу и буду рад послушать про ваш опыт. Как положительный так и отрицательный.
(не)Уникальный опыт
Непокорный ReactNative
По моему скромному мнению - ReactNative уже прошел свой пик популярности в разработке мобильных приложений и дальше будет постепенно покидать эту область. Зачем он нужен, если есть божественный …
👍4
Forwarded from Android Good Reads (Egor Tolstoy)
Multiplatform Paging
- Логика пагинации – идеальный кандидат для того, чтобы шарить между платформами.
- CashApp выпустили библиотеку Multiplatform Paging, полный аналог библиотеки из AndroidX, но с поддержкой мультиплатформы.
- Логика пагинации – идеальный кандидат для того, чтобы шарить между платформами.
- CashApp выпустили библиотеку Multiplatform Paging, полный аналог библиотеки из AndroidX, но с поддержкой мультиплатформы.
Cash App Code Blog
Announcing Multiplatform Paging
Multiplatform Paging is a library that packages AndroidX Paging for Kotlin/Multiplatform. It’s built to be a drop-in-replacement for AndroidX Paging, so extracting out shared pagination logic couldn’t be easier.
👍3🔥1
Forwarded from Android Good Reads (Egor Tolstoy)
Гайд по разработке библиотек
Большой набор рекомендаций по всем фазам жизненного цикла библиотеки: дизайну, разработке, релизу и поддержке. Вот некоторые из них:
👀 Используйте режим Explicit API для того, чтобы контролировать видимость ваших функций пользователям библиотеки.
✅ Binary Compatibility Validator позволяет следить за обратной совместимостью.
🌠 Настройте работу с ресурсами, добавив им префиксы с именем библиотеки и отключив транзитивность для R class.
Большой набор рекомендаций по всем фазам жизненного цикла библиотеки: дизайну, разработке, релизу и поддержке. Вот некоторые из них:
👀 Используйте режим Explicit API для того, чтобы контролировать видимость ваших функций пользователям библиотеки.
✅ Binary Compatibility Validator позволяет следить за обратной совместимостью.
🌠 Настройте работу с ресурсами, добавив им префиксы с именем библиотеки и отключив транзитивность для R class.
👍4
Forwarded from Android Broadcast (Кирилл Розов)
Combo Breaker - библиотека для Compose, которая позволяет огибать текстом элементы UI. например, сделать текст колонками как в газете/журнале.
#compose
#compose
👍4
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Kotlin Coroutines use cases for Data/Adapters Layer
Использование корутин в Data слое: адаптеры для callback подходов, библиотеки с поддержкой из коробки и блокирующие функции. Ну и как же без Flow
#ocorutines
Использование корутин в Data слое: адаптеры для callback подходов, библиотеки с поддержкой из коробки и блокирующие функции. Ну и как же без Flow
#ocorutines
👍4🤔1
Forwarded from Mobile Compose (Jetpack Compose Bot)
#Article #Medium #Animations
Making Jellyfish move in Compose: Animating ImageVectors and applying AGSL RenderEffects
Любопытная статья, в которой автор показывает как можно создать нетривиальную анимацию медузы (!!!), по пути охватывая такие темы как:
▫️Создание кастомных ImageVectors из SVG
▫️Частичная анимация ImageVector
▫️Применение эффекта шума к Composable при помощи AGSL RenderEffect
Making Jellyfish move in Compose: Animating ImageVectors and applying AGSL RenderEffects
Любопытная статья, в которой автор показывает как можно создать нетривиальную анимацию медузы (!!!), по пути охватывая такие темы как:
▫️Создание кастомных ImageVectors из SVG
▫️Частичная анимация ImageVector
▫️Применение эффекта шума к Composable при помощи AGSL RenderEffect
Medium
Making Jellyfish move in Compose: Animating ImageVectors and applying AGSL RenderEffects 🐠
Learn how to use ImageVectors in Compose
👍3
Forwarded from Android Good Reads (Egor Tolstoy)
Обновилась документация по управлению памятью
Google обновили документацию про то, как в Android организован memory management. Из интересного – рекомендации по тестированию работы приложений в условиях ограниченной памяти, в том числе с помощью использования Stressful Application Test.
Google обновили документацию про то, как в Android организован memory management. Из интересного – рекомендации по тестированию работы приложений в условиях ограниченной памяти, в том числе с помощью использования Stressful Application Test.
👍3