This is it, folks. This is the version of Play Services that will be running on our phones and tablets when Google I/O 2015 kicks off in just 6 days. There are things in here that will certainly make the keynote, so if you don't want any spoilers, close this page immediately! There's no point in beating around the bush when we've got so much to talk about, so let's get to the good stuff.

TeardownHero

Disclaimer: Teardowns are necessarily speculative and usually based on incomplete evidence. It's possible that the guesses made here are totally and completely wrong. There is always a chance that details may change or plans may be cancelled prior to the launch of a new feature discovered in a teardown. Much like rumors, nothing is certain until it's officially announced.

A brief note: We're trying a couple of different things with this teardown. To begin with, it's split into two parts so the length isn't quite as overwhelming. Part 2 can be found here. We're also test-driving a new expandable widget for long blocks of code and strings. Regular readers will recognize that it's based on our Press Release widget, but we're looking for ways to further improve upon it. Let us know what you think in the comments.

[email protected] Reborn

If there was ever a Google project that teased us with great potential and then mysteriously vanished in a puff of smoke it was... Ok, there have actually been a few of those, but let's focus on [email protected] It first appeared 4 years ago as a pretty cool on-stage demo at Google I/O 2011. A year went by with nary a word, but hints that the project was still alive appeared in one of the very earliest APK Teardowns by Ron Amadeo. This pattern has continued with occasional references to the project name and some of its features, but it's always been little more than a tease. However, we might finally have some substantial evidence to get excited about.

A bundle of new strings with the prefix 'smartdevice' has been added in Play services 7.5. The majority of these strings add up to very mundane button and action titles, but a few of them let us know that we're looking at an interaction between two devices, many of which may not have conventional input or pairing methods like our smartphones.

Observations:

  • There is a string that mentions downloading an app to your current device to control and manage another device. The sample data in this string specifically suggests an app named "Remote Control" and the Philips Hues Lightbulb as the device. Of course, the Philips Hue is a Wi-Fi controllable, multi-color LED light bulb, and generally accepted to be the first successful smart bulb.
  • A lot of these strings are involved in pairing two devices, but several different methods exist for initiating contact, including: NFC, Bluetooth, Wi-Fi, entering PIN codes from a sticker, and even "listening" for a code.
  • One string includes the word "whisper" in its name, along with the text "Listening for confirmation code..." This could be related to WhisperNet, a technology possibly used by Chromecast and Nearby for communication via sound waves.
  • Many of the new strings discuss copying or setting up an account on a second device. There are a lot of similar or matching strings used by the Account Transfer feature introduced in Lollipop with the help of Play services.
  • One string mentions remote access to control a device.
  • One string guides users to begin pairing with the verbal (or typed) command: "OK Google, set up my device." This is likely the start of a process for pairing with something other than a smartphone or tablet, since that process begins automatically for many new handsets after they are powered on.
  • Another string involves pairing with new devices by tapping on a button labeled "set up nearby device." This could be coincidental, but it may take advantage of Nearby to build a list of gadgets in close proximity.
  • Several of these strings indicate that you must have a Google account or that it must be copied to a given device.

Strings

<string name="smartdevice_install_app_reason" formatted="false">Get the <g example="Remote Control" id="app_name">%s</g> app to control and manage your new <g example="Philips Hues Lightbulb" id="device_name">%s</g> from this device</string>
<string name="smartdevice_error_add_account">There was a problem adding your account to the lightbulb.</string>
<string name="smartdevice_setup_title_app_install">Install the app</string>
<string name="smartdevice_setup_info_installing_app">Installing the app…</string>
<string name="smartdevice_setup_title_verify_code">Verify code</string>
<string name="smartdevice_setup_info_whisper">Listening for confirmation code…</string>
<string name="smartdevice_setup_info_pairing_not_supported">Your device uses pairing confirmation mechanism that is not yet supported.</string>
<string name="smartdevice_setup_enter_code">Enter the code on your device. It should appear on a sticker.</string>
<string name="smartdevice_setup_enter_code_fallback">Hmm. That is not working. Enter the code on your device instead. It should appear on a sticker.</string>
<string name="smartdevice_setup_enter_code_hint">Enter code</string>
<string name="smartdevice_setup_enter_pin_4">Enter the 4-digit code currently shown on your device.</string>
<string name="smartdevice_d2d_target_nfc_description">"To copy:

