<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Sandeep Satpute</title>
    <description>The latest articles on Forem by Sandeep Satpute (@sandeepsatpute9271).</description>
    <link>https://forem.com/sandeepsatpute9271</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F864687%2F2ec47942-56b1-4ab9-b739-f3d897bc6103.jpeg</url>
      <title>Forem: Sandeep Satpute</title>
      <link>https://forem.com/sandeepsatpute9271</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sandeepsatpute9271"/>
    <language>en</language>
    <item>
      <title>ARCore For Android</title>
      <dc:creator>Sandeep Satpute</dc:creator>
      <pubDate>Sun, 07 Apr 2024 11:46:17 +0000</pubDate>
      <link>https://forem.com/sandeepsatpute9271/arcore-for-android-12l0</link>
      <guid>https://forem.com/sandeepsatpute9271/arcore-for-android-12l0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
     In this post, I would like to introduce a simple way to display 3D models supported by native Android. However. 3D models can be displayed in AR in a variety of ways. Using Scene Viewer with intents directly from your Android native app is one of those methods. In this topic will see how we can display the model using Explicit Intent and Scene viewer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Scene Viewer&lt;/strong&gt;&lt;br&gt;
     Scene Viewer is an immersive viewer that enables 3D and AR experiences from your website or Android app. It lets users of Android mobile devices easily preview, place, view, and interact with web-hosted 3D models in their environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wclaopw27exfb9sy3sa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wclaopw27exfb9sy3sa.png" alt="Image description" width="613" height="1140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39aq8mvih00eqrf8884y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39aq8mvih00eqrf8884y.png" alt="Image description" width="414" height="896"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Launch Scene Viewer Using an Explicit Intent to Google Play Services for AR&lt;/strong&gt;&lt;br&gt;
     Google Play Services for AR is used to power the AR functionality in Scene Viewer.&lt;br&gt;
     You can use an explicit Android intent from a website or native Android app to launch Scene Viewer via the com.google.ar.core package and supply a browser fallback URL to ensure that AR is supported in Scene Viewer. Using Scene Viewer, you can ensure that every user either has a native AR experience or a fallback experience you have created yourself. You may create a gracious error message or your 3D viewer as examples of fallback experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scene Viewer Using an Explicit Intent Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
            val intentUri =
                Uri.parse("https://arvr.google.com/scene-viewer/1.0").buildUpon()
                    .appendQueryParameter("file", "https://storage.googleapis.com/ar-answers-in-search-models/static/Tiger/model.glb")    //Working
                    .appendQueryParameter("mode", "ar_only")
                    .appendQueryParameter("title", "Tiger")
                    .build()
            sceneViewerIntent.data = intentUri
            sceneViewerIntent.setPackage("com.google.ar.core")
            sceneViewerIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            startActivity(sceneViewerIntent)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Github Link&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/SandeepSatpute9271/Simple_AR"&gt;https://github.com/SandeepSatpute9271/Simple_AR&lt;/a&gt;&lt;/p&gt;

</description>
      <category>arcore</category>
      <category>android</category>
    </item>
    <item>
      <title>Android Developer Roadmap 2024</title>
      <dc:creator>Sandeep Satpute</dc:creator>
      <pubDate>Mon, 11 Dec 2023 17:58:49 +0000</pubDate>
      <link>https://forem.com/sandeepsatpute9271/android-developer-roadmap-2024-16nj</link>
      <guid>https://forem.com/sandeepsatpute9271/android-developer-roadmap-2024-16nj</guid>
      <description>&lt;p&gt;Hey folks, here's a general Android Development Roadmap. This Android development roadmap will provide you with a comprehensive overview of the skills and knowledge you'll need to succeed in the ever-evolving world of Android development. We all know that the field of technology is dynamic and constantly evolving, so it's important to check the official documentation and other reputable sources for the latest updates&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamentals&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Programming Language&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Kotlin: Kotlin is the official language for Android development and is essential for any aspiring Android developer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Java: While Kotlin is the preferred language, Java is still widely used, and understanding it can be beneficial.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Android SDK&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android Studio: The official IDE for Android development.&lt;/li&gt;
