Skip to content

Platform support ​

What works where. For the reasoning behind each difference, see Platform differences.

Baseline ​

PlatformMinimum OSNative APIHealth store
Android8.0 / API 26Health ConnectSeparate installable app
iOS15.0HealthKitBuilt into the OS

Operations ​

OperationAndroidiOSNotes
ReadYesYesType and OS availability vary
WriteYesYesRequires per-type authorization
UpdateYes—HealthKit records are immutable
DeleteYesYesOnly records your app created
AggregateYesYesAvailable metrics vary by data type
Incremental syncYesYesChange tokens vs. anchored queries, unified
Exercise routesYesYesNeeds both route and session permissions
Background readCapability-basedCapability-basedRequires permission and OS scheduling

Permissions ​

CapabilityAndroidiOS
Request permissionsYesYes
Read write-permission statusYesYes
Read read-permission statusYes—
Enumerate granted permissionsYes—
Revoke programmaticallyYes—
Re-prompt after a decisionLimitedNever
Per-type manifest declaration requiredYes—

The four differences that change designs ​

iOS never reveals read authorization ​

HealthKit does not disclose whether a read permission was denied, because that would let an app infer what a user is hiding. Read status is always unknown on iOS. Run the query and treat an empty result as valid.

Android requires a declaration per type ​

Every requested Health Connect type needs a matching <uses-permission> entry. A missing one produces ConfigurationException / permissionNotDeclared before the operation runs — a build fix, not a runtime one.

Android capability is dynamic ​

Health Connect is an updatable app, so newer records and operations can depend on its version, the OS version, or the device's Mainline module level. Pass the API's healthPlatformRequirements to getSupportStatusFor(). For platform features, also check the native state with getFeatureStatus(). iOS features ship with the OS.

Records do not map one to one ​

Not every conceptual record has an equivalent on both stores, and some — nutrition especially — are modelled at different granularity. Check the data type explorer and each type's healthPlatformRequirements before designing a cross-platform feature around it.

The SDK exposes these facts as healthPlatformRequirements. The deprecated supportedHealthPlatforms projection reports only the platform and cannot represent OS or SDK Extension floors.

History windows ​

PlatformDefault reachExtending it
Android30 daysHealthPlatformFeature.readHealthDataHistory
iOSUnrestrictedNot applicable

Released under the MIT License.