1. Make sure your other device is on and unlocked

2. Place the two devices back-to-back until you hear a tone, then set aside"</string>
<string name="smartdevice_d2d_target_nfc_having_trouble_description">"Tap &amp; Go uses NFC to copy your Google Accounts, apps, and data from your other device. Make sure that device's NFC is on by going to Settings > Wireless &amp; networks > More."</string>
<string name="smartdevice_d2d_target_pin_code_description">Enter this code on your other device:</string>
<string name="smartdevice_d2d_target_pin_verification_text">Enter this code on your other device: <g id="A1B2C3">%s</g></string>
<string name="smartdevice_no_account_warning">If you don’t choose an owner, you won’t be able to access this device remotely or share access with others.</string>

<string name="smartdevice_d2d_target_description">Back to your other device:&lt;br/>&lt;br/> 1. Say &lt;b>"OK Google, set up my device"&lt;/b> or type "set up my device" and tap to confirm&lt;br/>&lt;br/> 2. Touch &lt;b>&lt;xliff:g id=device_name>%s&lt;/xliff:g>&lt;/b> on the list, and follow the on-screen instructions</string>
<string name="smartdevice_d2d_target_help_needed_description">On your other device:&lt;br/>&lt;br/> 1. Open the &lt;b>Google Settings&lt;/b> app&lt;br/>&lt;br/> 2. Select &lt;b>Set up nearby device&lt;/b>&lt;br/>&lt;br/> 3. Touch &lt;b>&lt;xliff:g id=device_name>%s&lt;/xliff:g>&lt;/b> on the list, and follow the on-screen instructions</string>

