/ app / rust_builder / cargokit / build_tool / lib / src / build_gradle.dart
build_gradle.dart
 1  /// This is copied from Cargokit (which is the official way to use it currently)
 2  /// Details: https://fzyzcjy.github.io/flutter_rust_bridge/manual/integrate/builtin
 3  
 4  import 'dart:io';
 5  
 6  import 'package:logging/logging.dart';
 7  import 'package:path/path.dart' as path;
 8  
 9  import 'artifacts_provider.dart';
10  import 'builder.dart';
11  import 'environment.dart';
12  import 'options.dart';
13  import 'target.dart';
14  
15  final log = Logger('build_gradle');
16  
17  class BuildGradle {
18    BuildGradle({required this.userOptions});
19  
20    final CargokitUserOptions userOptions;
21  
22    Future<void> build() async {
23      final targets = Environment.targetPlatforms.map((arch) {
24        final target = Target.forFlutterName(arch);
25        if (target == null) {
26          throw Exception(
27              "Unknown darwin target or platform: $arch, ${Environment.darwinPlatformName}");
28        }
29        return target;
30      }).toList();
31  
32      final environment = BuildEnvironment.fromEnvironment(isAndroid: true);
33      final provider =
34          ArtifactProvider(environment: environment, userOptions: userOptions);
35      final artifacts = await provider.getArtifacts(targets);
36  
37      for (final target in targets) {
38        final libs = artifacts[target]!;
39        final outputDir = path.join(Environment.outputDir, target.android!);
40        Directory(outputDir).createSync(recursive: true);
41  
42        for (final lib in libs) {
43          if (lib.type == AritifactType.dylib) {
44            File(lib.path).copySync(path.join(outputDir, lib.finalFileName));
45          }
46        }
47      }
48    }
49  }