)]}'
{
  "commit": "c63e437fe809a81ae634ee212cd6717cd2d08dd5",
  "tree": "ca1afa93e1c59ca6f21416bbf7f607ce4d800771",
  "parents": [
    "83675ed27633283e7fc296c8bca22e841224c096"
  ],
  "author": {
    "name": "flutteractionsbot",
    "email": "154381524+flutteractionsbot@users.noreply.github.com",
    "time": "Tue Jun 30 11:46:03 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Jun 30 18:46:03 2026 +0000"
  },
  "message": "[CP-stable][tool] Fix libapp.so dropped from APK/app bundle (#188516)\n\n### Issue Link:\r\nWhat is the link to the issue this cherry-pick is addressing?\r\n\r\nhttps://github.com/flutter/flutter/issues/186810\r\nhttps://github.com/flutter/flutter/issues/187388\r\nhttps://github.com/flutter/flutter/issues/187553\r\n\r\n### Impact Description:\r\nWhat is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)?\r\nDoes it impact development (ex. flutter doctor crashes when Android Studio is installed),\r\nor the shipping of production apps (the app crashes on launch).\r\nThis information is for domain experts and release engineers to understand the consequences of saying yes or no to the cherry pick.\r\n\r\nThe root cause either presents as the app crashing on startup, or the build failing with the message\r\n\u003e \"Release app bundle failed to strip debug symbols from native libraries\"\r\n\r\n### Changelog Description:\r\nExplain this cherry pick:\r\n* In one line that is accessible to most Flutter developers.\r\n* That describes the state prior to the fix.\r\n* That includes which platforms are impacted.\r\nSee [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples.\r\n\r\n\u003c Replace with changelog description here \u003e\r\n[flutter/186810 flutter/187388 flutter/187553] When building android app bundles using flavors, or with an old app template combined with a plugin coming alphabetically before app, fixes problems with failing to include libapp.so in the produced app bundle.\r\n\r\n### Workaround:\r\nIs there a workaround for this issue?\r\n\r\nFor the case of the old app template combined with a plugin coming before \"app\" alphabetically, there is a workaround here https://github.com/flutter/flutter/issues/186810#issuecomment-4674483652. For the flavors case there is not a workaround.\r\n\r\n### Risk:\r\nWhat is the risk level of this cherry-pick?\r\n\r\n### Test Coverage:\r\nAre you confident that your fix is well-tested by automated tests?\r\n\r\n### Validation Steps:\r\nWhat are the steps to validate that this fix works?\r\n\r\n1. make a fresh project\r\n2. combine the subprojects in `android/build.gradle(.kts)`:\r\nfind \r\n```kotlin\r\nsubprojects {\r\n    val newSubprojectBuildDir: Directory \u003d newBuildDir.dir(project.name)\r\n    project.layout.buildDirectory.value(newSubprojectBuildDir)\r\n}\r\n\r\nsubprojects {\r\n    project.evaluationDependsOn(\":app\")\r\n}\r\n```\r\nand combine\r\n```kotlin\r\nsubprojects {\r\n    val newSubprojectBuildDir: Directory \u003d newBuildDir.dir(project.name)\r\n    project.layout.buildDirectory.value(newSubprojectBuildDir)\r\n    project.evaluationDependsOn(\":app\")\r\n}\r\n```\r\n\r\n3. add a plugin which comes alphabetically before \"app\"\r\n4. also you will need to disable r8, due to how the templates have drifted over time.\r\n```\r\n// after signingConfig \u003d signingConfigs.getByName(\"debug\")\r\n\r\nisMinifyEnabled \u003d false\r\nisShrinkResources \u003d false\r\n```\r\n\r\nAlso, you can separately test the repro steps listed in \r\nhttps://github.com/flutter/flutter/issues/187388\r\nto validate that this fixes the flavors-symptom of this underlying root cause.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7d09171f31e330bd12a3e5006e28c4eae666046d",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt",
      "new_id": "df6374b980bda113104a605cc54a96cde4a40c58",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/FlutterPlugin.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4741fdf6b2157d99b26ca50c6c6897c603314cb1",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/main/kotlin/tasks/CopyFlutterJniLibsTask.kt"
    },
    {
      "type": "modify",
      "old_id": "c1cbdceb41c8f76e596cce703647cb1824f44f4e",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/gradle/src/test/kotlin/FlutterPluginTest.kt",
      "new_id": "38b916fc19873dcede8f8a8cd74966d0a456b548",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/gradle/src/test/kotlin/FlutterPluginTest.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f76be44e0a8f111d637eda0962fa1f51082b1187",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/gradle_libapp_so_packaging_test.dart"
    }
  ]
}