<string name="smartdevice_action_cancel">Cancel</string>
<string name="smartdevice_action_close">Close</string>
<string name="smartdevice_action_continue">Continue</string>
<string name="smartdevice_action_device_settings">Settings</string>
<string name="smartdevice_action_install">Install</string>
<string name="smartdevice_action_next">Next</string>
<string name="smartdevice_action_ok_got_it">Ok, Got it</string>
<string name="smartdevice_action_open_app">Open app</string>
<string name="smartdevice_action_skip">Skip</string>
<string name="smartdevice_action_try_another_way">Try Another Way</string>
<string name="smartdevice_alert_cancel_button">Cancel</string>
<string name="smartdevice_alert_disconnected_message">"Your device was disconnected.
To continue with setup, connect it and start over."
</string>
<string name="smartdevice_alert_disconnected_title">Device disconnected</string>
<string name="smartdevice_alert_generic_error_title">Sorry, something went wrong</string>
<string name="smartdevice_alert_generic_error_toast_text">Sorry, something went wrong</string>
<string name="smartdevice_alert_no_accounts_generic_text">To setup your device, you need at least one Google account.</string>
<string name="smartdevice_alert_no_accounts_text">To setup your <g example="Nexus" id="device">%s</g>, you need at least one Google account.</string>
<string name="smartdevice_alert_no_accounts_title">No accounts to copy</string>
<string name="smartdevice_alert_ok_button">OK</string>
<string name="smartdevice_alert_start_over_button">Start over</string>
<string name="smartdevice_choose_account">Choose an account</string>
<string name="smartdevice_choose_device">Choose your device</string>
<string name="smartdevice_choose_owner">Choose an owner</string>
<string name="smartdevice_connect_to_wifi">Connect your device</string>
<string name="smartdevice_connect_to_wifi_known_device_type">Connect your <g example="printer" id="device_type">%s</g></string>
<string name="smartdevice_connecting">Setting up your <g example="tablet" id="device_type">%s</g>…</string>
<string name="smartdevice_d2d_connecting_to_device_text">Connecting to your device...</string>
<string name="smartdevice_d2d_copy_account_button">Copy</string>
<string name="smartdevice_d2d_copy_account_text">Copy your Google Account, apps and data to your device?</string>
<string name="smartdevice_d2d_copy_account_title">Copy to your device?</string>
<string name="smartdevice_d2d_lockscreen_verification_text">For security, confirm your screen lock to continue setup</string>
<string name="smartdevice_d2d_lockscreen_verification_title">Verify it’s you</string>
<string name="smartdevice_d2d_source_bluetooth_unavailable_text">Cannot set up other device because Bluetooth is not available on your device.</string>
<string name="smartdevice_d2d_source_disabled_text">For security, this feature has been disabled. On your other device, touch Skip and continue with setup.</string>
<string name="smartdevice_d2d_source_nfc_handler_title">Set up new device</string>
<string name="smartdevice_d2d_source_notification_title">Tap &amp; Go complete</string>
<string name="smartdevice_d2d_source_restricted_user_text">Cannot set up a new device from a restricted user profile.</string>
<string name="smartdevice_d2d_source_setup_complete_generic_device_text">"Success!
Finish setup on your other device"
</string>
<string name="smartdevice_d2d_source_setup_complete_text">" Success!
Finish setup on your "<g id="other_device">%s</g>" "
</string>
<string name="smartdevice_d2d_target_choice_description">"If you're using another Android device, grab it now to quickly copy your existing device setup to this device."</string>
<string name="smartdevice_d2d_target_choice_setup_fresh">No, thanks</string>
<string name="smartdevice_d2d_target_choice_title">Got another device?</string>
<string name="smartdevice_d2d_target_choice_use_old_device">Copy your Google Accounts, apps, and data from your other device</string>
<string name="smartdevice_d2d_target_continue_description">Continue setup on your other device.</string>
<string name="smartdevice_d2d_target_help_needed_link">Having Trouble?</string>
<string name="smartdevice_d2d_target_help_needed_title">Try this instead</string>
<string name="smartdevice_d2d_target_instruction_cant_find_it">"Can't find it?"</string>
<string name="smartdevice_d2d_target_instruction_description">Open the Google app</string>
<string name="smartdevice_d2d_target_instruction_title">On your other device</string>
<string name="smartdevice_d2d_target_more_info_close">Got it</string>
<string name="smartdevice_d2d_target_nfc_having_trouble_title">Having trouble?</string>
<string name="smartdevice_d2d_target_nfc_title">Tap &amp; Go</string>
<string name="smartdevice_d2d_target_other_device_description">The Google app comes pre-installed on all Android devices. Touch the "All apps" button on your home screen and look for the icon shown above.</string>
<string name="smartdevice_d2d_target_title">In the Google app</string>
<string name="smartdevice_d2d_target_user_aborted">Setup process aborted on other device.</string>
<string name="smartdevice_d2d_wifi_connected">Connected</string>
<string name="smartdevice_d2d_wifi_saved">Saved</string>
<string name="smartdevice_default_device_name">device</string>
<string name="smartdevice_error_phone_offline">This phone is offline. It needs to be online to continue setup.</string>
<string name="smartdevice_error_something_went_wrong">Something went wrong</string>
<string name="smartdevice_error_tablet_offline">This tablet is offline. It needs to be online to continue setup.</string>
<string name="smartdevice_error_try_again">Please try again.</string>
<string name="smartdevice_error_wifi">Couldn’t connect to your device. Please enter Wi-Fi details again.</string>
<string name="smartdevice_gcd_setup_error_certificate_mismatch">Could not verify device certificate</string>
<string name="smartdevice_go_to_wifi">Go to Wi-Fi</string>
<string name="smartdevice_install_app">Install the app</string>
<string name="smartdevice_install_no">No, thanks</string>
<string name="smartdevice_install_on_this_device">Install on this device</string>
<string name="smartdevice_installing_app">Installing the app…</string>
<string name="smartdevice_no_account">Continue without an account</string>
<string name="smartdevice_no_account_confirm_button">Skip anyway</string>
<string name="smartdevice_no_account_confirmation">Skip choosing an owner?</string>
<string name="smartdevice_no_owner">Continue without an owner</string>
<string name="smartdevice_searching_for_devices">Searching for devices</string>
<string name="smartdevice_setup_enter_pin_4_fallback">Hmm. That is not working. Enter the 4-digit code currently shown on your device instead.</string>
<string name="smartdevice_setup_info_connecting">Connecting to your device…</string>
<string name="smartdevice_setup_info_setting_up">Setting up your device…</string>
<string name="smartdevice_setup_info_success">Success!</string>
<string name="smartdevice_setup_intro_continue">Continue</string>
<string name="smartdevice_setup_intro_text">To setup your device, your phone’s Bluetooth will be used.</string>
<string name="smartdevice_setup_intro_title">Getting started</string>
<string name="smartdevice_setup_password">Password</string>
<string name="smartdevice_setup_show_password">Show password</string>

