Android* has come a long way initially starting with phones, then tablets, Google TV*, Android Wear*, Android TV* (replaces Google TV), and Android Auto*. It can be challenging for developers to build and test their apps to run on all these device types. Add to this different device form factors and display resolutions, and it can quickly become a complex app verification and testing problem. We have Intel® HAXM to the rescue.
Intel® Hardware Accelerated Execution Manager (HAXM) is a hardware-assisted Android emulator with low-overhead, excellent performance, and low latency. You can learn more about it here: https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager
With Intel HAXM, developers can have multiple Android emulator instances running on their development system without having to worry too much about performance, load or latency issues. This can be very helpful in the iterative process of app development and testing, resulting in huge developer productivity.
Non-x86 Android emulator images can have slow start-up time and sluggish UI responsiveness. Unlike some third-party Android emulators, with Intel HAXM you can use all the latest Android API versions and platforms as soon as they are released.
For detailed instructions on using Intel HAXM please see /content/www/us/en/develop/articles/speeding-up-the-android-emulator-on-intel-architecture.html
In this blog post we will look at how developers can take advantage of the Intel HAXM emulator when developing a universal Android app that targets different Android platforms like Android Wear and TV, and device variations.
Using the Universal Android Sample App
Google recently released a sample universal app to show how developers can target multiple form factors with the same code base. Please see the following link to learn more: https://github.com/googlesamples/android-UniversalMusicPlayer
This sample app showcases some of the best practices for targeting multiple form factors with the same code base. Follow the instructions in the above link to build the app. We will be using it to load x86 HAXM Emulator instances for TV, Wear and Phone in this article.
The project can be directly imported into Android Studio* and developers can take advantage of the integrated emulator features. If you prefer to use other IDEs, the following can be helpful.
If you are comfortable with cmd line, just invoke the gradle build script from sample source directory.
The apk will be available at “mobile/build/outputs/apk/mobile-debug.apk” folder.
Create the AVDs for Android TV and Wear
We need to ensure we downloaded the latest Android SDK emulator images for TV and Wear, along with the standard Android image for phone/tablet.
Open the android SDK manager. You can invoke from cmd line (<Android-SDK>/tools folder should be in your path):
Next, we need to create the emulator configurations (AVDs) to use the above images.
Open the Android Virtual Device manager. You can invoke from cmd line
> android avd
Create an Android Wear AVD configuration as shown.
Click “OK”, and start the Wear emulator by clicking “Start…” in the AVD Manager Window. A screenshot of the Wear emulator after first boot, is shown below.
Android Wear requires a companion app to be installed on your phone. This app is only available on the Google Play store, so it requires us to have a device with access to the store.
We need the device configured with adb debugging, and both Wear emulator and the device show up in adb devices list:
Finally, we need to forward tcp ports with,
> adb -d forward tcp:5601 tcp:5601
The Wear emulator should now be able to connect to your device. The below screenshots show the Wear emulator in connected and disconnected states.
Detailed instructions for creating Wear apps can be found at: http://developer.android.com/training/wearables/apps/creating.html
Like any android apk, we can manually install our sample app apk on the Wear emulator using the adb,
> adb -s emulator-5554 install -r mobile\build\outputs\apk\mobile-debug.apk
Verify that it is in fact installed and available on the Wear emulator using,
> adb -s emulator-5554 shell pm list packages | grep example
The package name for the sample app, com.example.android.uamp is listed.
We can even manually run the sample app on the Wear emulator using,
> adb -s emulator-5554 shell monkey -p com.example.android.uamp -c android.intent.category.LAUNCHER 1
We now have the sample app running on the Wear emulator device.
Create an Android TV emulator configuration (AVD) as shown.
Click “OK”, and start the TV emulator by clicking “Start…” in the AVD Manager Window.
We can verify if the emulator is accessible from adb using
> adb devices
Note down the emulator id (eg: emulator-55xx), which you can use as the target for adb commands. Install the apk using
> adb -s emulator-55xx install -r mobile\build\outputs\apk\mobile-debug.apk
Finally, start the app on the Android TV emulator instance using,
> adb -s emulator-55xx shell monkey -p com.example.android.uamp -c android.intent.category.LAUNCHER 1
The sample app running on the Android TV emulator instance:
Intel HAXM can be configured with appropriate memory size at installation time.
The below screenshot shows the Wear, TV and phone AVD configurations.
Here is the universal sample app running on all 3 (TV, Phone, and Wear) along with their CPU utilizations (notice the low CPU overhead):
Developers can tweak memory allocation for further optimization. We have barely scratched the surface of emulator features in this article. Please refer to http://developer.android.com/tools/help/emulator.html for all the available config options.
*Other names and brands may be claimed as the property of others
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804