&lt;li&gt;Android APIs: Familiarize yourself with the core Android APIs and frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Database Design&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL: Learn the basics of SQL for data storage and retrieval.&lt;/li&gt;
&lt;li&gt;Room: A powerful library for managing SQLite databases in Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Intermediate&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Jetpack libraries&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compose: A modern UI framework for building declarative and reactive user interfaces.&lt;/li&gt;
&lt;li&gt;ViewModel: Store and manage UI data.&lt;/li&gt;
&lt;li&gt;LiveData: Observe changes in data and update the UI automatically.&lt;/li&gt;
&lt;li&gt;Navigation: Manage navigation within your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Networking&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrofit: A popular library for making HTTP requests.&lt;/li&gt;
&lt;li&gt;OkHttp: A powerful HTTP client with advanced features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Security&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android Keystore: Securely store sensitive data such as encryption keys and passwords.&lt;/li&gt;
&lt;li&gt;Biometric Authentication: Enable fingerprint and face unlock for secure user authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Testing&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JUnit: Unit testing framework for Android.&lt;/li&gt;
&lt;li&gt;Espresso: UI testing framework for Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Advanced&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Machine Learning&lt;/li&gt;
&lt;li&gt;TensorFlow Lite: On-device machine learning library for Android.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ML Kit: Firebase ML Kit provides pre-trained models for common machine learning tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ARCore: Develop augmented reality experiences for Android devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jetpack Compose Multiplatform: Build cross-platform apps for Android and iOS using Jetpack Compose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kotlin Coroutines: Asynchronous programming with Kotlin coroutines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clean Architecture: Design principles for building maintainable and scalable apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jetpack Compose for Wear OS: Build watch faces and apps for Wear OS devices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Extras&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stay up-to-date with the latest news and trends: Follow Android blogs and attend conferences to learn about the latest advancements.&lt;/li&gt;
&lt;li&gt;Practice regularly: The best way to learn is by doing. Build small projects to practice your skills and get comfortable with the Android development tools.&lt;/li&gt;
&lt;li&gt;Contribute to open source projects: This is a great way to gain experience and learn from other developers.&lt;/li&gt;
&lt;li&gt;Forums and Communities: Join online forums and communities to connect with other developers and learn from their experiences.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Resources(R.string) in viewModel in Android</title>
      <dc:creator>Sandeep Satpute</dc:creator>
      <pubDate>Fri, 05 Aug 2022 17:09:19 +0000</pubDate>
      <link>https://forem.com/sandeepsatpute9271/resourcesrstring-in-viewmodel-in-android-553g</link>
      <guid>https://forem.com/sandeepsatpute9271/resourcesrstring-in-viewmodel-in-android-553g</guid>
      <description>&lt;p&gt;I would like to share a technique to access the strings in view model that works well. &lt;br&gt;
So there are multiple ways to access the string in view model but they have there own advantages and disadvantages.&lt;br&gt;
We have options like &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hardcode a string in code but this will not help in case of reusability and string localisation&lt;/li&gt;
&lt;li&gt;Use the context of an activity but in mvvm its bad practice to use context direct in view model&lt;/li&gt;
&lt;li&gt;Return the string resource id which is integer and in activity get the actual string but this will increase the efforts &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's move toward the solution &lt;br&gt;
In MVVM and hilt will have addition benefits to overcome above issue. &lt;/p&gt;

