Мир Android Разработки
455 subscribers
134 photos
2 videos
99 links
Все о android разработке
Download Telegram
💻 Отличия Sequence API vs Collection в Kotlin

Держите хорошее объяснение отличий между 2 этими понятиями.

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

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

Sequence API в Kotlin могут обрабатывать данные более эффективно, чем обычные коллекции.

📎Читать подробнее: [ru], [en]
💻 Немного о конструкции when в Kotlin

Конструкция when проверяет значение некоторого объекта и в зависимости от его значения выполняет тот или иной код. Конструкция when аналогична конструкции switch в других языках. Формальное определение:
when(объект){
значение1 -> действия1
значение2 -> действия2
...
значениеN -> действияN
}


Если значение объекта равно одному из значений в блоке кода when, то выполняются соответствующие действия, которые идут после оператора -> после соответствующего значения:
fun main() {
val isEnabled = true
when(isEnabled){
false -> println("isEnabled off")
true -> println("isEnabled on")
}
}

Здесь в качестве объекта в конструкцию when передается переменная isEnabled. Далее ее значение по порядку сравнивается со значениями в false и true. В данном случае переменная isEnabled равна true, поэтому будет выполняться код:
println("isEnabled on")



Выражение else

В примере выше isEnabled имела только 2 возможных варианта: ...
📱 Интересная статья о написании профайлера для анализа Android-приложения с помощью Kotlin

Некоторые мысли из статьи, и о чём вообще в ней речь:

Аудит приложения важен для выявления неявных деградаций в производительности.

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

Существующие инструменты Android Profile, Battery Historian и Systrace имеют свои минусы.

В частности, Android Profiler имеет наглядные графики и обширный функционал, но у него отсутствует гибкость в сборке метрик.

Systrace позволяет собирать и инспектировать время работы частей кода по всем процессам на девайсе.

Battery Historian нужен для получения дополнительной информации по работе приложения, такой как процент потребления батарейки и условия, влияющие на потребление.

В статье представлены коды для фиксации значений потребления CPU, памяти, сети и потребления батареи.

Кастомное решение имеет ряд преимуществ по отношению к Android Prof...
Mobox — полезная утилита для запуска windows x86 приложений на Android.

Проект работает через Termux, используя Box64 и Wine. Имеет простой и быстрый процесс установки.
💻 Запуск Kotlin кода без IDE

▶️Итак, вопрос: как скомпилировать простенький код написанный на Kotlin без IDE?


▶️Вот пошаговая инструкция:

1. Загрузить компилятор. Найти последнюю версию можно здесь.

2. Распаковать компилятор в отдельную папку, добавить bin директорию в переменную окружения PATH. Об этом можно почитать тут. Bin содержит скрипты, необходимые для сборки и запуска кода на Windows, OS X и Linux.
Другой вариант установки компилятора: для OS X, Linux, Cygwin, FreeBSD или Solaris (возможно, и другие UNIX-системы), то можно использовать SDKMAN https://sdkman.io/.
Запускаем в терминале:
$ curl -s https://get.sdkman.io | bash

Затем следуем инструкциям. Потом потребуется открыть новое окно терминала и установить Kotlin с помощью команды:
$ sdk install kotlin


▶️Теперь кратко о создании и запуске простого приложения.

1. Создаем файл - `hello.kt` со следующим кодом:
fun main(args: Array<String>) {
println("Hello, World!")
}


2. Компилируем, используя командную строку:
$ kotlinc hello
...
💻 Конструкторы-самозванцы в Kotlin

Держите полезную статью о том, как можно нестандартно использовать функции верхнего уровня в Kotlin. О чём пойдёт речь в статье?

В Kotlin возможны конструкции, которые могут выглядеть как вызовы конструкторов, но не являются таковыми

Функции верхнего уровня в Kotlin разрешены и не ограничены регистром именования

Использование оператора Companion.invoke() может быть полезно для контроля создания объектов в статическом контексте

Оператор receiver(Context) Companion.invoke() позволяет делегировать создание объектов в локальном контексте

📎 Статья
💻 Kotlin Coding Conventions

Соглашения в сфере разработки призваны помочь разработчикам писать понятный друг для друга код, в статье речь именно об этом.
Если вы только переходите от написания пет-проектов к работе над чем-то более серьёзным — загляните по ссылке в конце

Затрагиваются такие очевидные и не совсем вещи:
Правила форматирования кода, отступы, фигурные скобки, использование замыкающих запятых

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

Особенности Kotlin, такие как использование именованных аргументов и условных операторов

Рекомендации по использованию функций расширения, инфиксных функций и фабричных функций

Пишите код и помните: однажды работать с ним будет маньяк, который знает, где вы живёте)

📎 Читать
💻 Статические методы и синхронизация в Котлин

На собеседовании может всплыть вопрос в духе: "Что будет являться монитором для блока кода, помеченного сразу двумя аннотациями и в Котлин?".
Держите полезную статью, в которой рассматривается, для чего используются данные аннотации и каким будет результат при их одновременном использовании.

А пока немного о и :

