On this page
- Update Your App's Manifest File
- Leverage Support for Multi-Window Mode
- Support the Keyboard, Trackpad, and Mouse
- Check for Networking Requirements
- Use Backup and Restore Effectively
- Update the NDK Libraries
- Plan Support for New Android Features
- Resolve Issues with Screen Size
- Resolve Issues with Camera Image Previews
- Test Your App
- Set Up ADB
- Additional Learning Materials
Google Chromebooks now support the Google Play Store and Android apps. This document describes some ways that you can optimize your Android apps for Chromebooks.
Update Your App's Manifest File
To begin optimizing your Android app for Chromebooks, update your manifest file
AndroidManifest.xml) to account for some key hardware and software
differences between Chromebooks and other devices running Android.
As of Chrome OS version M53, all Android apps that don't explicitly require the
feature will also work on Chrome OS devices that support the
android.hardware.faketouch feature. However, if you want your app
to work on all Chromebooks in the best possible way, go to your manifest file
and adjust the settings so that the
feature is not required, as shown in the following example. You should also
review your mouse and keyboard interactions.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <!-- Some Chromebooks don't support touch. Although not essential, it's a good idea to explicitly include this declaration. --> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> </manifest>
Different devices often have different sensors available in them. See the Sensors Overview document for an overview of all sensors that the Android platform supports. Although Android handheld devices may have GPS and accelerometers, sensors are not guaranteed to be available in every Chromebook. However, there are cases where the functionality of a sensor is provided in another way. For example, Chromebooks may not have GPS sensors, but they still provide location data based on Wi-Fi connections. If you want your app to run on Chromebooks, regardless of sensor support, you should update your manifest file so that none of the sensors are required.
Note: If you don't require a particular sensor for your app but still use measurements from the sensor when it's available, make sure you dynamically check for the sensor's availability before trying to gather information from it in your app.
Some software features are unsupported on Chromebooks. For example, apps that provide custom IMEs, app widgets, live wallpapers, and app launchers aren't supported and won't be available for installation on Chromebooks. For a complete list of software features that aren't currently supported on Chromebooks, see incompatible software features.
Leverage Support for Multi-Window Mode
The implementation of Android apps on Chrome OS includes basic multi-window support. Instead of automatically drawing over the full screen, Android renders apps on Chrome OS into layouts that are appropriate for this form factor. Google provides support for the most common window layouts:
- Portrait – Similar to Nexus 5.
- Landscape – Similar to Nexus 7.
- Maximized – Uses all available screen pixels.
In addition, end users are presented with window controls to toggle among all available layouts. By choosing the correct orientation option, you can ensure that the user has the correct layout upon launching the app. If an app is available in portrait and landscape, it defaults to landscape if possible. After this option is set, it is remembered on a per-app basis. Google recommends that you test your app to ensure that it handles changes in window size appropriately.
Support the Keyboard, Trackpad, and Mouse
All Chromebooks have a physical keyboard and a trackpad, and some Chromebooks have a touchscreen as well. Some devices can even convert from a laptop to a tablet.
Many existing apps already support mouse and trackpad interactions with no extra work required. However, it's always best to adjust your app's behavior appropriately when users interact with it using a trackpad instead of a touchscreen, and you should support and distinguish between both interfaces properly. Given the support for physical keyboards, you can now provide hotkeys to enable your app's users to be more productive. For example, if your app supports printing, you can use Ctrl+P to open a print dialog.
Check for Networking Requirements
Chromebooks run the entire Android OS in a container, similar to Docker or LXC. This means that Android will not have direct access to the system's LAN interface. Instead, IPv4 traffic will pass through an internal layer of network address translation (NAT), and IPv6 unicast traffic will be routed through an extra hop. Outbound unicast connections from an Android app to the internet should mostly work as-is; but in general, inbound connections are blocked. Multicast or broadcast packets from Android will not be forwarded to the LAN through the firewall.
As a special exception to the multicast restriction, Chrome OS runs a service that forwards mDNS traffic between Android and the LAN interface, so the standard Network Service Discovery APIs are the recommended way to discover other devices on the LAN segment. After finding a device on the LAN, an Android app can use standard TCP or UDP unicast sockets to communicate with it.
IPv4 connections originating from Android will use the Chrome OS host's IPv4 address. Internally, the Android app will see a private IPv4 address assigned to the network interface. IPv6 connections originating from Android will use a different address from the Chrome OS host, as the Android container will have a dedicated public IPv6 address.
Use Backup and Restore Effectively
One of the strongest features of Chromebooks is that users can easily migrate from one device to another. That is, if someone stops using one Chromebook and starts using another, they simply have to sign in, and all of their apps appear.
Tip: Although it's not mandatory, backing up your app's data to the cloud is a good idea.
Chromebooks can also be shared among a large number of people, such as in schools. Since local storage is not infinite, entire accounts—together with their storage—can be removed from the device at any point. For educational settings, it's a good idea to keep this scenario in mind.
Update the NDK Libraries
If your app uses the Android NDK libraries, and its target SDK version is 23 or higher, ensure that text relocations are removed from both the ARM and x86 versions of your NDK libraries, as they're not compatible in Android 6.0 (API level 23) and higher. By leaving text relocations in your NDK libraries, you may also cause incompatibility errors with Chromebooks, especially when running on a device that uses an x86 architecture.
Note: To view more details on updating NDK libraries properly, see the Runtime section of the Android 6.0 Changes document.
Plan Support for New Android Features
Android apps on Chromebooks initially ship with APIs for Android 6.0 (API level 23). By following the best practices outlined above, your app is likely to be compatible with the multi-window improvements introduced in Android 7.0 (API level 24). It's good to plan support for the APIs and behaviors available as of Android 7.0, which feature several improvements. For example, multi-window support is better integrated, and you're able to resize activities arbitrarily, making them feel more natural. You can also access APIs for drag-and-drop operations across apps and mouse cursor control.
Resolve Issues with Screen Size
To ensure that your native applications are able to display their entire contents to the user, read the recommended guidelines and things to watch out for. See Screen Size Compatibility for Chromebooks.
Resolve Issues with Camera Preview Images
If your app meets the following criteria, you might encounter an issue with preview images taken by the device’s camera:
- Shows preview images taken with the device's camera
- Does not implement multi-window support
The issue is that camera preview images might appear stretched or distorted. Closing and reopening the app might fix the issue temporarily.
To prevent this issue from occurring, you can implement multi-window support.
Test Your App
To load your app onto your Chromebook for testing, you must enter Developer mode on your Chrome OS device and enable unknown sources. See the Putting your Chrome OS Device into Developer Mode document for detailed instructions about moving your device into Developer mode. After your device is in Developer mode, you can go to your Chrome settings and select Enable Unknown Sources under the security in app settings.
After enabling Developer mode, you can load an Android app onto your Chrome OS device using one of several methods. For more details, see the Load Your App section of the Loading Apps on Chromebooks page.
Note: To ensure that your Android app works well on a variety of Chromebook devices and available form factors, Google recommends that you test your app on an ARM-based Chromebook, an x86-based Chromebook, a device with a touchscreen and one without one, and on a convertible device (one that can change between a laptop and a tablet). To view the full list of supported devices, see the Chrome OS Device Support for Apps page.
Set Up ADB
Before attempting to set up an ADB connection, you must start your Chrome OS in Developer Mode so that you have the ability to install Android apps on the Chromebook.
Caution: After switching your Chrome OS device to Developer mode, it restarts and clears all existing data on the device.
To set up ADB, complete the following steps:
- Press Ctrl+D to start your device.
- Finish the setup process.
- Log into your test account.
- Accept the Google Play Store terms and service conditions.
Configure the firewall
To configure the Chrome OS firewall to allow incoming ADB connections, complete the following steps:
- Press Ctrl+Alt+T to start the Chrome OS terminal.
Type shell to get to the bash command shell:
crosh> shell chronos@localhost / $
Type the following commands to set up developer features and enable
disk-write access for the firewall settings changes:
chronos@localhost / $ sudo crossystem dev_boot_signed_only=0 chronos@localhost / $ sudo /usr/libexec/debugd/helpers/dev_features_rootfs_verification chronos@localhost / $ sudo rebootThe sudo reboot command restarts your Chromebook.
Note: You can press the Tab key to enable autocompletion of file names.
Note: You must complete this procedure only once on your Chromebook.
After your device restarts, log in to your test account and type the
following command to enable the secure shell and configure the
chronos@localhost / $ sudo /usr/libexec/debugd/helpers/dev_features_sshYou can now exit out of the shell.
Check the IP address of your Chromebook
To verify the IP address of your Chromebook, complete the following steps:
- Click the clock icon in the bottom-right area of the screen.
- Click Settings.
- The Internet Connection section in the Settings area lists all of the available networks. Select the one that you want to use for ADB.
- Take note of the IP address that appears.
Enable ADB debugging
To enable ADB debugging, complete the following steps:
- Click the clock icon in the bottom-right area of the screen.
- Click Settings.
- In the Android Apps section, click the Settings link in the line that reads Manage your Android apps in Settings. This brings up the Android apps settings.
- Click About device.
- Click Build number seven times to move into Developer mode.
- Click the arrow in the top-left area of the window to go back to the main Settings screen.
- Click the new Developer options item, activate ADB debugging, and then click OK to allow ADB debugging.
- Return to your development machine and use ADB to connect to your Chromebook's using its IP address and port 22.
- On your Chromebook, click Allow when prompted whether you want to allow the debugger. Your ADB session is established.
Troubleshooting ADB debugging
Sometimes the ADB device shows that it's offline when everything is connected properly. In this case, complete the following steps to troubleshoot the issue:
- Deactivate ADB debugging in Developer options.
In a terminal window, run
- Re-activate the ADB debugging option.
In a terminal window, attempt to run
- Click Allow when prompted whether you want to allow debugging. Your ADB session is established.
Additional Learning Materials
To learn more about optimizing your Android apps for Chromebooks, consult the following resources: