🖥 Compose Investigator — полезный инструмент для Android-разработчика
Compose Investigator может выполнять следующие задачи:
🔵сообщает, если Composable пропущен во время рекомпозиции
🔵сообщает, если аргументы составного элемента изменились и были перекомпонованы. Он также может сравнить значения до и после изменения
🔵сообщает, были ли изменены значения состояния внутри Composable. Также можно сравнить значения до и после изменения
🔵получает стек вызовов, ведущий к вызову Composable. Это помогает определить конкретный Composable, который перекомпонуется, когда один и тот же Composable используется повторно в нескольких местах
🖥 GitHub
Compose Investigator может выполнять следующие задачи:
🔵сообщает, если Composable пропущен во время рекомпозиции
🔵сообщает, если аргументы составного элемента изменились и были перекомпонованы. Он также может сравнить значения до и после изменения
🔵сообщает, были ли изменены значения состояния внутри Composable. Также можно сравнить значения до и после изменения
🔵получает стек вызовов, ведущий к вызову Composable. Это помогает определить конкретный Composable, который перекомпонуется, когда один и тот же Composable используется повторно в нескольких местах
🖥 GitHub
🖥 𝗧𝗲𝘀𝘁𝗚𝗲𝗻-𝗟𝗟𝗠 для написания тестов Kotlin 💻
Meta разработала 𝗧𝗲𝘀𝘁𝗚𝗲𝗻-𝗟𝗟𝗠 — инструмент, использующий 2 LLM Meta, для дополнения существующих тестовых классов Kotlin для кода Android.
Цель 𝗧𝗲𝘀𝘁𝗚𝗲𝗻-𝗟𝗟𝗠 — генерировать дополнительные тестовые случаи, охватывающие ранее пропущенные сценарии, и улучшить общее покрытие тестами.
TestGen-LLM представляет собой пример гарантированной автономной разработки программного обеспечения на основе LLM (Assured Offline LLMSE), сфокусированной на внедрении LLM в более широкий рабочий процесс разработки программного обеспечения, чтобы рекомендовать комплексные улучшения программного обеспечения (и чтобы со временем заменить всех и захватить мир)
TestGen-LLM гарантирует, что сгенерированные тестовые классы не только корректно построены, но и надежно проходят все тесты, не внося ненужной "шелухи", и улучшают покрытие.
Это отличает TestGen-LLM от других методов генерации кода и тестов на основе LLM.
📁Подробнее можно ознакомиться в этой статьей Arxiv
Meta разработала 𝗧𝗲𝘀𝘁𝗚𝗲𝗻-𝗟𝗟𝗠 — инструмент, использующий 2 LLM Meta, для дополнения существующих тестовых классов Kotlin для кода Android.
Цель 𝗧𝗲𝘀𝘁𝗚𝗲𝗻-𝗟𝗟𝗠 — генерировать дополнительные тестовые случаи, охватывающие ранее пропущенные сценарии, и улучшить общее покрытие тестами.
TestGen-LLM представляет собой пример гарантированной автономной разработки программного обеспечения на основе LLM (Assured Offline LLMSE), сфокусированной на внедрении LLM в более широкий рабочий процесс разработки программного обеспечения, чтобы рекомендовать комплексные улучшения программного обеспечения (
TestGen-LLM гарантирует, что сгенерированные тестовые классы не только корректно построены, но и надежно проходят все тесты, не внося ненужной "шелухи", и улучшают покрытие.
Это отличает TestGen-LLM от других методов генерации кода и тестов на основе LLM.
📁Подробнее можно ознакомиться в этой статьей Arxiv
📱Android Studio Iguana стала стабильной
✨ На днях Google выпустил Android Studio Iguana в канале стабильных релизов. Благодаря таким функциям, как поддержка системы контроля версий в App Quality Insights, новой встроенной поддержки создания базовых профилей для приложений Jetpack Compose, эта версия должна улучшить ваш рабочий процесс разработки и оптимизировать ваши приложения.
Среди новых функций Android Studio Iguana:
*️⃣Интеграция системы контроля версий в App Quality Insights
*️⃣Просмотр вариантов сбоев Crashlytics в App Quality Insights
*️⃣Проверка доступности и адаптивности дизайна Jetpack Compose
*️⃣Прогрессивный рендеринг для предварительного просмотра Compose
*️⃣Обновленная платформа Intellij
*️⃣Шаблоны для Baseline Profiles
*️⃣Проверка изменений конфигурации с Espresso Device API
*️⃣Pixel 8 и Pixel 8 Pro в Android Emulator (34.2)
*️⃣Поддержка Gradle Version Catalogs
*️⃣Интеграция Google Play SDK Index
*️⃣Предупреждение о неподдерживаемой compileSdk
⏩Загрузите Android Studio Iguana уже сегодня...
✨ На днях Google выпустил Android Studio Iguana в канале стабильных релизов. Благодаря таким функциям, как поддержка системы контроля версий в App Quality Insights, новой встроенной поддержки создания базовых профилей для приложений Jetpack Compose, эта версия должна улучшить ваш рабочий процесс разработки и оптимизировать ваши приложения.
Среди новых функций Android Studio Iguana:
*️⃣Интеграция системы контроля версий в App Quality Insights
*️⃣Просмотр вариантов сбоев Crashlytics в App Quality Insights
*️⃣Проверка доступности и адаптивности дизайна Jetpack Compose
*️⃣Прогрессивный рендеринг для предварительного просмотра Compose
*️⃣Обновленная платформа Intellij
*️⃣Шаблоны для Baseline Profiles
*️⃣Проверка изменений конфигурации с Espresso Device API
*️⃣Pixel 8 и Pixel 8 Pro в Android Emulator (34.2)
*️⃣Поддержка Gradle Version Catalogs
*️⃣Интеграция Google Play SDK Index
*️⃣Предупреждение о неподдерживаемой compileSdk
⏩Загрузите Android Studio Iguana уже сегодня...
💻 Хорошо разбираешься в Kotlin? Готов по полочкам разложить, чем он отличается от Java? Проверь свои знания на этих 10 вопросах
⏩Что из этого в настоящее время не поддерживается в Kotlin?
[x] JVM
[x] JavaScript
[x] LLVM
[_] .NET CLR
⏩Какое выражение Kotlin эквивалентно такому
[x]
[x]
[x]
[_]
⏩Что применимо для следующего объявления класса?
[x] Он package-private
[x] Он может быть расширен другими классами
[_] Он public
[x] У него приватное свойство "name"
⏩Есть ли у Kotlin примитивные типы данных, такие как
[x] Нет, Kotlin не имеет и не использует примитивные типы данных.
[_] Нет, не на уровне языка. Но компилятор Kotlin использует примитивы JVM для лучшей производительности.
[x] Да, но Kotlin всегда конвертирует их в не примитивные аналоги.
[x] Да, Kotlin в этом отношении похож на Java.
⏩Что такое
[_] Инфиксная функция, создающая пару (33, 42)
[x] Ключевое слово Kotlin для создания пары (33, 42)
[x] Ключевое слово для создания диапазона от 33 до 42
[x] Опечатка
⏩Какое из объявлений функций является валидным?
[x]
[x]
[x]
[_]
⏩В чем ключевое отличие
[x]
[x] Нет никакой разницы, т. к.
[_] Последовательности обрабатываются лениво, итераторы жадно
[x] Последовательности обрабатываются по очереди, итераторы параллельно (многопоточно)
⏩Чего не предлагает
[x] Авто-генерируемый метод
[x] Метод
[_] Автоматическое преобразование из/в JSON
[x] Авто-генерируемые методы
⏩Что выведет следующий код?
[x]
[_]
[x] Ничего, тут ошибка компиляции
[x]
⏩В чем разница между
[x]
[x]
[x]
[_]
Ну как? 10 из 10?
⏩Что из этого в настоящее время не поддерживается в Kotlin?
⏩Какое выражение Kotlin эквивалентно такому
int x = a ? b : c
из Java?val x = a ?: b, c
val x = if (a) b : c
val x = a ? b : c
val x = if (a) b else c
⏩Что применимо для следующего объявления класса?
class Person (val name: String)
⏩Есть ли у Kotlin примитивные типы данных, такие как
int
, long
, float
?⏩Что такое
to
в этом ниже примере:val test = 33 to 42
⏩Какое из объявлений функций является валидным?
int sum(int a, int b)
int sum(a: Int, b: Int)
function sum(a: Int, b: Int): Int
fun sum(a: Int, b: Int): Int
⏩В чем ключевое отличие
Iterable<T>
и Sequence<T>
в Kotlin?Iterable<T>
работает только с immutable
коллекциями, Sequence<T>
применим к mutable
Sequence<T>
аналог Iterable<T>
⏩Чего не предлагает
dataclass
?toString()
copy(...)
, для создания копии экземпляров.hashCode()
и equals()
⏩Что выведет следующий код?
val listA = mutableListOf(1, 2, 3)
val listB = listA.add(4)
print(listB)
[1, 2, 3, 4]
True
Unit
⏩В чем разница между
a
и b
?
var a: String? = "KotlinQuiz"
var b: String = "KotlinQuiz"
a
является volatile
, как в Javab
является final
и не может быть измененоa
является final
и не может быть измененоb
никогда не сможет стать null
Ну как? 10 из 10?
📱 Apple пообещала упростить перенос данных с iPhone на Android-устройства в ЕС к осени 2025 года
Apple намерена упростить переход с iPhone на Android-устройства в соответствии с требованиями Закона о цифровых рынках ЕС, который уже вступил в силу.
Производитель изложил свой план относительно соблюдения нового закона ЕС в документе. Новое положение направлено на усилении конкуренции в экосистеме приложений и требует от Apple ослабления контроля над App Store и iOS.
Мера Apple должна помочь поставщикам других операционных систем создать более эффективные решения для передачи данных с iPhone на смартфон стороннего производителя. Корпорация не использует в документе название Android, однако мобильная ОС Google получит наибольшую выгоду от нововведения.
В конце 2024 года или начале 2025 года Apple также представит инструмент для экспорта данных браузера в новый браузер на том же устройстве.
В настоящее время пользователи Android могут использовать iOS-приложение —
Apple намерена упростить переход с iPhone на Android-устройства в соответствии с требованиями Закона о цифровых рынках ЕС, который уже вступил в силу.
Производитель изложил свой план относительно соблюдения нового закона ЕС в документе. Новое положение направлено на усилении конкуренции в экосистеме приложений и требует от Apple ослабления контроля над App Store и iOS.
Мера Apple должна помочь поставщикам других операционных систем создать более эффективные решения для передачи данных с iPhone на смартфон стороннего производителя. Корпорация не использует в документе название Android, однако мобильная ОС Google получит наибольшую выгоду от нововведения.
В конце 2024 года или начале 2025 года Apple также представит инструмент для экспорта данных браузера в новый браузер на том же устройстве.
В настоящее время пользователи Android могут использовать iOS-приложение —
Switch to Android
— для переноса важных дан...🖥 Package Search — крутой плагин для поиска библиотек для Java и Kotlin прямо из редактора.
По умолчанию он поддерживает поиск в следующих менеджерах пакетов:
По умолчанию он поддерживает поиск в следующих менеджерах пакетов:
Maven, Gradle и Amper.
📌 Github💻 Создание анонимного экземпляра интерфейса в Kotlin
▶️Если в двух словах, то для создания экземпляра анонимного интерфейса в Kotlin применяется объектное выражение. Определите интерфейс непосредственно при инициализации переменной так:
Здесь переменной
Далее указываем название интерфейса, а затем в фигурных скобках представляем реализацию необходимых функций с помощью переопределения.
📎 Читать подробнее
▶️Если в двух словах, то для создания экземпляра анонимного интерфейса в Kotlin применяется объектное выражение. Определите интерфейс непосредственно при инициализации переменной так:
val myInterfaceInstance = object : MyInterface {
override fun myFunction() {
// Ваш код здесь
}
}
myInterfaceInstance.myFunction()
Здесь переменной
myInterfaceInstance
мы присваиваем объект, используя ключевое слово object :
. Далее указываем название интерфейса, а затем в фигурных скобках представляем реализацию необходимых функций с помощью переопределения.
📎 Читать подробнее
Android 15 Developer Preview 2!
Google выпустили предварительную сборку Android 15 Developer Preview 2.
🔸 Добавлен интерфейс для работы с спутниковой связью. Теперь Android 15 поддерживает обмен сообщениями SMS, MMS и RCS через спутник.
🔸 Новый раздел - "Передача аудио". Предполагается, что пользователь сможет передавать звук через Bluetooth одновременно на несколько наушников и динамиков с поддержкой Bluetooth. Однако на данный момент эта функция не работает.
🔸 "Режим веб-камеры" теперь поддерживает режим HQ-качества изображения.
🔸 Обнаружение записи экрана. Теперь, если приложение записывает ваш экран, вы получите уведомление об этом.
🔸 В разделе "О приложении" появилась функция "Отправить в архив". Архивация позволяет освободить до 60% пространства, сохраняя личную информацию.
Более подробную информацию о других изменениях можно найти в блоге Google. Заводские образы доступны по ссылке (начиная с Pixel 6).
https://developer.android.com/about/versions/15/download
Google выпустили предварительную сборку Android 15 Developer Preview 2.
🔸 Добавлен интерфейс для работы с спутниковой связью. Теперь Android 15 поддерживает обмен сообщениями SMS, MMS и RCS через спутник.
🔸 Новый раздел - "Передача аудио". Предполагается, что пользователь сможет передавать звук через Bluetooth одновременно на несколько наушников и динамиков с поддержкой Bluetooth. Однако на данный момент эта функция не работает.
🔸 "Режим веб-камеры" теперь поддерживает режим HQ-качества изображения.
🔸 Обнаружение записи экрана. Теперь, если приложение записывает ваш экран, вы получите уведомление об этом.
🔸 В разделе "О приложении" появилась функция "Отправить в архив". Архивация позволяет освободить до 60% пространства, сохраняя личную информацию.
Более подробную информацию о других изменениях можно найти в блоге Google. Заводские образы доступны по ссылке (начиная с Pixel 6).
https://developer.android.com/about/versions/15/download
💻 Отличия Sequence API vs Collection в Kotlin
Держите хорошее объяснение отличий между 2 этими понятиями.
⏩В статье рассматриваются примеры, которые помогают визуализировать разницу между Sequence API и обычными коллекциями.
⏩Последовательность — это итерируемый тип, с которым можно работать, не создавая ненужных промежуточных коллекций.
⏩Sequence API в Kotlin могут обрабатывать данные более эффективно, чем обычные коллекции.
📎Читать подробнее: [ru], [en]
Держите хорошее объяснение отличий между 2 этими понятиями.
⏩В статье рассматриваются примеры, которые помогают визуализировать разницу между Sequence API и обычными коллекциями.
⏩Последовательность — это итерируемый тип, с которым можно работать, не создавая ненужных промежуточных коллекций.
⏩Sequence API в Kotlin могут обрабатывать данные более эффективно, чем обычные коллекции.
📎Читать подробнее: [ru], [en]
💻 Немного о конструкции when в Kotlin
⏩Конструкция
⏩Если значение объекта равно одному из значений в блоке кода
Здесь в качестве объекта в конструкцию
⏩Выражение else
В примере выше
⏩Конструкция
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...
Некоторые мысли из статьи, и о чём вообще в ней речь:
⏩Аудит приложения важен для выявления неявных деградаций в производительности.
⏩Написанный профайлер обладает рядом плюсов, таких как минимальное негативное влияние на производительность и гибкость в сборе метрик.
⏩Существующие инструменты Android Profile, Battery Historian и Systrace имеют свои минусы.
⏩В частности, Android Profiler имеет наглядные графики и обширный функционал, но у него отсутствует гибкость в сборке метрик.
⏩Systrace позволяет собирать и инспектировать время работы частей кода по всем процессам на девайсе.
⏩Battery Historian нужен для получения дополнительной информации по работе приложения, такой как процент потребления батарейки и условия, влияющие на потребление.
⏩В статье представлены коды для фиксации значений потребления CPU, памяти, сети и потребления батареи.
⏩Кастомное решение имеет ряд преимуществ по отношению к Android Prof...
Mobox — полезная утилита для запуска windows x86 приложений на Android.
Проект работает через Termux, используя Box64 и Wine. Имеет простой и быстрый процесс установки.
Проект работает через Termux, используя Box64 и Wine. Имеет простой и быстрый процесс установки.
💻 Запуск Kotlin кода без IDE
▶️Итак, вопрос: как скомпилировать простенький код написанный на Kotlin без IDE?
▶️Вот пошаговая инструкция:
⏩1. Загрузить компилятор. Найти последнюю версию можно здесь.
⏩2. Распаковать компилятор в отдельную папку, добавить
Другой вариант установки компилятора: для OS X, Linux, Cygwin, FreeBSD или Solaris (возможно, и другие UNIX-системы), то можно использовать SDKMAN https://sdkman.io/.
Запускаем в терминале:
Затем следуем инструкциям. Потом потребуется открыть новое окно терминала и установить Kotlin с помощью команды:
▶️Теперь кратко о создании и запуске простого приложения.
⏩1. Создаем файл - `hello.kt` со следующим кодом:
⏩2. Компилируем, используя командную строку:
▶️Итак, вопрос: как скомпилировать простенький код написанный на 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 разрешены и не ограничены регистром именования
⏩Использование оператора
⏩Оператор
📎 Статья
Держите полезную статью о том, как можно нестандартно использовать функции верхнего уровня в Kotlin. О чём пойдёт речь в статье?
⏩В Kotlin возможны конструкции, которые могут выглядеть как вызовы конструкторов, но не являются таковыми
⏩Функции верхнего уровня в Kotlin разрешены и не ограничены регистром именования
⏩Использование оператора
Companion.invoke()
может быть полезно для контроля создания объектов в статическом контексте⏩Оператор
receiver(Context) Companion.invoke()
позволяет делегировать создание объектов в локальном контексте📎 Статья
💻 Kotlin Coding Conventions
Соглашения в сфере разработки призваны помочь разработчикам писать понятный друг для друга код, в статье речь именно об этом.
Если вы только переходите от написания пет-проектов к работе над чем-то более серьёзным — загляните по ссылке в конце
Затрагиваются такие очевидные и не совсем вещи:
⏩Правила форматирования кода, отступы, фигурные скобки, использование замыкающих запятых
⏩Комментарии к документации, использование иммутабельных данных и значения параметров по умолчанию
⏩Особенности Kotlin, такие как использование именованных аргументов и условных операторов
⏩Рекомендации по использованию функций расширения, инфиксных функций и фабричных функций
Пишите код и помните: однажды работать с ним будет маньяк, который знает, где вы живёте)
📎 Читать
Соглашения в сфере разработки призваны помочь разработчикам писать понятный друг для друга код, в статье речь именно об этом.
Если вы только переходите от написания пет-проектов к работе над чем-то более серьёзным — загляните по ссылке в конце
Затрагиваются такие очевидные и не совсем вещи:
⏩Правила форматирования кода, отступы, фигурные скобки, использование замыкающих запятых
⏩Комментарии к документации, использование иммутабельных данных и значения параметров по умолчанию
⏩Особенности Kotlin, такие как использование именованных аргументов и условных операторов
⏩Рекомендации по использованию функций расширения, инфиксных функций и фабричных функций
Пишите код и помните: однажды работать с ним будет маньяк, который знает, где вы живёте)
📎 Читать