
I am a skilled Android/Flutter Developer with over 5 years of experience in developing mobile applications for multiple platforms. My passion for creating high-quality mobile apps has helped me excel in my field, and I am always motivated to learn and grow as a developer.
In my career as a Mobile app developer, I have gained proficiency in a range of programming languages, including Kotlin, Java, Flutter, and Dart. I also have experience with Jetpack Compose, adaptive layouts with constraints, image assets, and Flutter Animations, making me well-equipped to handle UI/UX tasks.
I have worked with several frameworks and libraries such as JSONModel, Crashlytics, Kotlin Coroutines, Kotlin Flows, Android SDK, Google Maps, ADT, Eclipse, Android Studio, Gradle, Maven, MQTT Protocol, Hilt, Realm, SQLite, Retrofit, Volley, Okhttp, MVC, MVVM, MVI, Glide, Picasso, ButterKnife, RxAndroid, EventBus, Getx (State management), Bloc Statemanagement, Dagger, Hilt, Espresso, and Crashlytics. I have also worked with Analytics tools like Firebase and Google Admob.
In terms of repository management, I am well-versed in Git, Bit bucket, and Azure Devops. Additionally, I have experience with Health kit and BT connectivity, WebRtc for Real-time Communication, and Sockets.
Sr Flutter/Android Developer
Soft Radix Technologies pvt ltdSr Flutter Developer
Softradix Technologies pvt ltdSr Android Developer
Softradix Technologies pvt ltdAndroid Developer
Doozycod SystemsFlutter Developer
Doozycod SystemsAndroid Studio

Android SDK
.png)
Flutter

Dart
.jpg)
Kotlin

RxJava

Java 11

Java 8

Android

Java

Provider

GetX

Dio

http

Google Maps
.png)
Firebase

Firestore

Crashlytics

Analytics

In App Purchase

Stripe

Paypal

SQLite

Room Database

MongoDB

Supabase

Twilio

Websockets

Jetpack Compose

Kotlin Coroutines
Retrofit