There's a lot to be picked up from these strings, but not all of them fit together in a neat package. For example, a light bulb, no matter how smart it is, probably isn't going to initiate a connection using sound waves. The best explanation is that these will be used for setting up many types of devices, each with their own distinct characteristics. On the other hand, this is exactly what we expect from [email protected] – a melting pot of different gadgets, each with its own way of maintaining connections and communicating.

Unlike previous appearances of [email protected], or something that resembled it, there's more than a handful of strings or a vague link. These look like the genuine components for an interface. Some of these strings aren't in use yet, while others appear in multiple layouts and throughout code. There's not enough evidence to make a guess as to whether Google will announce anything for the home at I/O or if things will remain quietly undercover for another six months to a year (or four), but this is starting to look like a great time to tackle the concept of the smart home.

Nearby Sharing

At this stage, it feels like Nearby should have already launched. We broke the story about Nearby at this time last year, and we've seen so many bits and pieces since then, it's getting difficult to keep track of them all. In fact, this may be the single most talked about subject across all of the teardowns, ever. As it turns out, Nearby was meant to make one more appearance in the teardown – hopefully the time before it breaks out into the world.

We know Nearby is more like an enabling technology, so it will have many applications. Judging by a few new activities, one of its features will allow users to share... something?

  • Activity names: ShareActivity, ShareHintActivity, AppNotInstalledDialogActivity, and AppNotSupportedDialogActivity
  • There are also several new layouts prefixed with 'nearby_sharing'

Activities

<activity android:enabled="false" android:excludeFromRecents="true" android:finishOnCloseSystemDialogs="true" android:icon="@drawable/nearby_sharing_opt_in_icon" android:label="Nearby" android:logo="@drawable/nearby_sharing_opt_in_icon" android:name="com.google.android.gms.nearby.sharing.sharesheet.ShareActivity" android:noHistory="true" android:process="com.google.android.gms.ui" android:theme="@android:style/Theme.NoDisplay">
<activity android:excludeFromRecents="true" android:finishOnCloseSystemDialogs="true" android:name="com.google.android.gms.nearby.sharing.sharesheet.ShareHintActivity" android:noHistory="true" android:process="com.google.android.gms.ui" android:theme="@android:style/Theme.Black.NoTitleBar"/>
<activity android:excludeFromRecents="true" android:exported="true" android:name="com.google.android.gms.nearby.sharing.AppNotInstalledDialogActivity" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.Light.Dialog"/>
<activity android:excludeFromRecents="true" android:exported="true" android:name="com.google.android.gms.nearby.sharing.AppNotSupportedDialogActivity" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.Light.Dialog"/>

