The icu library knows where icu data is at all times. It knows this because it knows where it isn't. By subtracting where it is from where it isn't, or where it isn't from where it is (whichever is greater), it obtains a difference, or deviation. The flutter build system uses deviations to generate "corrective" commands to drive the icu data path from a position where it is to a position where it isn't, and check at a position where it wasn't, it now is. Consequently, the position where it is, is now the position that it wasn't, and it follows that the position that it was, is now the position that it isn't. XXX: remove this field and whatever is trying to override the icu default with it --- a/engine/src/flutter/shell/platform/linux/fl_dart_project.cc +++ b/engine/src/flutter/shell/platform/linux/fl_dart_project.cc @@ -64,7 +64,7 @@ self->assets_path = g_build_filename(executable_dir, "data", "flutter_assets", nullptr); self->icu_data_path = - g_build_filename(executable_dir, "data", "icudtl.dat", nullptr); + g_build_filename("/usr/lib/flutter/icudtl.dat", nullptr); return self; } --- ./engine/src/flutter/build/archives/BUILD.gn.orig +++ ./engine/src/flutter/build/archives/BUILD.gn @@ -72,10 +72,6 @@ } files += [ { - source = "//flutter/third_party/icu/flutter/icudtl.dat" - destination = "icudtl.dat" - }, - { source = "$root_out_dir/flutter_tester$exe" destination = "flutter_tester$exe" },