Flavor capability matrix
This table is the canonical answer to “which capability is available in which flavor”. It is
generated from the productFlavors block of app_v2/build.gradle.kts, which is the only source
of truth - a capability exists exactly insofar as it is compiled in. Every other document in this
repository defers to this table instead of restating the grid, and
scripts/quality/assert-flavor-matrix-docs.ps1 fails the build when one of them drifts.
Regenerate with pwsh -NoProfile -File scripts/docs/generate-flavor-matrix.ps1.
Legend
[+]- declaredtruein the flavor block.[-]- declaredfalsein the flavor block.[+]*/[-]*- not declared by the flavor, inherited fromdefaultConfig.n/a- not declared for this flavor at all; the field is absent from itsBuildConfig, so only a flavor-specific source set can reference it.
Matrix
| Flag | standard | noLegal | lite | photos | legacy | vr |
|---|---|---|---|---|---|---|
IS_NO_LEGAL_FLAVOR |
[-]* | [+] | [-]* | [-]* | [-]* | [-]* |
SUPPORT_LAUNCHER |
[+] | [+] | [-]* | [-]* | [-]* | [-]* |
DECLARES_BATTERY_OPTIMIZATION |
[+]* | [+]* | [+]* | [+]* | [+]* | [+]* |
SUPPORT_VIDEO |
[+] | [+] | [+] | [-] | [+] | [+] |
SUPPORT_AUDIO |
[+] | [+] | [+] | [-] | [+] | [+] |
SUPPORT_STREAMS |
[+] | [+] | [-] | [-] | [+] | [+] |
SUPPORT_MIC_RECORDING |
[+] | [+] | [-] | [-] | [+] | [+] |
DECLARES_MIC_RECORDING |
[+] | [+] | [+] | [-] | [+] | [+] |
SUPPORT_IMAGES |
[+] | [+] | [+] | [+] | [+] | [+] |
SUPPORT_CLOUD |
[+] | [+] | [-] | [+] | [+] | [+] |
SUPPORT_LOCAL_NETWORK |
[+] | [+] | [-] | [+] | [+] | [+] |
SUPPORT_DOCUMENTS |
[+] | [+] | [-] | [-] | [+] | [+] |
ENABLE_ANIMATIONS |
[+] | [+] | [-] | [+] | [+] | [+] |
ENABLE_EPUB |
[+] | [+] | [-] | [-] | [+] | [+] |
ENABLE_TRANSLATION |
[+] | [+] | [-] | [-] | [+] | [+] |
ENABLE_PERSISTENT_AUDIO_PLAYBACK |
[+] | [+] | [-] | [-] | [+] | [+] |
SUPPORTS_DEFAULT_PLAYER |
[+] | [+] | [-] | [+] | [+] | [+] |
SUPPORT_VR_PLAYER |
[-] | [+] | [-] | [-] | [-] | [-] |
SUPPORT_WEAR_COMPANION |
[+] | [+] | [-] | [-] | [-] | [-] |
SUPPORT_CAST |
[+] | [+] | [+] | [+] | [+] | [-] |
SUPPORT_NETWORK_MONITOR |
[+] | [+] | [-] | [-] | [-] | [-] |
VR_UI_COMPOSITION_LAYER_ENABLED |
n/a | [+] | n/a | n/a | n/a | [-] |
minSdk |
26 | 26 | 26 | 26 | 23 | 26 |
How the app reads this
Shared code never reads these fields directly (CLAUDE.md Rule 14). They are folded into the typed
capability record bound per flavor, and section availability is resolved through the single
capability-availability entry point. A [-] therefore means the surface has no entry point in that
flavor, not that it is merely restricted.