Building TV Apps !!
If building mobile apps interests you alot, then building applications for Android TV or Firestick will surely drive you crazy. I personally chose this field of development as I wanted to explore new dimension of tech in building apps.
Today we will be talking about what are the major challenges you will face when we develop Android TV applications.
Let’s take a look at the differences you may face when developing Android TV applications compared to Android mobile world. Even though both development ‘playing fields’ are based on the same core technology, the essence of the game, and the rules, are quite distinct.
Android TV or Firestick is obviously a smart device. There are several fundamental differences between developing for remotely controlled devices (we can’t really just call them “TV sets”) compared to developing for mobile devices, and you will soon become aware of them. But here’s the heads-up 👍
- User interaction in the ‘TV’ environment is achieved by handling Remote Control key-initiated events, as opposed to handling simple touches, clicks or swipes made on the device in the mobile world. This introduces extra complexity and an extra ‘risk’ step as regards integration and device reaction time (Key DPAD_UP, Key DPAD_DOWN, Key DPAD_LEFT, Key DPAD_RIGHT, Key DPAD_OK and obviously back key).
- UI elements are focusable.
This is a completely unique concept when developing remote-controlled apps compared to how mobile apps are used. The entire process of handling focus of the UI elements can be a challenge in itself, and is quite a ‘culture change’ from mobile. You need to develop the underlying logic of how to highlight focus elements and also to devise and develop for the logic of how the user moves between elements and blocks of elements with the 5-key RCU.
In your activities, you need to override this method , if you have to develop some custom user navigation journey.
- Framework shift: Android TV provides the “Leanback Framework” for developing applications that are meant to run on remote-controlled devices. The physical and mental/intellectual differences in the user experience of using a mobile compared to watching the living room TV must not be underestimated.
Now let’s talk about the cool stuff, that comes when developing to tv 😎
- Simplified design. Given the fact that your apps are going to be remote-controlled in the TV context, the user interaction is much simpler. Hence the design is simplified, and easier to use for a wide variety of people. This relates to how the UI shall look and feel, performance benchmarking etc.
- No screen orientation issues. Yippee, no more handling of orientation changes — this is one major headache removed! Goodbye to #onOrientationChanged 😜
- No hassle with multiple screen support. No more requirement to create dozens of layouts to support multiple screen orientations and resolutions.TV are always in 16:9 resolution 😀 (1920 * 1080 , 3840*2160 etc)
- No battery concerns and no network (data) usage concerns. TV’s are pretty much always plugged into the mains power socket, and as the network connection is either wired or Wi-Fi, there’s no data plan affected. So you don’t have to worry about whether a user streams/downloads on mobile data or on the Wi-Fi / home network. This extra always-on stability is quite useful, to developers as well as to viewers.
- No Competition set up : The application you will be developing in the TV environment will pretty much appear “exclusively” on the STB. This means it’s not competing with other apps for hardware resources. Instead, the TV app competes with other set up box-based tasks and functions, such as middleware, OS processes and other items that consume memory, bandwidth, etc.
Challenge zone : It’s where it gets ugly, messy , tricky or something that can drive you nuts.
- The TV environment comes with some serious limitations. Some TV devices will run AOSP which means no proprietary drivers and a lot of things have to be implemented “from scratch”.
- You might inherit legacy Android versions. Some TV boxes you encounter in a TV deployment will run an old Android version — such as, KitKat or Lollipop — whatever the latest Android version is (Till now ~60% of TV in India runs on Android OS 5 or Android OS 6 👹) . So all cool new Android APIs won’t be available for the development, and the latest zippy apps can’t be used by some users. While many people upgrade their mobile phones obsessively each year, that old reliable set-top can stay exactly in the same spot for ages.
- Hardware limitations: Most TV devices, which can be deployed into potentially millions of homes, have much lower-end hardware components compared with low-end mobile devices. Moreover, a TV does much more than just run Android and your app (eg, it has to scan for available tv channels, transcode analogue into digital stream formats, or, record a stream, among other things). All this means there is less hardware resource available, which in turn means slower performance of your app. So you need to build a smart app which runs smoothly on all of these low end devices having low RAM, low memory etc.
- Less flexibility and code reusability: A typical TV application is custom developed for that particular device and remote control, all specified by the service provider or operator. Moreover there are less number of github resources or open source codes, it’s just Leanback Sample code 😜
- When developing for an AOSP based TV there will be a tight dependency on the AOSP / firmware development team since they will provide the drivers and additional APIs missing on AOSP.
But beyond these challenges, there lies the horizon of unlimited reachability , engagement and seamless user experience. So, if you are ready to take it all in your stride, and adapt with expertise in Android (Kotlin, Java, Rx, Android Architecture Components) you can jump on to this roller coaster ride to the new era in TV in viewers’ living rooms as well as on-the-go.
Well let’s not be afraid. Let’s do it together. In my coming blog series we will build a simple easy to start app for TV. Be prepared with some theory to go on such as :
- https://developer.android.com/reference/kotlin/androidx/leanback/widget/VerticalGridPresenter
- https://developer.android.com/reference/androidx/leanback/app/VerticalGridSupportFragment
- https://developer.android.com/reference/androidx/leanback/app/RowsSupportFragment
- https://developer.android.com/reference/kotlin/androidx/leanback/widget/ListRowPresenter
Stay Tuned, for upcoming blog series on TV app development !!