findLibraryFile function

Future<String> findLibraryFile(
  1. String libName,
  2. String searchDir
)

Implementation

Future<String> findLibraryFile(String libName, String searchDir) async {
  final libPath = p.join(searchDir, libName);
  // 优先找这个文件
  if (await File(libPath).exists()) return libPath;

  // 特例:
  // - linux: name.so.1.2.3
  // - mac  : name.1.2.3.dylib
  // 用 name 来搜索
  final name = p.basenameWithoutExtension(libName);
  final files = await Directory(searchDir).list().where((file) {
    return file is File && p.basename(file.path).startsWith(name);
  }).toList();

  if (files.isEmpty) {
    throw Exception('No library files found in $searchDir for $name');
  }
  files.sort(
    (a, b) => p.basename(a.path).length.compareTo(p.basename(b.path).length),
  );
  return files.first.path;
}