Our Android tech stack for mobile app development
In this article, we will take a look at some of the technologies that we in Goodrequest use on a daily basis to make Android development more efficient, effective, and at least a little more enjoyable.
Android tech stack is constantly evolving. From programming languages like Kotlin to libraries like Jetpack Compose, there are a variety of tools and technologies that developers use to build high-quality apps.
At Goodrequest, we take a very selective approach when it comes to incorporating new technologies into our development process. We understand that new technologies can be very exciting, but they also come with their own set of challenges. We prefer to stick with technologies that we know will get the job done. This approach has served us well in the past, and we believe it will continue to do so in the future.
Programming language – Kotlin
Kotlin is a powerful programming language that is fully compatible with Java and is officially supported by Google for Android development. We love it mainly for its improved syntax, conciseness, built-in null safety, extension functions and data classes. These characteristics make it a great choice for developers looking to improve the readability and maintainability of code.
Kotlin was created by a team of developers at JetBrains, a company known for creating development tools such as IntelliJ IDEA. Shortly after initial release, we recognized its quality and started using it. Now, we are organizers of the only Kotlin User Group in Slovakia where developers come together to share their programming experience involving Kotlin and its ecosystem.
Http client – OkHttp
In almost every Android application there is a need to send or receive HTTP request between mobile and backend. One of the most popular libraries between developers that fulfils this need is Retrofit. Retrofit is high-level abstraction build on top of OkHttp, which implies, that it should be easier to use. We observed the exact opposite. Especially due to the lack of flexibility (mapping between request and response) and use of Annotations for code generating, we decided to go one layer lower and use OkHttp with our own extensions and json parsing system which solves these drawbacks. OkHttp has many other useful features (connection pooling, gzip decompression, response caching...) hidden under the hood so the developer does not have to take care of everything manually, if he doesnt want to. This library has been supported for a long time and has proven quality over the years, which is why it was number one in our selection.
UI Framework – Compose
An important factor in the success of a mobile application is the user interface, which is closely related to the user experience. We are currently actively using Jetpack Compose for UI programming. Compose is a modern UI toolkit that allows us to create Android applications using a reactive programming. It's a great choice for developers who want to create modern and engaging user interfaces for their apps. We started to use Compose in one of it's early alpha versions, where we realized how it can improve our codebases and speed up development.
One of the main reasons of our more efficient development using Compose is the transition to a single activity model with multiple composables. The logical first step in transitioning from a multi-activity model was to use the offered solution - Jetpack Compose Navigation created by Google. While using this solution, we realized that it does not give us what we expected from modern navigation library (e.g. full control over backstack, passing more complex data types, simple deep-linking…). About the same time we noticed that achieving this expectations does not have to be difficult, so we created our own navigation system. In certain ways, it's similiar to JCN but it fulfils all our requirements in much simplier manner, written using fraction lines of code comparing to Google's solution.
Tools – Firebase
Firebase is package of many useful features, we are utilizing only few of them, mostly Firebase Crashlytics and Firebase Cloud Messaging.
Firebase Crashlytics automatically monitors, reports and provides detailed information about the crash, including the stack trace and the state of the app at the time of the crash. This can help us to quickly identify and fix issues in our applications. Without it, we would be completely blind when it comes to error analysis. That's why we always include Firebase Crashlytics in every project from the beginning, ensuring that we have the necessary insights to improve the performance and stability of apps.
Push notifications allow apps to send alerts, messages, and other information to users even when the app is not actively running in order to increase engagement or in use-cases when time-sensitive communication with client is needed. To achieve effective push notifications in our Android apps, we rely on Firebase Cloud Messaging.
Deployment – Bitrise
Bitrise is a cloud-based continuous integration and continuous delivery (CI/CD) platform that helps developers automate the building, testing, and deployment of their mobile and web applications. With its user-friendly interface and powerful features, Bitrise streamlines the software development process and helps us deliver products faster. Additionally, it provides a wide range of integrations with other tools such as Bitbucket, GitLab, and Slack, making it easy to integrate into existing development workflow.
At GoodRequest, we pride ourselves on our ability to handle a wide range of projects. Each project is unique, and often requires a different approach to development, so we also have experience with Android Jetpack technologies despite the fact, that we do not use them every day. Whether we're working on a simple app or a complex enterprise solution, we have the experience and expertise to deliver a top-quality product via choosing the right tech stack.