Continuously Updated: Stadia apk Findings

This page has moved to the new Stadia Dosage website:

https://stadiadosage.com/apk-findings/

The below is no longer updated…

Over the last couple months, we at StadiaDosage/PNTSNetwork have been doing our own .apk teardowns for the Stadia Android app to discover potential upcoming features in the app. This page contains a continuously update list of what we have found.

In an attempt to be responsible human beings, we’d like to note that everything on this list should be taken with a grain of salt as it is subject to a lot of speculation/interpretation and may reflect behind the scenes features or features that never end up getting released. In addition, this list certainly does not represent everything Google is working on for the app. We don’t have access to Google’s private repositories where most development is surely taking place.

Because of the use of flutter/dart these apk breakdowns are little more complicated than most (involving lots of shell commands and string processing). So, you should consider these particularly imprecise.

With all those caveats said, here we go!

Stadia 4.9 (March 24, 2022)

Quite a bit new here again.

The v2 touchpad .svg assets were once again updated.  It looks like the new touch-controls could be coming soon.

In addition, we see even more new strings that appear to support the idea of motion controls, customizability in the touch Gamepad and more Gamepad tweaks:

  • getTouchLayoutConfig
  • TouchGamepadLayoutConfig_StickAreaConfig_SprintConfig
  • enterpriseTouchVelocityToRightAxesConfig
  • set:deviceMotionConfig
  • sendDeviceMotionConfig
  • get:triggerMovabilityThreshold
  • set:triggerMovabilityThreshold
  • ensureReadyToConfigure
  • get:gamepadStateStream
  • get:wantsGamepadInputStream
  • isStickDirectionBetweenAngles
  • AngleMath|angleBetween

It also looks like some app preferences tweaks may be coming soon. We see the following new layout files:

  • 4.9/res/drawable/preference_list_divider_material.xml
  • 4.9/res/layout/preference_widget_switch_compat.xml
  • 4.9/res/layout/preference_material.xml
  • 4.9/res/layout/preference_dropdown.xml
  • 4.9/res/layout/preference_widget_checkbox.xml
  • 4.9/res/layout/preference_widget_seekbar.xml
  • 4.9/res/layout/preference_widget_switch.xml
  • 4.9/res/layout/preference_dropdown_material.xml
  • 4.9/res/layout/preference_category_material.xml
  • 4.9/res/layout/preference_dialog_edittext.xml
  • 4.9/res/layout/preference.xml
  • 4.9/res/layout/preference_widget_seekbar_material.xml
  • 4.9/res/layout/preference_category.xml

In addition, there are once again a lot of changes to the in-app bundled Chrome – including the addition of clearcut analytics. It’s pretty obvious Google wants as much information about how people are using the app as possible.

Finally, we see some interesting-ish new strings  “DELETE_SAVE_GAME”,  “IMMERSIVE_STREAM_XR”, “Subscribe to Stadia Pro for 50+ games, exclusive discounts, and special features”, “Claim it at no extra cost with Stadia Pro”, “New Pro games every month to claim at no extra cost”

Stadia 4.6 (March 7, 2022)

There is lot  new here! A lot of which appears to be further development of our previously found features.

First off. Something completely new. It looks like you’ll soon be able to use your phones accelerometer to control games by moving your phone around. This obviously makes a lot of sense for racing games and we can imagine a few other great use cases. New strings related to this:

  • useMotionSensorsWithTouchGamepad
  • DeviceMotionConfig
  • sensorToGamepadFieldConfigs
  • DeviceMotionConfig_SensorToGamepadFieldConfig
  • DeviceMotionConfig_ExponentialTransformationParameters.
  • DeviceMotionConfig_GamepadField

Possibly also related to these motion controls are the following strings:

  • set:exponentialTransformationParameters
  • verticalValueToButtonMap
  • horizontalValueToButtonMap

It also appears there will be some per-game customizability to both the new motion controls as well as touch controls:

  • package:chrome.cloudcast.client.mobile.app.touch_gamepad/utils/game_specific_devicemotion_configs.dart
  • package:chrome.cloudcast.client.mobile.app.touch_gamepad/utils/game_specific_configs.dart

Next up there are quite a few strings referring to “enterprise” gamepads and game restrictions.

  • enterpriseLayoutConfig
  • enterpriseDeviceMotionConfig
  • useEnterpriseCustomTouchGamepad
  • allowedEnterpriseGameIds
  • allowedEnterpriseGameIdsFlag

I can imagine a whole bunch of different things that “enterprise” might imply in these strings. However, without too much speculation, the most telling of the above strings to me appears to be the middle string which again hints at touch gamepad customization functionality.

The configurability of touch controls also appears to be the theme of these two strings:

  • TouchGamepadLayoutConfig_DpadConfig_DpadType
  • touchVelocityToRightAxesConfig

There are additionally a complete new set of .svgs and .pngs for the V2 touchpad in tow.

