diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart index 1c6a0c94d54..b69c4017659 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart @@ -148,8 +148,15 @@ Target _getNativeTarget(DarwinArch darwinArch) { Map> _fatAssetTargetLocations(List nativeAssets) { final Set alreadyTakenNames = {}; final Map> result = >{}; + final Map idToPath = {}; for (final Asset asset in nativeAssets) { - final KernelAssetPath path = _targetLocationIOS(asset, alreadyTakenNames).path; + // Use same target path for all assets with the same id. + final KernelAssetPath path = idToPath[asset.id] ?? + _targetLocationIOS( + asset, + alreadyTakenNames, + ).path; + idToPath[asset.id] = path; result[path] ??= []; result[path]!.add(asset); } diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart index 45d4fd00f80..8b74c533515 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart @@ -175,12 +175,16 @@ Map> _fatAssetTargetLocations( final Set alreadyTakenNames = {}; final Map> result = >{}; + final Map idToPath = {}; for (final Asset asset in nativeAssets) { - final KernelAssetPath path = _targetLocationMacOS( - asset, - absolutePath, - alreadyTakenNames, - ).path; + // Use same target path for all assets with the same id. + final KernelAssetPath path = idToPath[asset.id] ?? + _targetLocationMacOS( + asset, + absolutePath, + alreadyTakenNames, + ).path; + idToPath[asset.id] = path; result[path] ??= []; result[path]!.add(asset); } diff --git a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart index 27d6bce3148..6da128deb3f 100644 --- a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart +++ b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart @@ -18,6 +18,7 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { FakeNativeAssetsBuildRunner({ this.hasPackageConfigResult = true, this.packagesWithNativeAssetsResult = const [], + this.onBuild, this.dryRunResult = const FakeNativeAssetsBuilderResult(), this.buildResult = const FakeNativeAssetsBuilderResult(), CCompilerConfig? cCompilerConfigResult, @@ -25,6 +26,7 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { }) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfig(), ndkCCompilerConfigResult = ndkCCompilerConfigResult ?? CCompilerConfig(); + final native_assets_builder.BuildResult Function(Target)? onBuild; final native_assets_builder.BuildResult buildResult; final native_assets_builder.DryRunResult dryRunResult; final bool hasPackageConfigResult; @@ -51,7 +53,7 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { }) async { buildInvocations++; lastBuildMode = buildMode; - return buildResult; + return onBuild?.call(target) ?? buildResult; } @override diff --git a/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart index b365dcb77af..f76ed542043 100644 --- a/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart @@ -222,7 +222,8 @@ void main() { '-create', '-output', '/build/native_assets/ios/bar.framework/bar', - 'libbar.dylib', + 'arm64/libbar.dylib', + 'x64/libbar.dylib', ], ), const FakeCommand( @@ -253,7 +254,7 @@ void main() { await packageConfig.parent.create(); await packageConfig.create(); await buildNativeAssetsIOS( - darwinArchs: [DarwinArch.arm64], + darwinArchs: [DarwinArch.arm64, DarwinArch.x86_64], environmentType: EnvironmentType.simulator, projectUri: projectUri, buildMode: BuildMode.debug, @@ -263,13 +264,13 @@ void main() { packagesWithNativeAssetsResult: [ Package('bar', projectUri), ], - buildResult: FakeNativeAssetsBuilderResult( + onBuild: (native_assets_cli.Target target) => FakeNativeAssetsBuilderResult( assets: [ Asset( id: 'package:bar/bar.dart', linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.iOSArm64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + target: target, + path: AssetAbsolutePath(Uri.file('${target.architecture}/libbar.dylib')), ), ], ), @@ -278,8 +279,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for [ios_arm64] debug.', - 'Building native assets for [ios_arm64] done.', + 'Building native assets for [ios_arm64, ios_x64] debug.', + 'Building native assets for [ios_arm64, ios_x64] done.', ]), ); expect( diff --git a/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart index 8006ac03c58..6105febf261 100644 --- a/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart @@ -259,7 +259,8 @@ void main() { '-create', '-output', dylibPath, - 'libbar.dylib', + 'arm64/libbar.dylib', + 'x64/libbar.dylib', ], ), if (!flutterTester) @@ -291,7 +292,7 @@ void main() { await packageConfig.parent.create(); await packageConfig.create(); final (Uri? nativeAssetsYaml, _) = await buildNativeAssetsMacOS( - darwinArchs: [DarwinArch.arm64], + darwinArchs: [DarwinArch.arm64, DarwinArch.x86_64], projectUri: projectUri, buildMode: BuildMode.debug, fileSystem: fileSystem, @@ -300,13 +301,13 @@ void main() { packagesWithNativeAssetsResult: [ Package('bar', projectUri), ], - buildResult: FakeNativeAssetsBuilderResult( + onBuild: (native_assets_cli.Target target) => FakeNativeAssetsBuilderResult( assets: [ Asset( id: 'package:bar/bar.dart', linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + target: target, + path: AssetAbsolutePath(Uri.file('${target.architecture}/libbar.dylib')), ), ], ), @@ -315,8 +316,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for [macos_arm64] debug.', - 'Building native assets for [macos_arm64] done.', + 'Building native assets for [macos_arm64, macos_x64] debug.', + 'Building native assets for [macos_arm64, macos_x64] done.', ]), ); expect(