Android Things is an operating system released by Google for IoT and embedded devices. It's based on Android, which in turn uses the Linux kernel. It therefore has support for multitasking and virtual memory. It's meant to fit on devices with a limited memory footprint, although 512 MB is the minimum RAM requirement. Android Things therefore targets a different IoT segment compared to microcontroller-based IoT devices.
For Android developers, building IoT apps will be easier via Android Things. They can use familiar tools and interfaces: Android Studio, Android SDK, Google Play Services, Firebase and Google Cloud. Android libraries including Kotlin and RxJava can be used. In addition, Google certifies compatible System-on-Modules (SoMs) and provides the Board Support Package (BSP). Android Things Console will enable managed firmware and app updates to IoT devices.
Why should I use Android Things for my IoT device?
If you're an Android developer, it's going to be easy getting into IoT app development with Android Things. You can use familiar tools and interfaces, along with Firebase and Google Cloud Platform. Google claims,
If you can build an app, you can build a device
Android Things can run on both 32-bit and 64-bit platforms, on both ARM and x86-based processors. Google certifies SoMs that work with Android Things and also provides the necessary BSPs. The modular design of SoMs enables developers to use them on a development board while prototyping and reuse them on any custom carrier board designed for end products. Development boards such as NXP iMX7D and Raspberry Pi 3 are available for fast prototyping. Android Things Console enables easy management of over-the-air (OTA) firmware updates in a secure manner without service interruption.
At a layer above the OS, Weave comes in to enable different devices to communicate using shared schemas. Android Things comes with built-in Weave connectivity. It's to be noted that Weave can be used even without Android Things.
How is Android Things different from Android?
Android Things uses the same lower layers of the stack as Android. For the application framework, while some APIs are not available in Android Things, the Things Support Library has been added. This library provides low-level hardware access (GPIO, PWM, I2C, SPI, UART, etc.), which is not possible with Android.
System apps and content providers typical on Android phones are not installed. In general, APIs that are not available are those that require user input or authentication. Displays are optional. There's no Play Store access for users to download and install apps. As developers, you will probably ship Android Things and your apps on your own custom hardware.
What's part of the Things Support Library?
There are three parts to this:
- Peripheral I/O API: Allows apps to access and control sensors and actuators using standard interfaces such as GPIO, PWM, I2C, SPI and UART.
- User Driver API: Allows developers to extend framework services. Apps can inject hardware events that other apps can use via Android APIs. For example, a GPS module can update the framework of current location and other apps can use location manager APIs that are already part of Android.
- Cloud IoT Core: Enables IoT data flow management within Google Cloud Platform.
How does Android Things compare against MCU-based IoT platforms?
Android Things on a dual-core CPU with 512 MB RAM is not the right pick for just blinking LEDs or collecting and sending few bytes of data. It's better suited for gateways and edge devices that require local processing. Running Machine Learning inferences on the device is a possible use case.
This also means that Android Things is unsuitable for a range of processors from 8-bit MCUs to 32-bit ARM Cortex M-series cores. Devices powered by Android Things will also consume much more power than MCUs, although they may be better at implementing security.
What are the hardware platforms that Android Things supports?
As on May 2018, the following are supported for production:
- NXP i.MX8M (ARM Cortex A53, 64-bit + QC7000Lite GPU)
- Qualcomm SDA212 (ARM Cortex A7, 32-bit + QC Adreno 304 GPU)
- Qualcomm SDA624 (ARM Cortex A53, 64-bit + QC Adreno 506 GPU)
- MediaTek MT8516 (ARM Cortex A35, 64-bit)
Following are for prototyping and testing only:
- NXP i.MX7D (ARM Cortex A7, 32-bit)
- Raspberry Pi 3 Model B (ARM Cortex A53, 64-bit)
We can note that this covers both 32-bit and 64-bit processors. While Intel Edison and Joule platforms support Android Things, the latter's website no longer lists them. NXP i.MX7D is an SoC, and it has an equivalent SoM and development board.
Both NXP and Intel SoMs include Wi-Fi and Bluetooth for connectivity. Android Things also supports IEEE 802.15.4 for LoWPAN connectivity for which Nordic nRF52840 is a supported platform.
What tools and resources are available for working with Android Things?
The following may be a starting point for developers:
- Android Studio command line (CL) tools: adb, apkanalyzer, dumpsys, logcat ...
- android-things-setup-utility: CL tool to flash image
- Android Things Console: manage images and push updates to devices
- pio: access Peripheral I/O via adb shell (dev/debug)
- lowpanctl: access LoWPAN via adb shell (dev/debug)
- Android Things native library: access Peripheral I/O natively in C/C++ when extra performance is needed
- Android Things main website and docs
- Code samples
- Peripheral Driver Library: open source driver code contributed by community that provide higher-level API on top of Peripheral I/O API
- Google's IoT Developers Community on Google+
- Hackster.io/google to get inspired by community projects
When using Intel hardware, UPM and MRAA libraries can simplify peripheral I/O interfacing. They offer an alternative to Google's Things Support Library and Peripheral Driver Library.
Google refocuses Android Things as a platform for OEM partners. Over the last year, Google has already been working with vendors of smart speakers and smart displays, shipping Android Things with Google Assistant built-in. Therefore, on the public developer platform, there won't be any further support for SoMs based on NXP, Qualcomm, and MediaTek hardware. On the Android Things Console, projects based on NXP i.MX7D and Raspberry Pi 3B will be limited to 100 devices for non-commercial use.
- APC Australia. 2017. "Google goes IoT with Android Things." April 26. Accessed 2018-01-05.
- Android Developer. 2018. "Android Things." Accessed 2018-01-05.
- Android Things. 2020. "FAQ." Android Things, December 15. Accessed 2021-01-02.
- Antonimuthu, Rajamanickam. 2015. "Project Brillo and Weave for IoT." YouTube. May 29. Accessed 2018-01-05.
- Beare, Bruce J. 2017. "Useful Packages and Modules (UPM) and MRAA support for Android Things has arrived." Intel Software Blog. April 26. Accessed 2018-01-05.
- Google Developers YouTube. 2017a. "Android Things: The IoT Platform for Everyone (GDD Europe '17)." YouTube. September 5. Accessed 2018-01-05.
- Intel Software. 2018. "Android Things on Intel Architecture." Accessed 2018-01-15.
- Janakiram MSV. 2016. "10 Things To Know About Android Things - Google's Latest IoT Device OS." Forbes. December 18. Accessed 2018-01-05.
- Karwa, Anand. 2015. "Google Brillo – An Internet Of Things OS That Runs On 32 MB RAM." Trak.in. May 23. Accessed 2018-01-05.
- Mahmoudi, Charif. 2017. "IoT With Google's Android Things." Hackster. October 19. Accessed 2018-01-05.
- NXP Support. 2018. "Pico i.MX6UL/7D SOM and Development Platform." Accessed 2018-05-29.
- Piekarski, Wayne. 2016. "Announcing updates to Google’s Internet of Things platform: Android Things and Weave." Android Developers Blog. December 13. Accessed 2018-01-15.
- Rapaka, Venkat. 2018. "New Products At CES powered by Android Things." Android Developers Blog. January 8. Accessed 2018-01-11.
- Roettgers, Janko. 2013. "Why the time has come for Android @Home to finally make a splash." Gigaom. May 7. Accessed 2018-01-15.
- Sims, Gary. 2017. "What is Android Things? – Gary explains." Android Authority. January 13. Accessed 2018-01-05.
- Smith, Dave. 2017a. "Just Android Things." Realm Academy. June 15. Accessed 2018-01-05.
- Smith, Dave. 2017b. "LoWPAN on Android Things." Android Developers Blog. December 14. Accessed 2018-01-05.
- Smith, Dave. 2018a. "Android Things Developer Preview 7." Android Developers Blog, March 6. Accessed 2018-03-07.
- Smith, Dave. 2018b. "Say Hello to Android Things 1.0." Android Developers Blog, May 7. Accessed 2018-05-29.
- Smith, Dave. 2019. "An Update on Android Things." Android Developers Blog, February 12. Accessed 2021-01-02.
- Xinyu, Chen. 2017. "Android Things and Voice Assistant." NXP. April 20. Accessed 2018-01-05.
- Smith, Dave. 2017a. "Just Android Things." Realm Academy. June 15. Accessed 2018-01-05.
- Kwiecień, Jacek. 2017. "Getting Started with Android Things – GDD Way." Schibsted. September 25. Accessed 2018-01-05.
- Badve, Ajinkya. 2017. "Getting started with Android Things with Raspberry Pi (part 1)." Medium. November 19. Accessed 2018-01-05.
- Azzola, Francesco. 2017. "Restful API Interface Using Android Things." DZone, IoT Zone. November 18. Accessed 2018-01-05.
- Mechling, Gautier. 2017. "IoT - Home automation with Android Things and the Google Assistant." Nilhcem. June 12. Accessed 2018-01-05.
- Google Developers YouTube. 2017b. "Developing for Android Things Using Android Studio (Google I/O '17)." YouTube. May 18. Accessed 2018-01-05.
- Android Runtime
- IoT Operating Systems
- Linux Kernel