scan method

  1. @override
Future<ScannerResult> scan(
  1. ProjectContext context
)
override

Executes the scan and returns a ScannerResult.

Implementation

@override
Future<ScannerResult> scan(ProjectContext context) async {
  context.logger.startSpinner('Analyzing Builds...');
  final issues = <Issue>[];

  final androidBuildDir = Directory(
    '${context.directory}/build/app/outputs/flutter-apk/',
  );
  double totalApkSizeMb = 0;

  if (androidBuildDir.existsSync()) {
    final apks = androidBuildDir.listSync().whereType<File>().where(
      (f) => f.path.endsWith('.apk'),
    );
    for (final apk in apks) {
      final sizeMb = apk.lengthSync() / (1024 * 1024);
      totalApkSizeMb += sizeMb;

      if (sizeMb > 50) {
        issues.add(
          Issue(
            title: 'Large APK Size',
            description:
                'APK ${apk.path.split('/').last} is ${sizeMb.toStringAsFixed(2)}MB.',
            category: 'Performance',
            severity: IssueSeverity.medium,
            suggestion:
                'Use AppBundles (.aab) for production. Compress assets and use ProGuard.',
          ),
        );
      }
    }
  }

  context.logger.stopSpinner();
  return ScannerResult(
    issues: issues,
    metrics: {'total_apk_size_mb': totalApkSizeMb},
  );
}