# LineageOS

LineageOS is a free and open source operating system for smartphones and tablet computers, based on the Android mobile platform.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Native Drag and Drop Meets Cross-Device Continuity

DevFeed: [Native Drag and Drop Meets Cross-Device Continuity](<https://devfeed.tech/articles/native-drag-and-drop-meets-cross-device-continuity-26579.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/continuity-restoring-work/>)

Author: Shai Almog

Published: 2026-09-15T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [payload](<https://devfeed.tech/topics/payload.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apis](<https://devfeed.tech/tags/apis.md>), [browser](<https://devfeed.tech/tags/browser.md>), [java](<https://devfeed.tech/tags/java.md>), [native](<https://devfeed.tech/tags/native.md>), [payload](<https://devfeed.tech/tags/payload.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [process](<https://devfeed.tech/tags/process.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>)

### AI overview

Codename One adds cross-device continuity and native drag-and-drop through shared Java APIs. The article explains how to save reconstructible application state, restore it after account verification, and transfer it between devices and applications.

### Source excerpt

Drag files into another application and pick up a task on another device. Codename One adds native drag and drop and cross-device continuity through shared Java APIs.

## CarPlay And Android Auto From One Codename One API

DevFeed: [CarPlay And Android Auto From One Codename One API](<https://devfeed.tech/articles/carplay-and-android-auto-from-one-codename-one-api-19240.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/carplay-android-auto-codename-one/>)

Author: Shai Almog

Published: 2026-07-04T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>)

Tags: [android-auto](<https://devfeed.tech/tags/android-auto.md>), [api](<https://devfeed.tech/tags/api.md>), [app](<https://devfeed.tech/tags/app.md>), [apple](<https://devfeed.tech/tags/apple.md>), [google](<https://devfeed.tech/tags/google.md>)

### AI overview

Codename One adds Apple CarPlay and Google Android Auto support through a portable, template-based API. The build system injects platform-specific wiring only when car support is used, while navigation surfaces remain partly incomplete and deployment still requires platform approval and relevant entitlements.

### Source excerpt

Codename One now projects driver-safe app screens to Apple CarPlay and Google Android Auto through one portable template API.

## A rigged game: ScarCruft compromises gaming platform in a supply-chain attack

DevFeed: [A rigged game: ScarCruft compromises gaming platform in a supply-chain attack](<https://devfeed.tech/articles/a-rigged-game-scarcruft-compromises-gaming-platform-in-a-supply-chain-attack-8381.md>)

Original publisher: [Read original article](<https://www.welivesecurity.com/en/eset-research/rigged-game-scarcruft-compromises-gaming-platform-supply-chain-attack/>)

Author: Filip Jurčacko

Published: 2026-05-05T08:55:27Z

Content type: article

Language: en

Sources: [WeLiveSecurity](<https://devfeed.tech/sources/welivesecurity.md>)

Topics: [Threat Research](<https://devfeed.tech/topics/threat-research.md>), [backdoor](<https://devfeed.tech/topics/backdoor.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Windows](<https://devfeed.tech/topics/windows.md>), [High Profile Threats](<https://devfeed.tech/topics/high-profile-threats.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Python](<https://devfeed.tech/topics/python.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [china](<https://devfeed.tech/tags/china.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [data](<https://devfeed.tech/tags/data.md>), [eset-research](<https://devfeed.tech/tags/eset-research.md>), [gaming](<https://devfeed.tech/tags/gaming.md>), [government](<https://devfeed.tech/tags/government.md>), [logging](<https://devfeed.tech/tags/logging.md>), [platform](<https://devfeed.tech/tags/platform.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>), [voice](<https://devfeed.tech/tags/voice.md>), [windows](<https://devfeed.tech/tags/windows.md>)

### AI overview

ESET researchers describe a ScarCruft supply-chain attack that trojanized Windows and Android components of a Yanbian-themed gaming platform. The BirdCall backdoor supports espionage capabilities including collecting data and documents, screenshots, and voice recordings.

### Source excerpt

ESET researchers have investigated an ongoing attack by the ScarCruft APT group that targets the Yanbian region via backdoor-laced Windows and Android games

## GPU Driver Attacks on Android and Their Mitigation in KasperskyOS

DevFeed: [GPU Driver Attacks on Android and Their Mitigation in KasperskyOS](<https://devfeed.tech/articles/iommu-23096.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/kaspersky/articles/992032/>)

Author: denis\_molodyakov ("Лаборатория Касперского")

Published: 2026-02-25T15:14:03Z

Content type: tutorial

Language: ru

Sources: ["Лаборатория Касперского" RU](<https://devfeed.tech/sources/ru-2.md>)

Topics: [GPU](<https://devfeed.tech/topics/gpu.md>), [Security](<https://devfeed.tech/topics/security.md>), [SELinux](<https://devfeed.tech/topics/selinux.md>), [Arm](<https://devfeed.tech/topics/arm.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [arm](<https://devfeed.tech/tags/arm.md>), [dma](<https://devfeed.tech/tags/dma.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [iommu](<https://devfeed.tech/tags/iommu.md>), [kasperskyos](<https://devfeed.tech/tags/kasperskyos.md>), [security](<https://devfeed.tech/tags/security.md>), [selinux](<https://devfeed.tech/tags/selinux.md>), [tag-33729a63fe14](<https://devfeed.tech/tags/tag-33729a63fe14.md>), [tag-a6bf72199ce9](<https://devfeed.tech/tags/tag-a6bf72199ce9.md>), [tag-c87ceb311a81](<https://devfeed.tech/tags/tag-c87ceb311a81.md>), [tag-cc2a6346d835](<https://devfeed.tech/tags/tag-cc2a6346d835.md>)

### AI overview

This article explains attacks against GPU drivers, focusing on Android devices with integrated ARM Mali accelerators. It describes memory-management and use-after-free attack cases, including one that could enable full device access and disable SELinux, and discusses how similar scenarios are mitigated in the microkernel-based KasperskyOS.

### Source excerpt

Что вы знаете об атаках на графические процессоры? Наверняка ничего приятного: они крайне распространены на мобильных устройствах, классические "песочницы" от них не защищают, и компрометация лишь одного драйвера может поставить под угрозу все ядро... Меня зовут Денис Молодяков, и я -- лид команды графики в KasperskyOS. Идея этого текста возникла во время одного моего выступления на конференции по системной разработке. Тогда из зала задали вопрос, который касался безопасности работы драйверов GPU. Слушатель ссылался на кейсы с "подламыванием" механизма управления видеопамятью драйверов на Android для интегрированных ускорителей семейства ARM Mali и спросил, как наша ОС сможет этому противостоять. Поэтому в данном материале я подробно расскажу о сути этой коварной атаки, а также рассмотрю и другие типы атак через GPU. В заключение я смоделирую подобные сценарии для нашей микроядерной KasperskyOS и покажу, как мы их митигируем. Читать далее

## Android Theft Protection Updates Add Authentication Controls and Recovery Safeguards

DevFeed: [Android Theft Protection Updates Add Authentication Controls and Recovery Safeguards](<https://devfeed.tech/articles/new-android-theft-protection-feature-updates-smarter-stronger-19811.md>)

Original publisher: [Read original article](<http://security.googleblog.com/2026/01/android-theft-protection-feature-updates.html>)

Author: Edward Fernandez (noreply@blogger.com)

Published: 2026-01-27T16:59:00Z

Content type: release

Language: en

Sources: [Google Online Security](<https://devfeed.tech/sources/google-online-security.md>)

Topics: [Android Security](<https://devfeed.tech/topics/android-security.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Security](<https://devfeed.tech/topics/security.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [passwords](<https://devfeed.tech/topics/passwords.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [android](<https://devfeed.tech/tags/android.md>), [android-security](<https://devfeed.tech/tags/android-security.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [banking](<https://devfeed.tech/tags/banking.md>), [brazil](<https://devfeed.tech/tags/brazil.md>), [browser](<https://devfeed.tech/tags/browser.md>), [feature](<https://devfeed.tech/tags/feature.md>), [none](<https://devfeed.tech/tags/none.md>), [password](<https://devfeed.tech/tags/password.md>), [recovery](<https://devfeed.tech/tags/recovery.md>), [security](<https://devfeed.tech/tags/security.md>), [time](<https://devfeed.tech/tags/time.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

Google announces Android theft protection updates including more control over Failed Authentication Lock, expanded Identity Check coverage, longer lockout times after failed screen-lock attempts, and an optional security challenge for Remote Lock.

### Source excerpt

Posted by Nataliya Stanetsky, Fabricio Ferracioli, Elliot Sisteron, Irene Ang of the Android Security Team Phone theft is more than just losing a device; it's a form of financial fraud that can leave you suddenly vulnerable to personal data and financial theft. That's why we're committed to providing multi-layered defenses that help protect you before, during, and after a theft attempt. Today, we're announcing a powerful set of theft protection feature updates that build on our existing protections, designed to give you greater peace of mind by making your device a much harder target for criminals. Stronger Authentication Safeguards We've expanded our security to protect you against an even wider range of threats. These updates are now available for Android devices running Android 16+. More User Control for Failed Authentications: In Android 15, we launched Failed Authentication Lock, a feature that automatically locks the device's screen after excessive failed authentication attempts. This feature is now getting a new dedicated enable/disable toggle in settings, giving you more granular control over your device's security. Expanding Identity Check to cover more: Early in 2025, we enabled Identity Check for Android 15+, which requires the user to utilize biometrics when performing certain actions outside of trusted places. Later in the year, we extended this safeguard to cover all features and apps that use the Android Biometric Prompt. This means that critical tools that utilize Biometric Prompt, like third-party banking apps and Google Password Manager, now automatically benefit from the additional security of Identity Check. Stronger Protection Against Screen Lock Guessing: We're making it much harder for a thief to guess your PIN, pattern, or password by increasing the lockout time after failed attempts. To ensure you aren't locked out by mistake (by a curious child, for instance), identical incorrect guesses no longer count toward your retry limit. Enhanced Rec

## Why I still podcast for Fragmented

DevFeed: [Why I still podcast for Fragmented](<https://devfeed.tech/articles/why-i-still-podcast-for-fragmented-25247.md>)

Original publisher: [Read original article](<https://kau.sh/blog/fragmented-10/>)

Author: Kaushik Gopal

Published: 2025-04-08T14:58:03Z

Content type: opinion

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [learning](<https://devfeed.tech/tags/learning.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [podcast](<https://devfeed.tech/tags/podcast.md>)

### AI overview

The author explains why they continue producing the Fragmented podcast: listener feedback about its impact on developers and the motivation and learning gained from researching topics and interviewing experts.

### Source excerpt

When you've been doing a podcast for so long and it's a pure labor of love -time and again- you start to ask yourself: why am I doing this again? This is a note for myself and others, who sometimes worry about the podcast. Positive listener feedback ## Probably, the single most influential reason for doing it is those 2 or 3 notes or messages I get over the year when someone says that the podcast helped change the course of their life as a developer. I'll be honest. I didn't think that would be the reason, when I started. I couldn't fathom it would have that effect on me if I'm being even more honest. But every time I've hit a slump, it takes one email, a YouTube comment or a random tweet or Bluesky post to just reinject that dose of enthusiasm I need, to keep going. I've had some incredible people with incredible stories write to me saying - they didn't have money to be a developer and they used the podcast to learn while they saved up to eventually buy a phone. The only phone they could buy was an Android one and that allowed them to build their very first app and get a job in the process. Some have even written about being the first person in their family to use a computer and become a mobile developer by listening to Fragmented. I've had folks tell me they managed to get the dream jobs of their life because of the topics we covered and them being able to get through interviews because of that knowledge. I've had others write in saying they got promoted as a mobile developer, because of ideas they got listening to the podcast landing the impact and convincing their bosses. I'm really not trying to sound more important here but even getting one of those messages, even the simple thanks for doing this! immediately gives me a kick in the butt. We're all searching for purpose and meaning. Being able to help people in this small way is a privilege, I don't take lightly. My own learning ## But to say, I only do this for the people would be disingenuous. The second most

## Room Debug DAOs in Android: Streamlining Your Workflow

DevFeed: [Room Debug DAOs in Android: Streamlining Your Workflow](<https://devfeed.tech/articles/room-debug-daos-in-android-streamlining-your-workflow-24915.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/room-debug-daos-in-android-streamlining-your-workflow/>)

Author: blundell

Published: 2025-02-22T20:53:27Z

Content type: tutorial

Language: en

Sources: [Blundell](<https://devfeed.tech/sources/blundell.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [database](<https://devfeed.tech/tags/database.md>), [debug](<https://devfeed.tech/tags/debug.md>), [debug-tools](<https://devfeed.tech/tags/debug-tools.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-androiddev-database-debug-tools-room](<https://devfeed.tech/tags/reference-androiddev-database-debug-tools-room.md>), [room](<https://devfeed.tech/tags/room.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial explains how to create debug-only Room DAOs in Android using separate debug and release source sets. The approach adds developer-focused database operations, such as deleting all cached items, to debug builds while keeping them unavailable in production builds.

### Source excerpt

This blog post explains how to create Room DAOs specifically for your Android debug build. These debug-only DAOs enable you to implement developer-centric features without affecting your production app. Keeping your codebase clean is essential for long-term maintainability. Debug-only DAOs help achieve this by isolating developer tools from user-facing features. Consider an app that caches [...] The post Room Debug DAOs in Android: Streamlining Your Workflow first appeared on Blundell.

## How Field Names Affect Performance in Android ART

DevFeed: [How Field Names Affect Performance in Android ART](<https://devfeed.tech/articles/naming-is-hard-25602.md>)

Original publisher: [Read original article](<https://www.romainguy.dev/posts/2024/naming-is-hard/>)

Author: Romain Guy

Published: 2024-12-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Romain Guy](<https://devfeed.tech/sources/posts-on-romain-guy.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Code](<https://devfeed.tech/topics/code.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [cache](<https://devfeed.tech/tags/cache.md>), [code](<https://devfeed.tech/tags/code.md>), [developer](<https://devfeed.tech/tags/developer.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

This article explains how field naming can affect object field layout and memory-access performance in Android's Android Runtime (ART). In the supplied benchmark, renaming a field made the code 40% faster, because the fields were placed at different memory offsets and could trigger an L1 cache miss.

### Source excerpt

Before we dive into today's topic, I would like to make it clear that what follows is specific to how Android, and more precisely the Android RunTime (ART), works. Some of what follows applies to other environments as well, but the main twist is about Android. If you have read my previous articles, you should know by now that seemingly small or irrelevant changes can have a large impact on performance. So let's look at another one! We'll start our journey with a class containing a bunch of fields. What they are and what they mean isn't really relevant for now, let's just imagine we are dealing with a fairly large object1:

## How to force update (& test) your Android app using Google's in-app update library

DevFeed: [How to force update (& test) your Android app using Google's in-app update library](<https://devfeed.tech/articles/how-to-force-update-test-your-android-app-using-google-s-in-app-update-library-38571.md>)

Original publisher: [Read original article](<https://blog.jakelee.co.uk/googles-force-update-android-app-library/>)

Author: Jake Lee

Published: 2024-11-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jake Lee's Programming Blog](<https://devfeed.tech/sources/jake-lee-s-programming-blog.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>), [Google](<https://devfeed.tech/topics/google.md>), [callback](<https://devfeed.tech/topics/callback.md>), [Code](<https://devfeed.tech/topics/code.md>), [Users](<https://devfeed.tech/topics/users.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [callback](<https://devfeed.tech/tags/callback.md>), [code](<https://devfeed.tech/tags/code.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [google](<https://devfeed.tech/tags/google.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [version](<https://devfeed.tech/tags/version.md>)

### AI overview

A Kotlin-focused tutorial on using Google's Android in-app updates library to implement mandatory immediate updates, including Gradle setup, update checks, dialog handling, callbacks, and app closure when the user cancels.

### Source excerpt

Earlier this year, I needed to add the ability to force update users of an app. Whilst I've used custom solutions in the past, Google has a standardised "in-app updates" library that does all the essentials for you!

## Coroutine Testing

DevFeed: [Coroutine Testing](<https://devfeed.tech/articles/coroutine-testing-25239.md>)

Original publisher: [Read original article](<https://kau.sh/blog/coroutine-testing/>)

Author: Kaushik Gopal

Published: 2024-08-25T07:00:45Z

Content type: tutorial

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutine-testing](<https://devfeed.tech/tags/coroutine-testing.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [dispatcher](<https://devfeed.tech/tags/dispatcher.md>), [flaky](<https://devfeed.tech/tags/flaky.md>), [junit](<https://devfeed.tech/tags/junit.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration-guide](<https://devfeed.tech/tags/migration-guide.md>), [testing](<https://devfeed.tech/tags/testing.md>), [time](<https://devfeed.tech/tags/time.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

A tutorial series on testing Kotlin coroutines in Android applications. It discusses changes to Kotlin testing APIs, unreliable virtual-time advancement, flaky tests, dispatchers, background scopes, and controlling time.

### Source excerpt

When the #androiddevs transitioned from Rx to coroutines the topic of testing didn't get as much attention in this new world of concurrency. It didn't help that there was a seismic change in Kotlin's testing apis with 1.6.0. A whole bunch of online resources and tutorials are now defunct courtesy this change.1 My journey in the matter started because I simply couldn't understand why test apis like advanceTimeBy wouldn't work reliably for me. The name made sense... but my time wasn't being advanced in any meaningful way. Then there's the issue of flaky tests. Here's an example: flaky test code on github Run each test individually and it will pass; run them together as one test suite and test2 alone will fail. test1 passes but it takes a full 3s to run the test. If I have 300 of these in my app, are my tests going to take 15 minutes to run? I needed to understand many core concepts in order to confidently explain all the above phenomena. I'd like to share my learnings from going down the rabbit hole, in this series of posts: series This is part of a series of posts on Coroutine Testing: <- Picking the right Dispatcher Never ending tests & backgroundscope Controlling time Helpful @Junit TestRule extension (coming soon) Full USF example for Android (coming soon) If you're looking for the most current and useful resources on coroutine testing today: Untangling Coroutine Testing - Marton Braun jetbrains official docs developer.android.com docs 1.6.0 Coroutines test migration guide ↩︎

## SharedFlow vs StateFlow

DevFeed: [SharedFlow vs StateFlow](<https://devfeed.tech/articles/sharedflow-vs-stateflow-39374.md>)

Original publisher: [Read original article](<https://kt.academy/article/sharedflow_vs_stateflow>)

Published: 2024-06-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [backend](<https://devfeed.tech/tags/backend.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [messages](<https://devfeed.tech/tags/messages.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [progress](<https://devfeed.tech/tags/progress.md>), [service](<https://devfeed.tech/tags/service.md>), [sharedflow](<https://devfeed.tech/tags/sharedflow.md>), [state](<https://devfeed.tech/tags/state.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [users](<https://devfeed.tech/tags/users.md>), [value](<https://devfeed.tech/tags/value.md>), [websocket](<https://devfeed.tech/tags/websocket.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains the distinction between Kotlin's StateFlow and SharedFlow. StateFlow represents observable application state, while SharedFlow broadcasts events to observers. It discusses replay, required initial values, distinct updates, conflation, and examples for Android and backend services.

### Source excerpt

When to use SharedFlow and when to use StateFlow.

## OCR with Gemini LLM on Android

DevFeed: [OCR with Gemini LLM on Android](<https://devfeed.tech/articles/ocr-with-gemini-llm-on-android-24912.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/ocr-with-gemini-llm-on-android/>)

Author: blundell

Published: 2024-04-06T13:44:56Z

Content type: tutorial

Language: en

Sources: [Blundell](<https://devfeed.tech/sources/blundell.md>)

Topics: [AI Models](<https://devfeed.tech/topics/ai-models.md>), [API](<https://devfeed.tech/topics/api.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Google](<https://devfeed.tech/topics/google.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [multimodal](<https://devfeed.tech/topics/multimodal.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [generative](<https://devfeed.tech/tags/generative.md>), [generative-ai](<https://devfeed.tech/tags/generative-ai.md>), [google](<https://devfeed.tech/tags/google.md>), [google-gemini](<https://devfeed.tech/tags/google-gemini.md>), [images](<https://devfeed.tech/tags/images.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [llm](<https://devfeed.tech/tags/llm.md>), [multimodal](<https://devfeed.tech/tags/multimodal.md>), [recognition](<https://devfeed.tech/tags/recognition.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-android-gemini-llm](<https://devfeed.tech/tags/reference-android-gemini-llm.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

A quick introduction to setting up the Gemini API client SDK on Android for optical character recognition on images. The article explains using Gemini's multimodal models, API keys, Gradle dependencies, and image prompts to automate detection of high temperatures or increased power consumption.

### Source excerpt

This artical is a quick introduction into setting up the Gemini API client SDK on Android to perform Optical Character Recognition (OCR) on images. Let's jump straight in: The Gemini API gives you access to the latest generative AI models from Google. Gemini is a series of multimodal generative AI models developed by Google. Gemini [...] The post OCR with Gemini LLM on Android first appeared on Blundell.

## Year in Review - 2023 Edition

DevFeed: [Year in Review - 2023 Edition](<https://devfeed.tech/articles/year-in-review-2023-edition-38469.md>)

Original publisher: [Read original article](<https://eevis.codes/blog/2023-12-29/year-in-review-2023-edition/>)

Author: Eevis Panula

Published: 2023-12-29T04:37:32.775000Z

Content type: article

Language: en

Sources: [Eevis Blog](<https://devfeed.tech/sources/eevis-blog.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Hackathon](<https://devfeed.tech/topics/hackathon.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [community](<https://devfeed.tech/tags/community.md>), [conferences](<https://devfeed.tech/tags/conferences.md>), [developer](<https://devfeed.tech/tags/developer.md>), [hackathon](<https://devfeed.tech/tags/hackathon.md>), [podcasts](<https://devfeed.tech/tags/podcasts.md>), [speaking](<https://devfeed.tech/tags/speaking.md>), [year-in-review](<https://devfeed.tech/tags/year-in-review.md>)

### AI overview

A personal review of 2023 covering the author's accomplishments, including second place in the WWCode App Deploy hackathon, completion of the Women Developer Academy, organizing an Android study group, podcast appearances, and speaking engagements.

### Source excerpt

Another year, another Year in Review blog post! When I started listing things from 2023, I realized a lot had happened. And I probably don't even remember everything. I've written similar posts before, and you can find them from: Year in Review - 2021 Edition Year in Review - 2022 Edition Accomplishments There are so many things I've accomplished this year. One of them is surviving through the year. It has been one of the most challenging years so far. But more about that later. My latest accomplishment was winning 2nd place in the WWCode App Deploy hackathon. I was so proud of the app, and even more proud when I got the letter that they selected my app as second best. If you want to know more about the app, I wrote a blog post: How My App Won the 2nd Place in the WWCode App Deploy Hackathon. Another thing I want to mention was completing the Women Developer Academy in October. I'm so happy about meeting all the people and getting to know them. I also can't wait for all the future conferences and other events where we'll meet in person! I wrote a blog post about my experiences: Women Developer Academy Europe 2023 - My Experience During the fall, we organized a study group for learning Android with my colleague at Oura. It was for a Finnish organization called Mimmit Koodaa (Women Code would be the literal translation), and we got a great group of Android newbies joining us throughout the months. Even though fall turned out to be full of events and other things, I'm happy that we got to organize this study group. Another notable thing is that I was a guest on two podcasts: Tech Talks with Madona and Women Who Code podcast. It was so fun to record both of them! I recommend checking both podcasts out (not just the episodes I'm in); there are so many gems in the episodes. Finally, I'm Dev Top Author for the second year in a row! Dev has always been a dear community to me, as it has been so welcoming and inclusive, so this is an honor. Speaking In 2023, I did more in-per

## Keeping Up with Android App Size Growth

DevFeed: [Keeping Up with Android App Size Growth](<https://devfeed.tech/articles/keeping-up-with-android-app-size-growth-15735.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/keeping-up-with-android-app-size-growth>)

Author: Justin Wong

Published: 2023-06-27T06:00:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [APK](<https://devfeed.tech/topics/apk.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-bundle](<https://devfeed.tech/tags/android-app-bundle.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [apk](<https://devfeed.tech/tags/apk.md>), [app-size](<https://devfeed.tech/tags/app-size.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [mobile-apps](<https://devfeed.tech/tags/mobile-apps.md>), [pipeline](<https://devfeed.tech/tags/pipeline.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

Square describes how it manages Android app size growth across a monorepo by applying size-reduction techniques, tracking changes in continuous integration, and improving team accountability. The post also covers automation and tools for identifying savings and comparing APK versions.

### Source excerpt

Tracking app size changes in CI and ensuring team accountability

## State holders and state production in the UI Layer

DevFeed: [State holders and state production in the UI Layer](<https://devfeed.tech/articles/state-holders-and-state-production-in-the-ui-layer-35679.md>)

Original publisher: [Read original article](<https://manuelvivo.dev/state-holders-ui-layer>)

Author: Manuel Vivo

Published: 2022-10-25T00:00:01Z

Content type: tutorial

Language: en

Sources: [Manuel Vivo .dev](<https://devfeed.tech/sources/manuel-vivo-dev.md>)

Topics: [ui](<https://devfeed.tech/topics/ui.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Development](<https://devfeed.tech/topics/development.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [screen](<https://devfeed.tech/topics/screen.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [dev](<https://devfeed.tech/tags/dev.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>), [talk](<https://devfeed.tech/tags/talk.md>), [talks](<https://devfeed.tech/tags/talks.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

An Android Dev Summit 2022 talk about producing UI state and managing UI complexity with state holders. It explains the differences between UI and business logic, ViewModels and plain state holder classes, and state versus events.

### Source excerpt

Android Dev Summit 2022 talk

## Unconfined Enums Adapter for Moshi

DevFeed: [Unconfined Enums Adapter for Moshi](<https://devfeed.tech/articles/unconfined-enums-adapter-for-moshi-25914.md>)

Original publisher: [Read original article](<https://medium.com/@xxfast/unconfined-enums-adapter-for-moshi-5d84542c8bf0?source=rss-43bae76e8f81------2>)

Author: Isuru Rajapakse

Published: 2022-05-11T12:08:49Z

Content type: tutorial

Language: en

Sources: [Stories by Isuru Rajapakse on Medium](<https://devfeed.tech/sources/stories-by-isuru-rajapakse-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [API](<https://devfeed.tech/topics/api.md>), [enum](<https://devfeed.tech/topics/enum.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [enum](<https://devfeed.tech/tags/enum.md>), [enum-class](<https://devfeed.tech/tags/enum-class.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [moshi](<https://devfeed.tech/tags/moshi.md>), [retrofit](<https://devfeed.tech/tags/retrofit.md>)

### AI overview

This tutorial presents a Kotlin pattern for handling previously unknown enum-like values from REST APIs with Moshi. It explains Moshi enum adapters, the unknown-value fallback, and an interface-based approach that preserves the server's raw value instead of mapping it only to a generic unknown value.

### Source excerpt

If you wonder what an Unconfined Enum is, wonder no more because it is a thing I just made up. Enums by definition are confined, or finite. Therefore "unconfined enum" is really an oxymoron. Nevertheless, say you have this Fruit enum and want to map each value to an Android string resource. Kotlin's enum properties make this convenient enum class Fruit(@StringRes val stringRes: Int) { Apple(R.string.fruit_apple), Oranges(R.string.fruit_orange) } When we want to consume this enum from a Restful API with a Moshi converter, Moshi automatically generates the enum adapter for you, but if you want to customise the behaviour for whatever reason, you can do object FruitsAdapter { @ToJson fun toJson(type: Fruit): String = type.name @FromJson fun fromJson(name: String): Fruit = Fruit.values().first { it.name == name } } Happy days. Everything is working as expected. When things go bananascom.squareup.moshi.JsonDataException: Expected one of [Apple, Oranges] but was Bananas at path $ Good APIs don't break contracts. Not all APIs are good APIs, so some can break contracts. What do we do now? push out an update with added enum value and its string resource? Perhaps we can make use of EnumJsonAdapter's .withUnknownFallBack() enum class Fruit(@StringRes val stringRes: Int) { Apple(R.string.fruit_apple), Oranges(R.string.fruit_orange), Unknown(R.string.fruit_unknown) } Moshi.Builder() .add(KotlinJsonAdapterFactory()) .add(Fruit::class.java, EnumJsonAdapter.create(Fruit::class.java) .withUnknownFallback(Fruit.Unknown)) .build() This certainly stops the app from crashing, but what if we actually want to show the "bananas" that the API sends? you know, as a fail safe so that users wouldn't end up seeing "unknowns". Let's open up the Enums Enums are by definition finite. Enums are final by design. Enums can't be subclassed but they still can inherit interfaces. We will exploit this to create our "unconfined" enum interface Fruit { val name: String data class Unknown(override val name:

## Measuring Android Build Times with Reproducible Benchmarks

DevFeed: [Measuring Android Build Times with Reproducible Benchmarks](<https://devfeed.tech/articles/measure-measure-measure-15764.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/measure-measure-measure>)

Author: Ralf Wondratschek

Published: 2021-09-28T19:00:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [ci](<https://devfeed.tech/topics/ci.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>), [Amazon EC2](<https://devfeed.tech/topics/amazon-ec2.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [build](<https://devfeed.tech/tags/build.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [cache](<https://devfeed.tech/tags/cache.md>), [ci](<https://devfeed.tech/tags/ci.md>), [ec2](<https://devfeed.tech/tags/ec2.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>)

### AI overview

This article describes how to measure Android build times using reproducible benchmarks instead of relying only on Gradle build scans. The benchmarks run offline with a prefetched artifact cache, use Gradle Profiler to warm up and measure builds, and apply incremental Kotlin and Java changes. A daily EC2 pipeline reports results to a backend and dashboard, helping identify tooling improvements and regressions.

### Source excerpt

A journey about how to measure build times for Android

## 10 Steps to Translate Your iOS Designs for Android

DevFeed: [10 Steps to Translate Your iOS Designs for Android](<https://devfeed.tech/articles/10-steps-to-translate-your-ios-designs-for-android-29321.md>)

Original publisher: [Read original article](<https://material.io/blog/ten-steps-ios-android-design>)

Published: 2021-04-16T13:00:00Z

Content type: tutorial

Language: en

Sources: [Material.io - Material Design](<https://devfeed.tech/sources/material-io-material-design.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>)

### AI overview

The article outlines ten steps for adapting iOS designs for Android.

### Source excerpt

How to bring your iOS experiences to Android in record time

## Intercept and edit HTTP traffic from (almost) any Android app

DevFeed: [Intercept and edit HTTP traffic from (almost) any Android app](<https://devfeed.tech/articles/intercept-and-edit-http-traffic-from-almost-any-android-app-19076.md>)

Original publisher: [Read original article](<https://httptoolkit.com/blog/inspect-any-android-apps-http/>)

Author: HTTP Toolkit; Tim Perry

Published: 2021-03-24T17:00:00Z

Content type: tutorial

Language: en

Sources: [HTTP Toolkit](<https://devfeed.tech/sources/http-toolkit.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Emulator](<https://devfeed.tech/topics/emulator.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [APK](<https://devfeed.tech/topics/apk.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [dev-tools](<https://devfeed.tech/topics/dev-tools.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [apk](<https://devfeed.tech/tags/apk.md>), [debug](<https://devfeed.tech/tags/debug.md>), [emulator](<https://devfeed.tech/tags/emulator.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [http](<https://devfeed.tech/tags/http.md>), [interception](<https://devfeed.tech/tags/interception.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

A step-by-step guide to intercepting and editing HTTP traffic from Android apps using a normal Android emulator, Android Studio, APK installation, and HTTP Toolkit. It explains why HTTPS traffic is difficult to inspect and describes emulator configuration requirements.

### Source excerpt

HTTP is used by almost all Android apps to request data, load content, and send changes to backend servers. If you can see and edit these requests & responses then you can understand, debug, and change how any app works, but Android makes this hard to do. By default, almost all apps will use HTTPS but won't trust user-installed certificates. This means that you can't see their traffic with simple proxy tools, and you can't manually trust HTTPS debugging proxies without either editing and rebuilding the entire app, or setting up your own rooted device. Fortunately, there's a quick & easy way around this: you can manually install official APKs into a normal Android emulator, which provides enough access that tools like HTTP Toolkit can capture all traffic for most apps for you totally automatically, and allow you to edit responses in just a couple of clicks. Let's walk through how to do that, step-by-step: Setting up the emulator To get started, you'll need an emulator. It is possible to create and start one using the Android SDK directly (see this article) but it's easiest to just install Android Studio, create an empty project, and use the developer tools provided there (if you're not familiar with these developer tools at all, there's an detailed official guide). To create an interceptable Android emulator, you should create an AVD, that: Can be any device model, though things may be smoother with a popular device like a Pixel 4. Uses an image matching your computer's architecture (ARM64 on M1/M2 Macs, x86_64 on most other computers) since the performance will be far better. Uses a relatively recent stable Android version - Android 7 to 13 should be fine. Uses a 'Google APIs' or 'Android Open Source Project' target image. The 'Google Play' target includes extra restrictions and is not easily interceptable. Once you've created your emulator, start it, and then we need to install the target app. Since we don't have Google Play, you can't do that from the normal app s

## Waldo's Android support handles mobile UI changes in recorded tests

DevFeed: [Waldo's Android support handles mobile UI changes in recorded tests](<https://devfeed.tech/articles/waldo-where-s-my-ui-25865.md>)

Original publisher: [Read original article](<https://dev.to/pyricau/waldo-where-s-my-ui-4p53>)

Author: Py ⚔

Published: 2021-01-27T19:41:44Z

Content type: opinion

Language: en

Sources: [Py ⚔](<https://devfeed.tech/sources/py.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [automated](<https://devfeed.tech/tags/automated.md>), [coding](<https://devfeed.tech/tags/coding.md>), [community](<https://devfeed.tech/tags/community.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [inclusive](<https://devfeed.tech/tags/inclusive.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [software](<https://devfeed.tech/tags/software.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [waldo](<https://devfeed.tech/tags/waldo.md>)

### AI overview

The article examines Waldo.io's Android support for no-code automated mobile tests. In an example project, recorded tests continued to select the intended tabs after navigation order, labels, IDs, and icons changed; when a tab was removed, updating the test adapted the scenario.

### Source excerpt

Today, Waldo.io, a no-code platform for automated mobile tests, announced general availability of their Android support. // Detect dark theme var iframe = document.getElementById('tweet-1354481799611736075-839'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1354481799611736075&theme=dark" } I was recently talking with the CEO of Waldo, Amine Bellakrid. I told him that the llama logo was super cute and the UI gorgeous... but I had doubts a no-code platform was a good fit for automated mobile tests. The problem with no-code tests No-code platforms typically provide a recorder tool that lets you navigate through the app, recording everywhere you tapped. Then later on you can replay the test automatically, and get notified when it fails. Automated tests are expected to fail when a change breaks the correct behavior of the app. Unfortunately, no-code platforms tend to generate brittle tests that also fail on small changes that didn't introduce incorrect behavior. This creates a lot of noise, so teams tend to stop updating and running these tests and they just rot in a corner. Note: similar problems can happen with code based tests, but we've introduced patterns to work around them (e.g. Testing Robots) Apparently Waldo is different When I shared my doubts, Amine smiled and said I should try Waldo. So I created a new example project with 3 tabs: I recorded a simple test on Waldo.io, tapping on the second tab (Dashboard) and then the 3rd tab (Notifications). Messing with Waldo Tab swap I started by swapping out the second and the third navigation tab: The result is interesting: Waldo clicked on the correct tab (Dashboard) even though it changed place, and the test passed. Changing strings Next, I renamed the Dashboard tab to Summary . Still ✅ . Changing everything else Ok, time to make this really hard. I also changed the tab menu id and its icon. No way this can still work. ... the test still passes a

## Implementing a Global try-catch for an Android Application

DevFeed: [Implementing a Global try-catch for an Android Application](<https://devfeed.tech/articles/implementing-a-global-try-catch-for-an-android-application-29051.md>)

Original publisher: [Read original article](<https://dmitrysamoylenko.com/2020/08/19/android_try_catch.html>)

Author: Dmitry Samoylenko

Published: 2020-08-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dmitry Samoylenko - Android Developer Blog](<https://devfeed.tech/sources/dmitry-samoylenko-android-developer-blog.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Java](<https://devfeed.tech/topics/java.md>), [Crashlytics](<https://devfeed.tech/topics/crashlytics.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [crashes](<https://devfeed.tech/tags/crashes.md>), [crashlytics](<https://devfeed.tech/tags/crashlytics.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [java](<https://devfeed.tech/tags/java.md>)

### AI overview

This Android tutorial explains how the ActivityThread and Looper architecture causes uncaught errors in activity or view callbacks to terminate an application. It presents a global error-handling approach that restarts the looper so the application can respond again, while recommending that caught crashes be sent to Firebase Crashlytics because they will no longer appear as standard crashes in Google Play reports.

### Source excerpt

Where in the Application is the main() Method Hidden?

## VESIT: Building Apps For Android in Kotlin

DevFeed: [VESIT: Building Apps For Android in Kotlin](<https://devfeed.tech/articles/vesit-building-apps-for-android-in-kotlin-28391.md>)

Original publisher: [Read original article](<https://siddroid.com/post/talk-building-apps-for-android-in-kotlin-vesit-cmpn-siddhesh-patil/>)

Author: Siddhesh Patil

Published: 2020-08-07T19:41:44Z

Content type: article

Language: en

Sources: [Sid Patil - Android Engineer and Kotlin Advocate](<https://devfeed.tech/sources/sid-patil-android-engineer-and-kotlin-advocate.md>)

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [app-architecture](<https://devfeed.tech/tags/app-architecture.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [computer-science](<https://devfeed.tech/tags/computer-science.md>), [developers](<https://devfeed.tech/tags/developers.md>), [first-android-app-with-kotlin](<https://devfeed.tech/tags/first-android-app-with-kotlin.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to-build-apps-using-kotin-for-android](<https://devfeed.tech/tags/how-to-build-apps-using-kotin-for-android.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [siddhesh-patil-talks](<https://devfeed.tech/tags/siddhesh-patil-talks.md>), [talks-on-kotlin](<https://devfeed.tech/tags/talks-on-kotlin.md>), [tech-workshops-in-mumbai](<https://devfeed.tech/tags/tech-workshops-in-mumbai.md>), [ui](<https://devfeed.tech/tags/ui.md>), [vesit](<https://devfeed.tech/tags/vesit.md>), [vesit-cmpn](<https://devfeed.tech/tags/vesit-cmpn.md>), [workshop](<https://devfeed.tech/tags/workshop.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

A live Google Meet workshop at VESIT introduced computer engineering students to Android development with Kotlin. Participants used Android Studio to build a small app and learned about app architecture, views, data preparation, Gradle, Jetpack libraries, RecyclerViews, and debugging with logcat.

### Source excerpt

Continuing our two-day session on kickstarting your journey to become Android developers, budding computer engineering students learn to build their very first app for Android using Kotlin.

## Getting Started With Test Driven Development

DevFeed: [Getting Started With Test Driven Development](<https://devfeed.tech/articles/getting-started-with-test-driven-development-22841.md>)

Original publisher: [Read original article](<http://androidessence.com/test-driven-development/>)

Author: Adam McNeilly

Published: 2020-03-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [development](<https://devfeed.tech/tags/development.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This tutorial explains Test Driven Development (TDD), in which developers write tests before implementing the code. It describes how tests clarify expected behavior, support confident development and refactoring, and discusses why adopting TDD can be difficult in Android projects.

### Source excerpt

One of the many buzzwords thrown around the software devleopment community is Test Driven Development, or TDD. It is one of those phrases that sounds great when you say it - who wouldn't want to have tests be their first priority when writing code? However, it's not always clear what TDD means. Does it mean you write code with testability in mind? Does it mean writing tests first? How can we write tests if we don't have code to test? This post will answer all of those questions, and teach you how to implement TDD effectively on Android.

## Lessons learned being a lead developer

DevFeed: [Lessons learned being a lead developer](<https://devfeed.tech/articles/lessons-learned-being-a-lead-developer-28684.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2019/08/06/lessonsleaddeveloper/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2019-08-06T00:00:00Z

Content type: article

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [App](<https://devfeed.tech/topics/app.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Tech Debt](<https://devfeed.tech/topics/tech-debt.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [RxJava](<https://devfeed.tech/topics/rxjava.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lessonslearned](<https://devfeed.tech/tags/lessonslearned.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [team-lead](<https://devfeed.tech/tags/team-lead.md>), [tech-debt](<https://devfeed.tech/tags/tech-debt.md>)

### AI overview

A lead Android developer at Philips Hue reflects on leading a component team while remaining a hands-on developer. The article discusses team responsibilities, a poorly structured and highly coupled codebase, Android technology changes, slow and unstable builds, and difficulties integrating large pull requests.

### Source excerpt

Three years ago, we decided ramp up internal app development at Philips Hue. After interviewing candidates (78!) for six months, I became the lead Android developer of the freshly hired Android team.

[Next page](<https://devfeed.tech/topics/lineageos.md?cursor=WyIyMDE5LTA4LTA2VDAwOjAwOjAwKzAwOjAwIiwgIjQxNWFlYWM4LTViMzAtNGFkYi04NTIxLTVhNzBkNzhhZjYxMyJd>)