Native Android development in Kotlin and Java.
- Technical leadership on native Android projects
- Expertise in developing for the Android user experience including best practices for permissions, notifications, back button behaviour, and other UX
- High attention to detail with regards to UI implementation and striving for pixel-perfect layouts on Android using XML views and/or Jetpack Compose, depending on the project
- Architecting Jetpack Compose UIs to support previews with mock data, allowing us to develop UI quickly and build for happy and sad paths easily
- Building Design Systems that support both light and dark appearance modes to support teams in building out views
- Building White Label Android apps, enabling support for multiple themes from a single codebase
- Building Android apps that support multiple flavours and build variants, e.g. Development, Staging and Production app flavors, as well as white labelling
- Working with type-safe navigation in both XML and Jetpack Compose, and helping teams migrate older versions of Compose navigation to the newer, type-safe versions
- Thorough understanding of the OAuth spec from a full stack perspective (backend, Android, web, iOS), including implementing OAuth 2.1 with PKCE authentication using AppAuth on Android
- Extensive experience with Android SDK versions and have been building functionality to support down to Lollipop (and previously Jellybean)
- Thorough understanding of the Android operating system and Android's explicit and implicit intent system to optimize speed of development and provide a user experience Android users are expecting
- Building support for deep link functionality including deferred deep linking
- Working with a variety of libraries and APIs including: Firebase; error trackers; networking libraries like Retrofit, Ktor, Volley; tracking libraries like Mixpanel; chat support SDKs like Intercom, etc.
- Working with push notifications and allowing users to configure notifications based on type
- Networking, including REST with JSON, web sockets, gRPC, and Protobuf
- MVVM architecture with LiveData and architecture components
- MVVM architecture with coroutines and flows
- Reactive programming with Kotlin flows and LiveData with experience in Rx
- Data persistence in SQLite with Room database and SQLDelight
- Implementing asynchronous worker tasks with WorkManager
- Building location-based functionality including "near me" functionality and working with maps
- Building custom UI for audio/video recording
- Building web view applications and enabling communication between the web view and native layer
- Unit testing in Java and Kotlin, including with coroutines, JUnit (4 & 5), Mockk
- Automated UI testing with Espresso and Appium
- Setting up Android lint and Kotlin lint to ensure code style consistency in the project
- Configuring build tasks with Gradle
- CI/CD setup for running tests, lint and other tasks for Git workflows, as well as automating deployments and code signing for Firebase App Distribution and the Google Play Store
- Building apps that use Kotlin Multiplatform Mobile to build apps in Kotlin for both Android and iOS