Android Things 1.0 Behavior Changes

Along with new features and capabilities, Android Things 1.0 includes a variety of system and API behavior changes. This document highlights some of the key changes that you should understand and account for in your apps.

Unsupported Features

Android Things is optimized for embedded devices which may not contain the same feature set as an Android phone or tablet. For example, graphical user interfaces are optional as not all devices include a display.

The following table outlines the set of Android features not currently supported by Android Things devices, and the affected framework APIs:

Feature API
System UI
(status bar, navigation buttons, quick settings)
NotificationManager
KeyguardManager
WallpaperManager
VoiceInteractionService SpeechRecognizer
android.hardware.fingerprint FingerprintManager
android.hardware.nfc NfcManager
android.hardware.telephony SmsManager
TelephonyManager
android.hardware.usb.accessory UsbAccessory
android.hardware.wifi.aware WifiAwareManager
android.software.app_widgets AppWidgetManager
android.software.autofill AutofillManager
android.software.backup BackupManager
android.software.companion_device_setup CompanionDeviceManager
android.software.picture_in_picture Activity Picture-in-picture
android.software.print PrintManager
android.software.sip SipManager

Common Intents

Android Things doesn't include the standard suite of system apps and content providers. Avoid using common intents as well as the following content provider APIs in your apps:

CalendarContract
ContactsContract
DocumentsContract
DownloadManager
MediaStore
Settings
Telephony
UserDictionary
VoicemailContract

Runtime Permissions

Declare permissions that you need in your app's manifest file.

The granting of app permissions is done differently for Android Things than for typical Android apps since many IoT applications do not require a user interface or input device. Permissions are granted using Android Studio or the Android Things Console.

When running an app from Android Studio, all permissions (including dangerous permissions) are granted at install time. This applies to new app installs and updated <uses-permission> elements in existing apps. You can use the adb tool to grant or revoke permissions for testing.

When you are ready to distribute your apps using the Android Things Console, you grant the dangerous permissions (instead of the end user) for all apps as part of the build creation process. You can override this during development, but not on actual products; end users cannot modify these permissions.

Native Code

Android Things is compatible with the Android NDK for including C/C++ code into your app. However, since Android Things devices are typically memory constrained, the platform requires apps to keep native libraries inside the APK at runtime using the extractNativeLibs manifest attribute.

<manifest ...>
  <application
    android:extractNativeLibs="false" ...>
    ...

  </application>
</manifest>

Review the guide on integrating native code for more details.

Google Services

Android Things supports a subset of the Google APIs for Android. The following table breaks down API support in Android Things:

Supported APIs Unavailable APIs
Awareness
Cast
Google Analytics for Firebase
Firebase Authentication1
Firebase Cloud Messaging (FCM)
Firebase Crash Reporting
Firebase Realtime Database
Firebase Remote Config
Firebase Storage
Fit
Instance ID
Location
Maps
Nearby Connections
Nearby Messages2
Places
Mobile Vision
SafetyNet
AdMob
Google Pay
Drive
Firebase App Indexing
Firebase Dynamic Links
Firebase Invites
Firebase Notifications
Play Games
Sign-In

1. Does not include the open source FirebaseUI Auth component.
2. Does not include modes which require the user content dialog.

Each release of Android Things bundles the latest stable version of Google Play Services, and requires at least version 11.0.0 of the client SDK. Android Things does not include the Google Play Store, which is responsible for automatically updating Play Services on the device. Because the Play Services version on the device is static, apps cannot target a client SDK greater than the version bundled with the target release.