There are also several new layouts:

  • nearby_opt_in_custom_title.xml
  • nearby_expandable_row_view
  • nearby_expandable_view
  • nearby_opt_in_view
  • nearby_settings_activity
  • nearby_sharing_app_not_installed_popup
  • nearby_sharing_app_not_supported_content
  • nearby_sharing_app_not_supported_popup
  • nearby_sharing_share_hint_view

To begin with, these four activities are only listed in the AndroidManifest, but the code that would implement them is missing. Likewise, the new layouts have very few references to strings or images, and the few that are there mostly read "PLACEHOLDER." In other words, there's nothing to go on besides a few names.

The only safe thing to say is that there will be an interface in Nearby that will allow users to open a share window to send some kind of data out to other apps. Beyond that, there's not much that can be said without making something up.

There is one last detail of some importance, a receiver that listens for apps that have been uninstalled.

<receiver android:name="com.google.android.gms.nearby.settings.NearbyAppUninstallReceiver">

This indicates that Nearby needs to know about other apps on the device. It's possibly just there to capture the removal of an important Google app, or it may be watching for multiple apps. This is definitely speculative, but it either suggests there is a new Nearby app by Google coming to the Play Store, or it may mean there will be an API for 3rd-party developers. Of course, there are other explanations, but these two are the most interesting. We'll just have to wait for I/O to get the full rundown.

In the meantime, I can leave this with a couple of images that are used for Nearby.

nearby_icon_36_blue

nearby_icon_36_blue

udc_header

udc_header

Smart Lock May Detect When Trusted Devices Are Worn

The combination of Android Wear and Lollipop makes for a killer feature we call Trusted Devices. It allows us to keep our phones at the ready so long as they're not too far away, yet we can trust that they'll lock up tight in the event of loss or theft. A new string suggests a change to the rules for wearables that are meant to keep your phone unlocked: they actually have to be worn.

<string name="auth_trust_agent_trusted_bt_device_wearable_info">" Your "<g id="device_name">%s</g>" will keep your phone unlocked when it detects it's being worn nearby. "</string>

Just to be clear, this is a very literal interpretation of a single string. It's entirely possible that the choice of wording is imprecise or accidental. On the other hand, a number of people have suggested this behavior may already be active, as they have noticed their phones tend to lock when their Wear devices are on the charger. This string doesn't appear to be in use yet, so this could very possibly change in the future.

Wrap-Up

That's it for part 1 of this teardown. Part 2 is now available for your reading enjoyment.

Download

The APK is signed by Google and upgrades your existing app. The cryptographic signature guarantees that the file is safe to install and was not tampered with in any way. Rather than wait for Google to push this download to your devices, which can take days, download and install it just like any other APK.

File Name: com.google.android.gms-7.5.66_(1939950-430)-7566430-minAPI21.apk

Version: 7.5.66 (1939950-430) (7566430)

MD5: 004c2a4ad645f0e5e0d1f12599213033

To figure out the right version of Google Play services for your Android device, go to Settings -> Apps -> Google Play services, and look at the last 3 numbers in the parentheses. You'll see something like -XYZ where:

* X defines Android version:

  • 0 for Android <5.0
  • 4 and 7 for Android >=5.0
  • 8 for Android TV

* Y defines CPU architecture:

  • 1 for armeabi
  • 3 for armeabi-v7a
  • 4 for arm64-v8a
  • 7 for x86

* Z defines DPI:

  • 0 for universal
  • 2 for 160
  • 4 for 240
  • 6 for 320
  • 8 for 480

Notes:

  • It seems that -7YZ builds became -4YZ with Google Play services 6.5. If you were on -7YZ before, you should now install -4YZ.
  • Looks like -8YZ builds are for Android TV.

Examples:

  • -014 for Android <5.0 armeabi CPU 240 DPI device
  • -438 for Android 5.0+ armeabi-v7a CPU 480 DPI device
  • -876 for Android TV x86 CPU 320 DPI device