🟡Аннотация в Kotlin является аннотацией для методов и блоков кода, которая обеспечивает синхронизацию доступа к ним между потоками. Когда метод или блок кода помечены аннотацией , только один поток может получить право их выполнения в определенный момент времени, остальные потоки будут ожидать освобождения монитора, прежде чем получить доступ. Это позволяет избежать состояния гонки и обеспечить правильное выполнение кода в многопоточной среде.

🟡Аннотация в Kotlin указывает компилятору, что функция или свойство должны быть статическими в Java-коде после компиляции. Когда мы используем перед функцией или свойством в объекте- компаньоне или вну...
💻 Каррирование в Kotlin

Kotlin поддерживает парадигму функционального программирования (ФП). Часто объектно ориентированный подход (ООП) ставят в противовес ФП, но они не соперники и могут дополнить друг друга. Одно из понятий ФП — каррирование функций.

Например, преобразование функции в вид f(a)(b) называется каррированием в честь Хаскелла Карри.
// Пример каррированной функции с применением fun
fun f(a: Int) = { b: Int -> a + b }

// Пример каррированной функции с применением переменной
val f2: (Int) -> (Int) -> Int = { b -> { a -> a + b } }


▶️ Погружение в каррирование в Kotlin
💻 Что такое Kotlin Channel?

При использовании корутин в Kotlin рано или поздно появляется вопрос о том, какие примитивы необходимо использовать для передачи потоков данных между несколькими корутинами.
Для этого в библиотеке kotlinx.coroutines имеется специальный механизм, который так и называется — Channel.

▶️ Посмотрим на него поподробнее
📱 Google меняет способ обновления Android Studio с помощью Feature Drops

Google обновляет цикл выпуска инструмента для создания приложений Android Studio. С помощью Feature Drops разработчики получат «более частые и целенаправленные обновления».

Первое обновление включает новейшие возможности платформы IntelliJ IDEA компании Jetbrains, на которой основана Android Studio. Сюда входят «улучшения удобства использования, производительности и стабильности», такие как обновления терминала и редактора.
Эти изменения появятся в стабильном канале быстрее, чем это происходило ранее.

Затем последует выпуск функций, в том числе инструментов, помогающих тестировать/оптимизировать форм-фактор большого экрана. Бета-версия станет доступна вскоре после того, как обновление платформы IDE выйдет в стабильном канале. В предстоящем выпуске функций Koala Feature Drop будут добавлены:

— новый процесс входа в систему, который значительно упрощает подключение к нескольким сервисам Google, таким как Firebase и Gemini, в Androi...
This media is not supported in your browser
VIEW IN TELEGRAM
💻 Кинетические часы — интересный проект на Kotlin

Отличная идея для пет-проекта)
Создано с использованием Compose Desktop

🖥 GitHub
🔥🔥🔥 Google объявила конкурс для всех разработчиков Gemini API с призовым фондом в $3 млн и Custom Electric 1981 DeLorean (Легендарная машина из фильма Назад в будущее)

В рекламе снялся легендарный Кристофер Ллойд, актер снимавшийся в трилогии Назад в будущее.

🛻 Главный приз: полностью электрическая версия DeLorean 1981, произведенная на заказ.

Общий призовой фонд: $3 млн.

Конкурс Google Gemini API открыт как для отдельных участников, так и для команд. Разработчикам предлагается создать и представить приложения с использованием API Gemini.

⚡️Критерии оценки

Google оценивает приложения по пяти основным критериям:

* Креативность
* Полезность
* Исполнение
* Новизна
* Влияние

Компания будет выбирать приложения, которые:

*Ииспользуют API Gemini
* Решают реальные проблемы
* Оригинальны и хорошо продуманы
* Дают потяьный пользовательский опыт

Призы

В рамках конкурса также будут вручаться денежные призы в различных категориях:

* Лучшее приложение для Android
* Лучшее веб-приложение
* Лучшая игра

Кром...
💻 detekt — статический анализатор кода на Kotlin

brew install detekt

detekt предоставляет высококонфигурируемые наборы правил, имеет бесшовную интеграцию с Gradle от первого лица с помощью плагина Gradle, и предоставляет ещё массу возможностей.
Поддерживает различные форматы отчетов: HTML, Markdown, SARIF, XML (Checkstyle) и кастомные форматы.

🖥 GitHub
🟡 Доки
💻 Exposed — ORM библиотека для Kotlin

val exposed_version = "0.50.0"
dependencies {
implementation("org.jetbrains.exposed", "exposed-core", exposed_version)
implementation("org.jetbrains.exposed", "exposed-dao", exposed_version)
implementation("org.jetbrains.exposed", "exposed-jdbc", exposed_version)
}


Exposed — это легковесная библиотека SQL поверх драйвера JDBC для Kotlin. Exposed имеет два варианта доступа к базам данных: облегченный ORM (с использованием DAO) и безопасный для типов SQL (с использованием DSL).

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

Поддерживает MariaDB, MySQL, Oracle, Postgres, SQLite, Microsoft SQL Server

🖥 GitHub