# Stories by Kirill Rozov on Medium

Stories by Kirill Rozov on Medium

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

## 51 Detekt Rules for Koin: Catch Anti-Patterns Your Compiler Misses

DevFeed: [51 Detekt Rules for Koin: Catch Anti-Patterns Your Compiler Misses](<https://devfeed.tech/articles/51-detekt-rules-for-koin-catch-anti-patterns-your-compiler-misses-25957.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/detekt-rules-koin-c0b6330fc37b?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2026-03-02T08:17:18Z

Content type: tutorial

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [koin](<https://devfeed.tech/topics/koin.md>), [Android](<https://devfeed.tech/topics/android.md>), [ci](<https://devfeed.tech/topics/ci.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [ci](<https://devfeed.tech/tags/ci.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [detekt](<https://devfeed.tech/tags/detekt.md>), [errors](<https://devfeed.tech/tags/errors.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This article explains how the detekt-rules-koin Detekt extension identifies Koin dependency-injection anti-patterns that compile successfully but can fail at runtime. It covers misuse of get(), service-locator access through KoinComponent, singleton registration for mutable use cases, and installation in an existing Detekt setup.

### Source excerpt

Your Koin module compiles. Unit tests pass. CI is green. Then production crashes with NoBeanDefFoundException on first launch -- and the offending line has been sitting in your codebase for weeks. Koin's runtime graph resolution means the compiler never sees these bugs; it only surfaces them when Koin tries to wire everything together. No red underlines, no warnings, no build failures -- just a crash on a user's device. This is the fundamental tension with Koin: its DSL is concise and readable, but none of the structure it creates is visible to the type system. The three examples below compile without errors on any Android project. All three will cause real problems at runtime. Static analysis is the standard answer to this class of problem -- but generic Detekt rules were not written with Koin's semantics in mind. A rule that flags unused variables or improper nullability checks has no concept of a Koin scope, a module definition block, or the difference between single and factory. What you need is a rule set that understands Koin. That's exactly what detekt-rules-koin provides. Problem 1 -- `NoGetOutsideModuleDefinition`// ❌ get() called outside a Koin module - compiles, crashes at runtime class UserRepositoryImpl : UserRepository { // KoinComponent not implemented, no scope active private val db: AppDatabase = get() private val api: UserApi = get() } get() is only valid inside a Koin module definition block, where the Koin container is active and providing dependencies. Calling it here triggers IllegalStateException: KoinApplication has not been started -- or silently resolves to the wrong scope -- depending on how your app is wired. Problem 2 -- NoKoinComponentInterface// ❌ Repository using Service Locator via KoinComponent class UserRepository : KoinComponent { private val db: AppDatabase by inject() private val api: UserApi by inject() fun getUser(id: String) = api.fetchUser(id) }// ✅ Constructor injection - dependencies are explicit and testable class UserRepository

## Project Mainline: How Google Reshaped Android Updates

DevFeed: [Project Mainline: How Google Reshaped Android Updates](<https://devfeed.tech/articles/project-mainline-how-google-reshaped-android-updates-25959.md>)

Original publisher: [Read original article](<https://kirillr.medium.com/project-mainline-31151e235d7a?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2025-08-18T13:47:15Z

Content type: article

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Google](<https://devfeed.tech/topics/google.md>), [Operating system](<https://devfeed.tech/topics/operating-system.md>), [samsung](<https://devfeed.tech/topics/samsung.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [devices](<https://devfeed.tech/tags/devices.md>), [fragmentation](<https://devfeed.tech/tags/fragmentation.md>), [google](<https://devfeed.tech/tags/google.md>), [os](<https://devfeed.tech/tags/os.md>), [samsung](<https://devfeed.tech/tags/samsung.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

The article examines Android update delays caused by vendor customization and fragmentation, then introduces Project Mainline as part of Google's multi-year effort to modularize Android, reduce dependence on manufacturers, and deliver some features without waiting for a full OS release.

### Source excerpt

Android is the most popular operating system in the world, powering devices from hundreds of manufacturers. Every year, Google releases a new version of Android, but only its own Pixel devices receive it immediately. Third-party vendors, such as Samsung, typically roll out the update to their flagship devices after about three months. A decade ago, this waiting period used to be as long as 9 to 12 months -- and many mid-range or budget devices never received updates at all. This naturally raises a question: will Android ever reach the same point as Apple, where new versions are released simultaneously for all supported devices? In this article, we'll explore how Google has gradually re-architected Android to shorten update delays, reduce dependency on device manufacturers, and eventually deliver new features directly -- without waiting for a new OS version. This multi-year journey led to one of the most important initiatives in Android's history: Project Mainline. The Fragmentation Problem When Android was first introduced, Google positioned itself as the developer of the OS, licensing its services to manufacturers rather than building its own hardware. Each vendor would take the base Android build from Google and heavily customize it: Replacing default apps with their own, Changing the visual design, Adding proprietary features, And often even modifying core Android mechanisms. While this strategy allowed Android to spread quickly, it created fragmentation. The market became flooded with devices running different OS versions, custom skins, and preinstalled apps. Watch my video with more information about solving the Fragmentation problem on YouTubeWhy Updates Took So Long For years, vendors controlled when and how their devices received new Android versions. The update process took anywhere from 6 to 18 months. In fact, a new Android version could already be released while a vendor was still working on adapting the previous one. And that was the best-case scenario --

## Obfuscation Deep Dive: Enhancing R8 and ProGuard for Robust Android Code Protection

DevFeed: [Obfuscation Deep Dive: Enhancing R8 and ProGuard for Robust Android Code Protection](<https://devfeed.tech/articles/obfuscation-deep-dive-enhancing-r8-and-proguard-for-robust-android-code-protection-25958.md>)

Original publisher: [Read original article](<https://kirillr.medium.com/proguard-r8-obfuscation-dictionary-b4541a898eb8?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2025-05-19T07:40:40Z

Content type: tutorial

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Reverse Engineering](<https://devfeed.tech/topics/reverse-engineering.md>), [Java](<https://devfeed.tech/topics/java.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [java](<https://devfeed.tech/tags/java.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>), [reverse-engineering](<https://devfeed.tech/tags/reverse-engineering.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

This tutorial explains how R8 and ProGuard obfuscate Android applications and why their default naming dictionaries can make reverse engineering easier. It presents custom dictionary configuration, Java reserved-keyword names, invalid Windows filename names, and per-build randomized dictionaries, while noting compatibility and testing risks.

### Source excerpt

Obfuscation is a crucial aspect of securing Android applications. While tools like R8 and ProGuard are commonly used, their default configurations primarily aim to reduce app size rather than fortify code against reverse engineering. This article delves into advanced obfuscation techniques to make reverse engineering harder. Understanding Obfuscation Obfuscation transforms readable code into a form that's difficult to interpret. For instance, UserManager might become a, and getUser() could be renamed to b(). R8 and ProGuard perform obfuscation alongside code shrinking and optimization. # R8/ProGuard default dictionary a b c ... z These tools use dictionaries to generate new names, typically starting with single letters (a to z) and progressing to combinations like aa, ab, etc. While this approach minimizes file size, it has drawbacks: Predictable Naming: Limited name variations make it easier to deduce original identifiers. Consistent Builds: Repeated builds produce identical obfuscated names, aiding pattern recognition. Simplified Reverse Engineering: Tools can exploit naming patterns across builds. To counter these issues, customizing the obfuscation dictionary is essential. Implementing Custom Dictionaries R8 and ProGuard allow the use of custom dictionaries via configuration files: # proguard-rules.txt # Add to R8/ProGuard config file -obfuscationdictionary obfuscation-dictionary.tx -classobfuscationdictionary class-dictionary.txt -packageobfuscationdictionary package-dictionary.txt By providing unique dictionaries, you can generate diverse and unpredictable obfuscated names. Advanced Dictionary StrategiesJava Reserved Keywords Using Java's reserved keywords (e.g., if, for, class) as obfuscated names can confuse decompilers, as these are invalid identifiers in source code but acceptable in bytecode. # Java Reserved Keywords dictionary do if for int new ... instanceof synchronized Example of deobfucated Java code with java reserved keywords dictionary package cla

## Simplify ViewBinding in Android with ViewBindingPropertyDelegate 2.0

DevFeed: [Simplify ViewBinding in Android with ViewBindingPropertyDelegate 2.0](<https://devfeed.tech/articles/simplify-viewbinding-in-android-with-viewbindingpropertydelegate-2-0-25960.md>)

Original publisher: [Read original article](<https://kirillr.medium.com/whats-new-in-vbpd-2-0-a83565134cff?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2025-02-04T13:30:45Z

Content type: release

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-jetpack](<https://devfeed.tech/tags/android-jetpack.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [library](<https://devfeed.tech/tags/library.md>), [memory-leaks](<https://devfeed.tech/tags/memory-leaks.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [release](<https://devfeed.tech/tags/release.md>), [ui](<https://devfeed.tech/tags/ui.md>), [view-binding](<https://devfeed.tech/tags/view-binding.md>)

### AI overview

This article announces ViewBindingPropertyDelegate 2.0, a release that refactors how the Android library manages ViewBinding lifecycles. It replaces Jetpack Lifecycle-based detection with component lifecycle callbacks for Fragments and Activities, improving the timing of reference clearing and addressing issues related to Fragment animations. The release also supports lazy ViewBinding creation and aims to prevent memory leaks.

### Source excerpt

I'm excited to announce the release of ViewBindingPropertyDelegate 2.0, which introduces significant under-the-hood refactoring to enhance the library's stability and performance. In this article, I'll highlight the most important changes and explain how they improve the library's functionality. Brief Introduction ViewBindingPropertyDelegate(VBPD) is a lightweight library designed to simplify the use of Android's ViewBinding by: Managing the ViewBinding lifecycle and clearing references to prevent memory leaks. Eliminating the need to maintain nullable references to Views or ViewBindings. Creating ViewBindings lazily. The library supports usage in various components, including Activities, Fragments, ViewGroups, and RecyclerView.ViewHolders. class ProfileFragment : Fragment(R.layout.profile) { private val profileBinding: ProfileBinding by viewBinding(ProfileBinding::bind) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // ProfileBinding instance will be created lazily on first access profileBinding.name.text = ... } override fun onDestroyView() { super.onDestroyView() // profileBinding reference will be cleared after onDestroyView() } }Changes in 2.0Transition from Lifecycle to Component Callbacks In previous versions (1.x), VBPD relied on Jetpack's Lifecycle to detect when a View was being destroyed. This approach had a limitation: the Lifecycle callback methods could be invoked before Fragment.onDestroyView(), while the ViewBinding reference was still needed. To address this, VBPD postponed clearing the ViewBinding reference using an Android Handler after onDestroyView(), when the Fragment's View LifecycleOwner transitioned to the DESTROYED state. In version 2.0, VBPD now utilizes FragmentManager.FragmentLifecycleCallbacks to detect when a Fragment's view is destroyed. The key difference lies in the timing of these callbacks, allowing for more precise management of the ViewBinding lifecycle. // Sou

## Android Fragmentation: How Google Addressed It and Why Version Updates Matter Less

DevFeed: [Android Fragmentation: How Google Addressed It and Why Version Updates Matter Less](<https://devfeed.tech/articles/android-fragmentation-state-did-google-fixed-it-25962.md>)

Original publisher: [Read original article](<https://proandroiddev.com/android-fragmentation-state-0e7be1649e66?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2023-10-23T01:40:30Z

Content type: opinion

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Google](<https://devfeed.tech/topics/google.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Operating system](<https://devfeed.tech/topics/operating-system.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-13](<https://devfeed.tech/tags/android-13.md>), [applications](<https://devfeed.tech/tags/applications.md>), [data](<https://devfeed.tech/tags/data.md>), [development](<https://devfeed.tech/tags/development.md>), [devices](<https://devfeed.tech/tags/devices.md>), [fragmentation](<https://devfeed.tech/tags/fragmentation.md>), [google](<https://devfeed.tech/tags/google.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [os](<https://devfeed.tech/tags/os.md>), [programming](<https://devfeed.tech/tags/programming.md>), [treble](<https://devfeed.tech/tags/treble.md>)

### AI overview

An opinion article examines Android fragmentation, its historical causes, Google's efforts to address it, and why independent updates have made device Android-version updates less important. It uses Android's Photo Picker as an example of functionality extended to older devices through Google Play Services.

### Source excerpt

Android Fragmentation state. Did Google fix it?Image generated by Kandinsky 2.2 In Android 13 a new feature called Photo Picker appeared. It allows applications to access individual user photos and videos without giving them full access to the photo/video or the entire memory of the device. This is a good feature for limiting an application's access to a user's personal data. It was immediately announced that this feature would also work on Android 11 and newer (with support for Mainline updates), and later its support was added to all devices with Android 4.4 and above via Google Play Services. I immediately asked myself, why hasn't it been done before? And the answer is simple -- Android didn't allow to implement this, because Google was struggling with fragmentation and working on the possibility of an independent update of Android, it became a reality. In this article, I share my opinion about Android fragmentation. You will learn what it is, the reasons for its appearance, and why it is no longer so relevant. I'll also tell you about the ways Google did with this problem in the first 10 years of Android's existence and why device updates to newer versions of Android will not be as important as before. The article is my own opinion and it can be wrong, but I open to discuss it in commentsBrief History of Android OS To understand the problems that OS developers faced, we need to go back in time. The history of Android begins in 2004. Andy Rubin decided to develop an operating system for digital cameras, which were very popular at the time. However, due to funding problems and the pretty small market for digital cameras, the system was refocused on smartphones as a competitor to Symbian and Windows Mobile. In 2005, the company was acquired by Google. The Good Corporation decided to enter the mobile phone market by selling its OS to device manufacturers. In 2007, the Open Handset Alliance was created, and at the same time, Android was announced as an open-source mob

## What's new in Android 14 for developers

DevFeed: [What's new in Android 14 for developers](<https://devfeed.tech/articles/what-s-new-in-android-14-for-developers-25966.md>)

Original publisher: [Read original article](<https://proandroiddev.com/whats-new-in-android-14-1e5d7d8b3482?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2023-10-04T18:06:41Z

Content type: article

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-14](<https://devfeed.tech/tags/android-14.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [developers](<https://devfeed.tech/tags/developers.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [permissions](<https://devfeed.tech/tags/permissions.md>), [pixel8](<https://devfeed.tech/tags/pixel8.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [vulnerabilities](<https://devfeed.tech/tags/vulnerabilities.md>)

### AI overview

This article reviews Android 14 changes affecting application developers, including background execution and foreground service restrictions, Intent and BroadcastReceiver changes, Predictive Back Gesture animations, and restrictions on installing applications targeting SDK versions below 23.

### Source excerpt

Android 14 is already here, so I took the documentation, experts' reviews, and other available resources to sort out all the important changes that will affect most application developers. Let's examine new restrictions on background mode, changes in Foreground Service, new restrictions on the work of Intent and BroadcastReceiver. In this release, we have many restrictions, but we've also got new features. Thanks for Mishaal Rahman for his articles about Android 14. I based the articles on them.Predictive Back Gesture in actionDemonstration of animation of using back navigation. Source Already in Android 13, we were warned that in the next version of Android, we should expect updates of the Back Gesture and Predictive Back Gesture with animation in the form of a preview screen where we will move. Animation for that preview is still not working. If you want it to work, you should activate it in the developer's settings. Demonstration of animation of using back navigation An example of your personal animation when doing the Back gesture Also, the ability to create personal transition animations inside the application was added. For that, a method handleOnBackProgressed() was added in OnBackPressedCallback. This method is called with the progress of the Back Gesture, as well as the handleOnBackPressed() and handleOnBackCancelled() methods, which are called at the end of the Back Gesture's animation and its cancellation, respectively. On the screen, you can see an example of implementing your custom animation using the Jetpack AppCompat 1.8.0 library. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { ... val box = findViewById<View>(R.id.box) val screenWidth = Resources.getSystem().displayMetrics.widthPixels val maxXShift = (screenWidth / 20) val callback = object : OnBackPressedCallback( enabled = true ) { override fun handleOnBackProgressed( backEvent: BackEvent ) { when (backEvent.swipeEdge) { BackEvent.EDGE_LEFT -> box.t

## Revision of restrictions on background work from Android 5.0 to 13

DevFeed: [Revision of restrictions on background work from Android 5.0 to 13](<https://devfeed.tech/articles/revision-of-restrictions-on-background-work-from-android-5-0-to-13-25961.md>)

Original publisher: [Read original article](<https://medium.com/its-tinkoff/android-background-restrictions-b63e73fe508?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2022-11-29T12:54:28Z

Content type: article

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Utility Software](<https://devfeed.tech/topics/utility.md>), [Google](<https://devfeed.tech/topics/google.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [battery](<https://devfeed.tech/tags/battery.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [google](<https://devfeed.tech/tags/google.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [permissions](<https://devfeed.tech/tags/permissions.md>), [services](<https://devfeed.tech/tags/services.md>), [sync](<https://devfeed.tech/tags/sync.md>)

### AI overview

The article reviews how Android background-work restrictions evolved from Android 5.0 through Android 13. It describes earlier background tools, including Alarm Manager, Broadcast Intent, services, Sync Adapter, and Download Manager, and explains that system-performance concerns led to tighter constraints involving background execution, battery use, file-system access, and permissions.

### Source excerpt

Background restrictions in Android Once upon a time, running in the background was easy. Now Android has a lot of restrictions: running in the background, access to the file system, permissions that need to be approved by Google Play moderators, and others. Developers have to work with all of them. Let's remember where it all started and how the requirements changed with each new version of Android How it started Before Android 5.0, we had the set of tools to run tasks in the background: Alarm Manager. The tool that allows you to set an alarm on your system and receive notifications. Broadcast Intent. It sends notifications about events that are happening on the system (new messages, for example). Service -- Background, Foreground & Bound. Sync Adapter. A special ancient stuff, which is connected to account management for data synchronization. A clear example: when you set up a Google account in Android, you can set up synchronization of your calendar, contacts and other services. Under the hood, it works through the Sync Adapter. The tool has not lived up to our days. Download Manager. A utility that allows you to download files. It is not very smart, but it is simple and convenient. Google Play, for example, is what downloads files with it. The problems appeared because developers did not follow Spider-Man's rule: "With great opportunities for developers comes responsibility for the speed of the system". Google gave them huge opportunities from the first versions of Android, but did not warn them that they were working in a system that was responsible for quality. When users broke something, they didn't blame third-party developers, they said, "Android is lagging, but everything is fast on the iPhone." It turned out that the developers were good and Google was bad. Google decided to deal with this, but to do this, they had to find "enemies" affecting the quality of applications. They turned out to be: Battery size vs. device size. Everyone wants a thin device that

## Modern MacBook benchmarks for Android development

DevFeed: [Modern MacBook benchmarks for Android development](<https://devfeed.tech/articles/modern-macbook-benchmarks-for-android-development-25964.md>)

Original publisher: [Read original article](<https://proandroiddev.com/m1-android-dev-benchmark-f658b42dde8f?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2022-01-29T15:56:46Z

Content type: comparison

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Development](<https://devfeed.tech/topics/development.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Intel Core](<https://devfeed.tech/topics/intel-core.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [apple-m1](<https://devfeed.tech/tags/apple-m1.md>), [apple-silicon](<https://devfeed.tech/tags/apple-silicon.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [development](<https://devfeed.tech/tags/development.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [intel](<https://devfeed.tech/tags/intel.md>), [intel-core](<https://devfeed.tech/tags/intel-core.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [laptops](<https://devfeed.tech/tags/laptops.md>), [mac](<https://devfeed.tech/tags/mac.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

This article compares Android project build speeds across Intel-powered MacBooks, Apple Silicon MacBooks, and a 2015 iMac. Using Gradle Profiler, JDK 11, Gradle 7.3.3, and repeated test runs, it reports substantially faster results for Apple Silicon in the tested small Kotlin project.

### Source excerpt

Photo by Danial Igdery https://unsplash.com/photos/FCHlYvR5gJI Choosing a device is never easy as it is, but the new Apple Silicon SoCs for Mac have given the market a good shake and made the choice even harder. Which MacBook should I buy? How different are they? It's hard to figure out. Besides, searching for thorough tests is one hell of a job. In this article, I'll give you a proper comparison of build speeds using some real-life Android projects and a number of different MacBook models. In addition to that, I'll tell you which one to buy heading into 2022. Test computers In this test, I used the latest MacBook Pro laptops powered by Intel as well as some of the latest MacBooks with M1. iMac 27" Late 2015 Intel Core i7 6700K | 24 GM RAM MacBook Pro 16" 2019 i7 9750H 6 CPU cores/12 threads | 16 GB RAM MacBook Pro 16" 2019 i9 9880H 8 CPU cores /16 threads | 32 GB RAM MacBook Air 2020 M1 | 16 GB RAM MacBook Pro 14" 2021 M1 Pro 8 CPU | 16 GB RAM MacBook Pro 14" 2021 M1 Pro 10 CPU | 32 GB RAM MacBook Pro 16" 2021 M1 Pro 10 CPU | 32 GB RAM MacBook Pro 16" M1 Max | 32 GB RAM I added my old iMac 27" Late 2015 to the test to see how much progress the new models of Macs made.Test method Making sure all computers work in equal conditions isn't easy, but I've tried to make it perfect: Using the latest revision of JDK 11. For Apple Silicon I used Zulu ARM JDK Using Gradle 7.3.3 to build projects (the latest available version in moment of testing) Disconnecting the external displays Connecting all computers to a power source Close as many programs as possible, including the background ones Close Android Studio! Switch computer into performance mode (if available) Placing all laptops on a hard flat surface to let the airflow come in and cool down the laptop Not touching the computers during tests Turning off the Spotlight indexing or adding the test project folder to exceptions. If you know of any other conditions to be considered before benchmark testing, I'd be happy to read

## Automating Code Analysis in Android Projects

DevFeed: [Automating Code Analysis in Android Projects](<https://devfeed.tech/articles/automating-analyzing-of-code-in-android-projects-25963.md>)

Original publisher: [Read original article](<https://proandroiddev.com/automating-analyzing-of-code-in-android-projects-a60313569c53?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2021-09-20T18:11:42Z

Content type: tutorial

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Static code analysis](<https://devfeed.tech/topics/static-code-analysis.md>), [Code](<https://devfeed.tech/topics/code.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ci](<https://devfeed.tech/topics/ci.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [also](<https://devfeed.tech/tags/also.md>), [android](<https://devfeed.tech/tags/android.md>), [ci](<https://devfeed.tech/tags/ci.md>), [code](<https://devfeed.tech/tags/code.md>), [code-analysis](<https://devfeed.tech/tags/code-analysis.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [code-quality-tools](<https://devfeed.tech/tags/code-quality-tools.md>), [development](<https://devfeed.tech/tags/development.md>), [ide](<https://devfeed.tech/tags/ide.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

This tutorial explains how to automate code analysis in Android projects. It distinguishes static analysis, which can run during development or in CI, from dynamic analysis, which runs the application to detect issues such as memory leaks. It also introduces IDE inspections as a code-analysis tool.

### Source excerpt

Source unsplash.com/photos/Tjbk79TARiEAutomation of code analysis in Android projectsHello. My name is Kirill Rozov, and if you are interested in Android development, then most likely you have heard about the Android ResId Telegram channel with daily news for Android developers.https://medium.com/media/ff8acd16dd7b4b03a485bf9baab3c9d6/href Modern mobile applications are already quite serious enterprise projects that are developed by hundreds of developers, contain thousands of lines of code and are constantly changing and developing. The process of automating code checking and application work helps to deal with such a huge codebase. Today I will tell you what tools you can use to improve the stability of your project and avoid mistakes, as well as save time for colleagues during a pull request. Are you developing a project with a small team or alone? Then this article is even more important to you, since you most likely didn't configure any checks for yourself, and I will tell you why this needs to be done. Types of code checking Code analyzers is divided on two types: static code analysis (without starting the application) code analysis while the application is running Android development uses statically typed compiled languages: Java and Kotlin. These are important requirements for languages that allow them to analyze code without having to run it, and they can do it right at the time of writing the code. This type of analysis is called static. This makes it easy to run analyzing on any CI and automate checking for simple errors, such as not closing a stream after reading/writing code. The disadvantage of such checks is that if your code deviates from the template embedded in it, then the code will not work or will work incorrectly. Also, such analyzers can't understand complex code execution scenarios and their effect. More serious checks of your code can be done by automatically analyzing it while the application is running (dynamic). For example, you can tra

## Android 12 review for Developers

DevFeed: [Android 12 review for Developers](<https://devfeed.tech/articles/android-12-review-for-developers-25965.md>)

Original publisher: [Read original article](<https://proandroiddev.com/review-of-android-12-for-developers-ea3ce9247e0?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2021-06-29T14:42:14Z

Content type: opinion

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>), [Google](<https://devfeed.tech/topics/google.md>), [ui](<https://devfeed.tech/topics/ui.md>), [API](<https://devfeed.tech/topics/api.md>), [Security, Privacy and Abuse Prevention](<https://devfeed.tech/topics/security-privacy-and-abuse-prevention.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-12](<https://devfeed.tech/tags/android-12.md>), [api](<https://devfeed.tech/tags/api.md>), [data-privacy](<https://devfeed.tech/tags/data-privacy.md>), [developers](<https://devfeed.tech/tags/developers.md>), [google](<https://devfeed.tech/tags/google.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [security](<https://devfeed.tech/tags/security.md>), [ui](<https://devfeed.tech/tags/ui.md>), [widget](<https://devfeed.tech/tags/widget.md>)

### AI overview

A developer-focused review of Android 12 based on its early beta, covering security and data privacy, Material You personalization, the standardized SplashScreen API, and updates to interface effects such as Ripple, Overscroll, and RenderEffect.

### Source excerpt

Android 12 review for developershttps://medium.com/media/14d506cb3ec570f8bf99b03256759f2e/href The Google I/O'21 conference took place, and we learned absolutely everything about the new version of Android, and we can also try it all in Beta 1, which we can install on the Pixel, and other manufacturers also allow you to install the GSI image. The main emphasis in the release was made on enhancing OS security and data privacy, as well as redesigning the system. They have done a very good job of supporting today's new media standards, and they have minimized the amount of pain that flagship devices will experience from older or budget smartphones. App Widgets have been improved, as users have been asking for since the first version of Android. DesignNew Material You designhttps://medium.com/media/94c8a2d0eca25e4d6931df11976a8884/href Google has unveiled an updated version of Material Design that focuses on personalizing the color palette. For example, colors in Pixel devices will be determined based on the background image. You will be able to fully experience Material You in the second Beta version of Android 12. The most important question is: "How will vendors adapt Material You in their firmware?" The chances are that this concept of colors will remain in pure Android, and vendors and third-party applications will ignore the design and use their own ideas. The entire color palette in Material was based on the app's brand colors, and now it has to be user-definable. Much depends on how the app interface designers adapt the new design. Write in the comments if you like Google's new visual style Standard Splash Screen for all apps SplashScreen API allows you to customize it for your brand: set a background, animated icon and other parameters. You cannot turn off the new Splash Screen, so everyone who has their own variation of such a screen -- pay attention. Splash Screen is a fairly popular practice in Android applications to hide long initialization. Now a standard