Next: it looks like the Stadia captures area at the bottom of the app is getting a few tweaks. There already appears to be a “see all” button here; so, I’m not really sure what new functionality/design we might see here.

  • CapturesCarouselSeeAllCardViewModel
  • CapturesCarouselSeeAllCardComponent
  • CapturesCarouselSeeAllCardViewModelBuilder
  • createCapturesCarouselSeeAllCardBloc
  • capturesCarouselSeeAllCardBloc

There are also some new strings around spectating/spectators (that may build on the broadcaster/spectator capability we previously found in older .apks). We now see the following additional new strings:

  • spectatorChangedNotification
  • GroupSpectatorStatus
  • returnGroupSpectatorStatus
  • TextchatSpectatorStatusChanged

Does that latter string mean spectators could potentially text chat with players? Your guess is as good as mine!

Next. There are a bunch of new strings around Audio streaming stats:

  • StreamingMetrics_ClientSessionAudioJitterBufferStats
  • StreamingMetrics.ClientSessionAudioSinkStats
  • StreamingMetrics_ClientSessionAudioDecodeStats
  • clientAudioDecodeStats
  • clientAudioJitterBufferStats
  • clientAudioSinkStats

These are likely backend features used to help improve the overall quality of the streams on the service.

Finally, for completion, there are quite a few new strings related focus traversal and scribble based text input in the Flutter layers. These are likely coming in via updates to the Flutter framework. There are also some new strings around resubscribeTimer functionality that I suspect is related to stream stability / connectivity. They’ve updated to libcronet (chrome) to version 100. A “layout-television” folder also appears for the first time in this version of the app – suggesting they could unify the Android TV version with the phone app at some point – though, for now, there are only survey related layouts included.

Stadia for AndroidTV 4.5  (March 1, 2022)

This was the first time we looked for changes in the the Stadia for Android TV app. This app is fairly distinct from the Android app. It is significantly smaller in size and, for the most part (see below), does not use flutter/dart to target Android natively. Instead, the bulk of the app appears to be web-based (the app itself being essentially a browser/webview). So, in general, going forward, we don’t expect to find much new in this app as most changes can and will be made on the server side.

That said, this particular release does appear to have some pretty significant changes!!

Incorporated in this release is an entirely new device app that is written in flutter (like most of the phone/tablet app). We see the follow shared objects:

  • libflutter_android_gamepad_lib_flutter_artifacts.so
  • libflutter.so

These suggest some new local to the device code is now part of the app around “gamepad” support. This could be related to the hints at Android TV controller service as there are lots of new “controllerService” strings:

  • FromControllerServiceToUi.ListenResponse
  • FromControllerServiceToUi_OnDisconnectNotification
  • FromControllerServiceToUi.ServiceStartingUpNotification

However, there are enough strings in these objects to mean practically anything. So, take this all w/ a grain of salt! And, remember we are new at this!

Stadia 4.3.4 (Feb. 15, 2022)

New Strings:
  • useUpdatedTouchGamepad
  • useUpdatedTouchGamepadFlag

Suggests perhaps updated touch gamepad controls coming that can be enabled from a setting.

Also possibly related to touch controls (and possibly not)

  • hideDisabledControls

New strings around compatibility testing that may be related to controls as well:

  • compatibilityTester
  • CacheCompatibilityTester

Other new strings that we don’t read a lot into:

  • promotionCampaignId

We already see other promotion/redemption “campaign” strings

  • registerLeader
  • unregisterLeader

In the app strings, “leader” typically refers to party leader

  • runable to start the play test!
  • listenForPlayabilityResults

We already see other “playability”/”play test” strings.

Other changes

There are also lots of general tweaks to the controller (touch and other) instruction text. This seems to be the focus of this release.

Stadia 3.52.4 (Jan. 24, 2022)

New Strings:
  • enableStadiaControllerServiceOnAtv

Seems to further suggest the Stadia controller will get additional functionality on Android TV

  • Focus interruptions exist when game enters lose focus state.
  • FocusInterruptionBuilder
  • focusInterruptionAdded
  • focusInterruptionCleared
  • Failed to add focus interruptions
  • focusInterruptionRemoved

Possibly related to some changes around game/window focus handling

Others that we don’t read much into:

  • miniProfileFounderNameSemanticLabel
  • moreAboutTouchGamepad
  • pinInputHintReadout
  • stadiaSubscriptionSettings
  • ubisoftSubscriptionSettings
  • videoStutterCountDist
  • stretchController

Stadia 3.44.4 (Nov. 30, 2021)

  • SpectateMetadata
  • SpectateMetadata.BroadcasterInfo
  • SpectateMetadata_BroadcasterInfo
  • SpectateMetadata.ViewerInfo
  • SpectateMetadata_ViewerInfo
  • broadcasterPlayerId

This could potentially imply a new “Spectate” feature coming to the platform. Perhaps similar to YouTube direct streaming but with less latency?

  • averageCpuUsagePermille
  • maxCpuUsagePermille
  • minCpuUsagePermille

Hard to guess what these are about. They might just be for use by the devs to understand/improve Stadia CPU usage and requirements in various games/situations.