Stripe
I am a skilled Android Developer and developing mobile applications for multiple platforms. My passion for creating high-quality mobile apps has helped me excel in my field, and I am always motivated to learn and grow as a developer.
In my career as a Mobile app developer, I have gained proficiency in a range of programming languages, including Kotlin, Java, Flutter, and Dart. I also have experience with Jetpack Compose, adaptive layouts with constraints, image assets, and Flutter Animations, making me well-equipped to handle UI/UX tasks.
I have worked with several frameworks and libraries such as JSONModel, Crashlytics, Kotlin Coroutines, Kotlin Flows, Android SDK, Google Maps, ADT, Eclipse, Android Studio, Gradle, Maven, MQTT Protocol, Hilt, Realm, SQLite, Retrofit, Volley, Okhttp, MVC, MVVM, MVI, Glide, Picasso, ButterKnife, RxAndroid, EventBus, Getx (State management), Bloc Statemanagement, Dagger, Hilt, Espresso, and Crashlytics. I have also worked with Analytics tools like Firebase and Google Admob.
In terms of repository management, I am well-versed in Git, Bit bucket, and Azure Devops. Additionally, I have experience with Health kit and BT connectivity, WebRtc for Real-time Communication, and Sockets.
Amino Move allows Amino Rewards members to earn FREE $AMO for improving their health and fitness. Earn $AMO for tracking your steps or try one of the daily running challenges to earn even more! Claim your spot on the leaderboard by completing 10k steps a day and see how you rank against other Amino members. More ways to earn for being active and engaging with Amino partners coming soon.
Earned $AMO tokens can be held, swapped, or redeemed in the Amino Catalog for amazing items and exclusive sports experiences. $AMO tokens have no monetary value and there is no purchase necessary to participate. No NFTs or cryptocurrency knowledge is required.
Okay, so my name is Ranjan, and I have more than 5 years of experience with Android and mobile development as well. And if I can say, what kind of projects I have worked on, so basically, I have worked on multiple domains. That includes high-tech, fintech apps, and real estate apps as well. And if I want to add more to it, my current project, which I'm working on right now, is a fitness tracker app, and it has 800 thousand users. And if I talk about daily active users, it can have 50 thousand daily active users as well. So, basically, it's an app where you can track your daily steps and then be rewarded in cryptocurrencies. It has multiple features, including a dashboard where you can manage your standing across other users. And you can withdraw your cryptocurrencies to your wallet or utilize them to purchase items on the catalog side. So yeah. And if I talk about the architectural thing I use, I basically prefer NVB and NV main code to consume those things into the app itself. I think that's pretty much about me.
To implementing you can see a customer panel for retrofit APIs. So we can do that with the app of retrofit itself. Sorry, the room DB itself. So you know it's kind of a database which will be providing us a kind of a structural way to secure data. We can say store data and be local to a user ID. And it helps us to maintain the proper kind of caching mechanism into the app itself. So that's one way to handle those things in the app. If we are having some kind of image caching or something, in that case, with the help of live dependency, we can cache those images as well. So if we have the proper image available we don't need to retrieve it again. So for managing we need to also manage some kind of insane status for the local stuff as well. So we can create a status which is stored into the database that we have stored. You can save the data from the retrofit. We are getting that into the app itself. Right? So that we can create a kind of status for it. Is it partially available for us? Or we can say status is sending. According to that we don't need to call the PLL manager. So that's what we can do to create some kind of cache and alternative. It's similar to if I give you an example, we can have similar to in Instagram itself. So they are managing the status of the data. They have that already. They load it there. So that's how they are managing with the help of pagination as well because we require some kind of pagination if we have multiple lists of data going on there. So according to that we can manage those things as well. So we will not repeat the same replay calls. So yeah.
So I think basically you can see as you know we require threads to work some stuff, or you can see the data flow into each piece itself. So in that case, we have multiple soft things. Our HR is one of the things that we have. So which will be having us to handle some long running tasks where you can see some network calls or IO calls as well into the app itself on the background that you can see. It's kind of a create to create that into the worker, you can see that as well. So in our next job, basically, we create a subscription for that. So with the help of that, we can create a streamer data. So we can directly listen to that, you can say the appropriate call or you can say you recall as well. To listen to data, you can say continuously in our app. So that's the thing we can do with the other server. We need to create a subscription and for the API calls. Or we are using the app sockets.
Dynamic feature module, with the help of Firebase remote configuration, we can create a module that delivers directly into the app. We've written a function to handle those things, allowing delivery without uploading to the Google Play Store itself. That's one way to do it. And for fallbacks on devices and Google Play Store issues, we can rectify those problems or note them. Additionally, if there's an issue in the grid itself, we can revert back to the older versions we have. We have the option to migrate to the older one in that case.
So, as you all know, if we select following these older principles into the Android itself. So in that case, we know we have three layers into the Nvidia and the data domain and the user itself. So, with the help of use cases, what we can define is to decouple the things as well. And other than that, we can also implement the D-I in the app. So it will also allow us to decouple things as well because we are not using the instances again and again. So that one thing we can do. And for the repository and the live data, what we can do is define the repository pattern. But we define the data, knowing where it will be coming from. It can be coming from local sources as well. It can be coming from the remote server itself. So we can drive the logic through it into the repository itself to let if the connection is available, so the data will be coming from the local. As it will be returned from the remote itself. So that's what we can do with the help of it to make things more easier and more abstract today. So what we can do is create some kind of services or we can send services for that. So it can help us to add some extra code to the model itself. So you can say into the view or into the repository itself. So we do directly accessing those things into the line, you can say, into the model itself. So that's what we can do to handle those things. So yeah. So the basic points are the implementation. So to help us create instances for the required things like the repository or the model or anything which will be required into the new model itself or into the domain name itself. Second thing is, also, we need to create the custom kind of mappers for it. So it will help us to maintain a flow where the data will be flowing. Like, where the data will be coming from. Is it from local or from the remote itself. So yeah.
Okay. So for the best example, I can see, with the help of you, if there is no third-party documentation available. So it's making it more difficult for us to implement those things because we need some kind of proper documentation or some kind of understanding of that code, how it's working, or into the SDK itself. Right? So we need to go through the SDK as well, like what method is used for what purpose in the app. And so after going through the SDK itself, we can implement those things according to our app as well. But, yeah, if there is some kind of documentation available, then it will be more easy for us to download the things. And yeah. So this will be my approach, and I will also try to find some examples if available on the internet. You can see it to see if there are any examples available. If that is not the case, like we haven't found anything on the internet, then the only thing is to go through the SDK itself, and we use those methods we have in the SDK to do that because I'm assuming there are some comments as well in the SDK itself. So, that's what I'm assuming to add the LTV implementation. Some kind of comments, including related to that method itself, can be saved. That'd be another thing we can do.
I think it should be more like not the context itself. I think it should be like activity there because context can be like having you can say we are using some kind of fragment. So in that case, this code may create some issues. So yeah. And other than that, if we want to like pass some internal data, but then do it so we can't do that in as well. And so just wanted to make it safe within different parts of the application. It is more accessible if you like to read some activity level or you can see application level to start the activity. So that will be a great approach for me. So yeah. I would suggest to like add activity or fragment itself to access the start activity tool. So, yeah, if there is an activity so that contact should be activity and there is a fragment. So then it should be related to the fragment itself. So that will be a data point for me.
The user data is not initialized. So first of all, it's not going to call that database dot save dot hit options. You can say the data we have in it. And so other than that, it will be creating it will be calling the notes and the data we have. Right? And another issue I'm seeing is there's a backslash into the user data itself, which will be not to make us create or you can say call that log file itself. So if it's possible to add the backslash into the double quotes itself, or we can just directly remove those things because we don't require the backslashes there. So yeah. That will be the output of that same function.
So, first of all, I would suggest you use some kind of filtering that don't use cluster images into the meeting. So, you should be using the web or I would suggest you do the SMG. Right? So you can convert the last size into a number itself and don't use the unused. You can save third-party live versions in the APT and try to find some smaller options to it. So it can make our app access, you can say, create some less in this size as well as well. Other than that, we should be using the unified enable to, like, enable it to the URL itself so it can remove unnecessary initialization, the ones which will be like, you know, to use anywhere and the unmute method as well. So all unknown resources can be, like, that is, you can say, removed from the APK bundle itself. Other than that, we can use shrink resources as well if we want to. But, it's like, not mandatory because it can create resources into low quality as well. So, yeah, that's the other thing we can do. Other than that, I would suggest using the code certification and the nullified enable from the add-on itself. And, yeah, if we use APK, then it will have more size than the AR bundle if we are uploading that to the Play Store. And it is, you know, it will be also a requirement. We can't say it's required. It can be, say, like, a preferred way to upload some app bundle to the Play Store on that particular app itself. So it makes us distribute distribution available for the larger available with the and put the last phone, you can say, less sizing to the event field itself. So we can do.
So, ProGuard, as you know, if we have properties, we are referring to where settings are stored, specifically the vehicle ID settings. You can have the integrated MD settings and the ProGuard card and the property wrapper. There is also the side, the ProGuard card and the configuration will be there. And those should also return into the several billing itself to allow our app to be more secure over reverse engineering, having our code equal to other things as well. So, that's the other thing we can do to make our code more difficult to recompile and access our APD code. So that's the other thing we can do.
Okay, as you know, Dagger is a way to implement dependency injection into the app itself. So basically, if we want to implement that, I prefer to use the link itself into the Android app. So we require a hybrid build app. The annotations we have are useful. There are other things we can do. We need to create an object if we are using Kotlin to create the app module and the Retrofit on the settings at home module. We can provide it according to what's left. If I'm requiring those things, I can provide them once with the current kind of context using the annotation of single time. I need to create a provider and the modules where we want to provide any kind of instance when we access those things. I am accessing the repository in a new model. We can create them injectable into that new model itself, or in the new model if we are using Jetpack Compose in that case. This also helps us to decouple things and follow the solid principles deal. Lower mobile, for instance, cannot be dependent on lower mobile systems. That's why dependency injection is a necessary thing to have in the Android app.