flutter/docs/contributing/Android-API-And-Related-Versions.md
Reid Baker 72c2447307
android_host_app_v2_embedding update dependencies and documentation (#164195)
Related to #149836 

Last of the non api 35 references in flutter/flutter for targetSdk and
compileSdk.
`find . -type f -name "build.gradle" | xargs grep -e "targetSdk" | tr -d
'=' | tr -s ' ' | grep -v flutter\.targetSdkVersion | grep -v
engine/src/flutter/third_party/ | grep -v "targetSdk 35"`
`find . -type f -name "build.gradle" | xargs grep -e "compileSdk" | tr
-d '=' | tr -s ' ' | grep -v flutter\.compileSdkVersion | grep -v
engine/src/flutter/third_party/ | grep -v "compileSdk 35"`

rewrite of https://github.com/flutter/flutter/pull/163622 after this
test was updated to run against a newer version of gradle and agp in
https://github.com/flutter/flutter/pull/163849/files#diff-83b6ad7c016bffbb682664eb65c576a7ebf9c312fc60727c0e0e20f5641cbc2aR462

Android-API-And-Related-Versions.md was updated to reflect that after
further investigation that android is using "=" in their documentation
and that the space syntax is discouraged. Equals is setting a property
and space is the equivalent to a function call like `compileSdk(35)` and
assignment is prefered.

The use of equals for proprty assignment also aligns with
https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html#prepare_your_groovy_scripts

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-02-27 20:31:08 +00:00

3.4 KiB

Android Api and Related versions

Picking the full suite of android versions can be difficult if you are not a full time android developer. This document is for contributors to understand what versions of common android tooling should be used in the flutter/flutter codebase.

Overview

**The most important thing is for any test, project, or app to have compatible versions. **

If versions need to be different then a comment explaining why and what is being evaluated should be included. All chosen versions should pass the minimum versions checks defined in DependencyVersionChecker

If the versions chosen are not known by gradle_utils.dart then update gradle_utils.dart.

Specifics

compileSdk

  • Must be higher then or equal to targetSdk.
  • Should be compileSdk instead of compileSdkVersion.
  • Should be the max stable value available in CIPD if not flutter.compileSdkVersion.
  • Must have a comment if an api level lower than max is chosen intentionally.
// OK
android {
  compileSdk = flutter.compileSdkVersion
}
// OK if flutter.compileSdkVersion is not available like in an add to app example.
android {
  compileSdk = 35
}
// NOT OK
android {
  compileSdk 28
}

targetSdk

  • Must be higher then or equal to minSdk.
  • Should be targetSdk instead of targetSdkVersion.
  • targetSdk takes human level effort to update. This is a design decision by the AGP team.
  • targetSdk may lag behind compile sdk because of the effort to update.
  • If the targetSdk version is intentionally different there should be a comment explaining why.
// OK
defaultConfig {
  targetSdk = flutter.targetSdkVersion
}
// OK if flutter.compileSdkVersion is not available like in an add to app example.
defaultConfig {
  targetSdk = 35
}
// NOT OK
defaultConfig {
  targetSdk 28
}

AGP

AKA com.android.application, com.android.tools.build:gradle com.android.library

  • "AGP" version should be the version set in flutter templates or newer.
  • If the version is intentionally different there should be a comment explaining why.
// OK
dependencies {
    classpath "com.android.tools.build:gradle:8.8.1"
}
// OK
dependencies {
    // Testing backwards compatability of feature XYZ
    classpath "com.android.tools.build:gradle:7.5.2"
}

gradle

Gradle versions are the least likley to break across minor version updates.

  • In new code the "gradle" version should be the version set in flutter templates or newer.
  • In older code any gradle version that works with the other version constraints is ok.
  • In practice our customers use a large variety of gradle versions.
  • If the version is intentionally different there should be a comment explaining why.
// OK
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip

kotlin

Changing kotlin versions is most likley to have an issue with another dependency and not the code under test.

  • "kotlin" version should be the version set in flutter templates or newer.
  • If the version is intentionally different there should be a comment explaining why.
// Ok
ext.kotlin_version = "1.7.10"
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"