&lt;p&gt;We will add the StringResourcesProvider.kt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Singleton
class StringResourcesProvider @Inject constructor(
    @ApplicationContext private val context: Context
) {
    fun getString(@StringRes stringResId: Int): String {
        return context.getString(stringResId)
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define the view model to get the string&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@HiltViewModel
class AuthViewModel @Inject constructor(
    private val stringResourcesProvider: StringResourcesProvider
) : ViewModel() {
    ...
    fun validate() {
        val username: String = stringResourcesProvider.getString(R.string.username)
    }
    ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this way we can access the string in view model or any other places.&lt;/p&gt;

&lt;p&gt;Thanks for reading my post. &lt;br&gt;
Happy codding&lt;/p&gt;

</description>
      <category>android</category>
      <category>codequality</category>
      <category>mvvm</category>
      <category>strings</category>
    </item>
    <item>
      <title>Shared ViewModel: A modern way to share data between android fragments and activities</title>
      <dc:creator>Sandeep Satpute</dc:creator>
      <pubDate>Sun, 10 Jul 2022 18:42:38 +0000</pubDate>
      <link>https://forem.com/sandeepsatpute9271/shared-viewmodel-a-modern-way-to-share-data-between-android-fragments-and-activities-31p9</link>
      <guid>https://forem.com/sandeepsatpute9271/shared-viewmodel-a-modern-way-to-share-data-between-android-fragments-and-activities-31p9</guid>
      <description>&lt;p&gt;In android development, developer multiple time come across a situation where needs to share the data between fragments and activities. So there are multiple ways to share the data between fragments and activities such as&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bundle while replacing the fragment/activity&lt;/li&gt;
&lt;li&gt;By using interface&lt;/li&gt;
&lt;li&gt;Shared viewModel&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's start with shared viewModel which is the simplest way of sharing the data between fragments/activities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is viewModel and responsibility of viewModel&lt;/strong&gt;&lt;br&gt;
The ViewModel class is designed to store and manage UI-related data in a lifecycle-conscious way. ViewModel class acts as an interface between Fragments to sharing data.&lt;br&gt;
ViewModel Life cycle helps us to hold the data and keep that live even if fragment is replaced.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2o8ndifx8a3idqg2u67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2o8ndifx8a3idqg2u67.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared viewModel&lt;/strong&gt;&lt;br&gt;
The shared view model is the normal view model only but the data holding behaviour and life cycle of view model help us to make it shared view model.&lt;br&gt;
As per life cycle data is available even if caller fragment get destroy and we can get that data for other fragments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o8i75fbdavrg2zvmvzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o8i75fbdavrg2zvmvzn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sender Fragment&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
        button.setOnClickListener { model.sendMessage("Techno Learning") }
    }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Receiver Fragment&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
        model.message.observe(viewLifecycleOwner, Observer {
            textViewReceiver.text = it
        })
    }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Precaution: Create SharedViewModel using the same owner.&lt;/p&gt;

&lt;p&gt;Git Repository Link &lt;br&gt;
&lt;a href="https://github.com/SandeepSatpute9271/SharedViewModel/tree/master/SharedViewModel/app/src/main/java/com/demo/shared_view_model" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
We learned about Shared ViewModel in Android to communicate with other fragments. Hope you enjoyed this blog.&lt;/p&gt;

&lt;p&gt;Happy Learning &lt;/p&gt;

</description>
      <category>android</category>
      <category>sharedviewmodel</category>
    </item>
    <item>
      <title>Kotlin Multiplatform Mobile (KMM)</title>
      <dc:creator>Sandeep Satpute</dc:creator>
      <pubDate>Mon, 23 May 2022 09:18:41 +0000</pubDate>
      <link>https://forem.com/sandeepsatpute9271/kotlin-multiplatform-mobile-kmm-550j</link>
      <guid>https://forem.com/sandeepsatpute9271/kotlin-multiplatform-mobile-kmm-550j</guid>
      <description>&lt;h2&gt;
  
  
  Basics about the KMM
&lt;/h2&gt;

&lt;p&gt;Kotlin Multiplatform Mobile (KMM) is an SDK that allows us to use the same business logic code in both iOS and Android applications. It offers all the combined benefits of creating cross-platform and native apps. It reduces the time needed for writing and maintaining the same code for different mobile platforms while retaining the flexibility and benefits of native programming. With Kotlin, we can use a single codebase for the business logic of iOS and Android apps and write platform-specific code only where necessary in order to implement a native UI or when working with platform-specific APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits
&lt;/h2&gt;

&lt;p&gt;Share code for logic elements that often fall out of sync while keeping the advantages of native programming, including great app performance and full access to the Android and iOS SDKs.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ieigaYHU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/924rmmpi4yoqrydf42r5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ieigaYHU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/924rmmpi4yoqrydf42r5.png" alt="Image description" width="880" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How KMM works
&lt;/h2&gt;

&lt;p&gt;An app consists of 4 main layers that includes UI logic layer, presentation logic layer, business logic layer, and data Layer. The data layer which has classes with the responsibility of making network calls and database queries can be 100% shared. The presentation and UI logic can be partially shared depending upon the device types and other platform specific peculiarities.&lt;/p&gt;

&lt;p&gt;KMM can seamlessly be integrated with the mobile project. Shared code, written in Kotlin, is compiled to JVM bytecode with Kotlin/JVM and to native binaries with Kotlin/Native, so you can use your KMM business-logic modules just like any other regular mobile library.&lt;/p&gt;

&lt;p&gt;Kotlin harbours multiplatform libraries that can reuse the multiplatform logic in common and platform-specific code such as HTTP, Serialization etc. To interoperate with platforms, platform-specific versions of Kotlin can be used. Platform-specific versions of Kotlin (Kotlin/JVM, Kotlin/JS, Kotlin/Native) include extensions to the Kotlin language, and platform-specific libraries and tools. Through these platforms one can access the platform native code (JVM, JS, and Native) and leverage all native capabilities.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HhjBHbOY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1a3ndknounjfo428ym9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HhjBHbOY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1a3ndknounjfo428ym9.png" alt="Image description" width="511" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Case studies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Quizlet migrated their business logic from a shared JavaScript approach to KMM and drastically improved the performance of both their Android and iOS applications.&lt;/li&gt;
&lt;li&gt;Fastwork introduced KMM for the domain and data layers of their application to share business logic and API service between mobile platforms, significantly boosting their team’s productivity.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Yandex.Disk started out by experimenting with the integration of a small feature, and when the experiment proved successful, they implemented their whole data synchronization logic in KMM.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, there are big projects that are using KMM in production ( i.e Netflix, Phillips, and more ) and probably it was not mentioned but Unit Testing is also possible using KMM.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The project structure
&lt;/h2&gt;

&lt;p&gt;As you can see below, the project is divided into three modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;androidApp—contains all the native code for the Android application&lt;/li&gt;
&lt;li&gt;iosApp—contains all the native code for the iOS application&lt;/li&gt;
&lt;li&gt;shared—contains all the shared code (eg business logic) to be used in both the Android and iOS platform
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_uRRMZyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwxfsxr6uv7vpm7qiyql.png" alt="Image description" width="880" height="341"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benefits of using KMM
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reduced development time and effort&lt;/li&gt;
&lt;li&gt;Improved code quality&lt;/li&gt;
&lt;li&gt;No Impact on performance&lt;/li&gt;
&lt;li&gt;Easy to use &lt;/li&gt;
&lt;li&gt;UI can be split for each target platform – the app will feel consistent with any given ecosystem&lt;/li&gt;
&lt;li&gt;Shared logic allows developers to add new features and fix bugs on both operating systems at the same time&lt;/li&gt;
&lt;li&gt;Easy to integrate: Whether it’s a fresh project or already existing project you can start integrating KMM anytime.&lt;/li&gt;
&lt;li&gt;Easy to learn: Kotlin syntax is very similar to other popular languages such as Swift and Java. So it’s pretty easy to learn and get started with KMM.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Finish line!
&lt;/h2&gt;

&lt;p&gt;And that's it for now. KMM is a good option if there is something that needs to be shared on different mobile platforms, as new options there are limitations that progressively will be fixed.&lt;/p&gt;

&lt;p&gt;Kotlin is an awesome language and Kotlin Multiplatform brings that to other platforms to help us create scalable and maintainable apps using a single codebase. Although the code-sharing is slightly less than that with other cross-platform solutions as UI cannot be shared, that gives us the advantage of creating a user experience that is in line with the platform’s guidelines and best practices.&lt;/p&gt;

&lt;p&gt;Basically think about KMM as a new option to share code between platforms that will be improved by the Kotlin community and you have the control of what needs to be shared and what’s not.&lt;/p&gt;

&lt;p&gt;Let’s Kotlin!&lt;/p&gt;

</description>
      <category>android</category>
      <category>ios</category>
      <category>app</category>
      <category>kotlin</category>
    </item>
  </channel>
</rss>
