diff --git a/packages/flutter_tools/lib/src/ohos/ohos_plugins_manager.dart b/packages/flutter_tools/lib/src/ohos/ohos_plugins_manager.dart index c0035dd27cc9bf3992d69623998f97277c086565..574df4264618bf99f0995a7162e06d68ab749362 100644 --- a/packages/flutter_tools/lib/src/ohos/ohos_plugins_manager.dart +++ b/packages/flutter_tools/lib/src/ohos/ohos_plugins_manager.dart @@ -19,12 +19,15 @@ import 'package:json5/json5.dart'; import '../base/common.dart'; import '../base/file_system.dart'; +import '../base/utils.dart'; import '../flutter_plugins.dart'; import '../globals.dart' as globals; import '../platform_plugins.dart'; import '../plugins.dart'; import '../project.dart'; +const String kUseAbsolutePathOfHar = 'useAbsolutePathOfHar'; + /// 检查 ohos plugin 依赖 Future checkOhosPluginsDependencies(FlutterProject flutterProject) async { final List plugins = (await findPlugins(flutterProject)) @@ -36,6 +39,9 @@ Future checkOhosPluginsDependencies(FlutterProject flutterProject) async { return; } + final SettingsFile settings = flutterProject.ohos.settings; + final bool useAbsolutePathOfHar = settings.values[kUseAbsolutePathOfHar] == 'true'; + final String packageConfig = packageFile.readAsStringSync(); final Map config = JSON5.parse(packageConfig) as Map; final Map dependencies = @@ -48,10 +54,10 @@ Future checkOhosPluginsDependencies(FlutterProject flutterProject) async { } } final String absolutePath = globals.fs.path.join(flutterProject.ohos.ohosRoot.path, 'har/${plugin.name}.har'); - if (flutterProject.isModule) { + if (useAbsolutePathOfHar && flutterProject.isModule) { dependencies[plugin.name] = 'file:$absolutePath'; } else { - final String relativePath = _relative(absolutePath, from: globals.fs.path.dirname(packageFile.path)); + final String relativePath = _relative(absolutePath, globals.fs.path.dirname(packageFile.path)); dependencies[plugin.name] = 'file:$relativePath'; } } @@ -88,7 +94,7 @@ Future addPluginsModules(FlutterProject flutterProject) async { 'name': plugin.name, 'srcPath': _relative( globals.fs.path.join(plugin.path, OhosPlugin.kConfigKey), - from: flutterProject.ohos.ohosRoot.path, + flutterProject.ohos.ohosRoot.path, ), 'targets': >[ { @@ -122,10 +128,10 @@ Future addFlutterModuleAndPluginsSrcOverrides(FlutterProject flutterProjec for (final Plugin plugin in plugins) { overrides[plugin.name] = _relative( globals.fs.path.join(plugin.path, OhosPlugin.kConfigKey), - from: flutterProject.ohos.ohosRoot.path, + flutterProject.ohos.ohosRoot.path, ); } - final String relativePath = _relative(flutterProject.ohos.flutterModuleDirectory.path, from: flutterProject.ohos.ohosRoot.path); + final String relativePath = _relative(flutterProject.ohos.flutterModuleDirectory.path, flutterProject.ohos.ohosRoot.path); overrides['@ohos/flutter_module'] = 'file:./$relativePath'; overrides['@ohos/flutter_ohos'] = 'file:./har/flutter.har'; final String configNew = const JsonEncoder.withIndent(' ').convert(config); @@ -181,10 +187,12 @@ Future addFlutterModuleAndPluginsOverrides(FlutterProject flutterProject) final String packageConfig = packageFile.readAsStringSync(); final Map config = JSON5.parse(packageConfig) as Map; final Map overrides = config['overrides'] as Map? ?? {}; + final SettingsFile settings = flutterProject.ohos.settings; + final bool useAbsolutePathOfHar = settings.values[kUseAbsolutePathOfHar] == 'true'; for (final Plugin plugin in plugins) { final String absolutePath = globals.fs.path.join(flutterProject.ohos.ohosRoot.path, 'har/${plugin.name}.har'); - if (flutterProject.isModule) { + if (useAbsolutePathOfHar && flutterProject.isModule) { overrides[plugin.name] = 'file:$absolutePath'; } else { overrides[plugin.name] = 'file:./har/${plugin.name}.har'; @@ -194,8 +202,10 @@ Future addFlutterModuleAndPluginsOverrides(FlutterProject flutterProject) packageFile.writeAsStringSync(configNew, flush: true); } -String _relative(String path, {String? from}) { - final String realPath = globals.fs.file(path).resolveSymbolicLinksSync(); +String _relative(String path, String from) { + final String realPath = path.endsWith('.har') + ? path + : globals.fs.file(path).resolveSymbolicLinksSync(); final String realFrom = globals.fs.file(from).resolveSymbolicLinksSync(); final String result = globals.fs.path.relative(realPath, from: realFrom).replaceAll(r'\', '/'); return result; diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index afa0119091b9578874d072589693fd0121145a5a..1c1e5cfae029b0ff6ad646fb1ec09d6cd45b0a6b 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -1254,6 +1254,14 @@ class OhosProject extends FlutterProjectPlatform { File get ephemeralLocalPropertiesFile => ephemeralDirectory.childFile('local.properties'); + SettingsFile get settings => isModule + ? (ephemeralLocalPropertiesFile.existsSync() + ? SettingsFile.parseFromFile(ephemeralLocalPropertiesFile) + : SettingsFile()) + : (localPropertiesFile.existsSync() + ? SettingsFile.parseFromFile(localPropertiesFile) + : SettingsFile()); + bool hasSignedHapBuild(flavor) { return getSignedHapFile(flavor).existsSync(); }