# Flutter 项目分析维度指南

9 阅读4分钟
引言:当我们接手到一个新项目,应该如何去了解这个项目呢,下面是我对一个新项目的分析维度。

📊 1. 架构与代码质量分析

代码复杂度

# 安装分析工具
dart pub global activate dart_code_metrics

# 运行复杂度分析
dart pub global run dart_code_metrics:metrics analyze lib

# 检查圈复杂度
dart pub global run dart_code_metrics:metrics analyze lib --metrics=cyclomatic-complexity

# 统计类/方法/函数数量
cloc . --by-file --include-lang=Dart | grep -A 5 "File"

依赖关系分析

# 生成依赖图
dart pub deps

# 可视化依赖关系
flutter pub deps --style=tree

# 检查过时依赖
flutter pub outdated
dart pub upgrade --dry-run

# 分析包大小影响
flutter pub deps --json | python3 -m json.tool

🧹 2. 代码规范与质量

静态分析

# 运行静态分析
flutter analyze

# 详细报告
flutter analyze --watch

# 使用更严格的 lint 规则检查
flutter analyze --no-fatal-infos

# 自定义 lint 规则分析
cat analysis_options.yaml  # 查看配置

代码格式检查

# 检查格式
dart format --output=none --set-exit-if-changed .

# 显示格式差异
dart format lib/ --output=none

🧪 3. 测试覆盖度分析

# 运行测试并生成覆盖率报告
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html

# 检查测试文件覆盖率
lcov --list coverage/lcov.info

# 测试文件统计
find test -name "*.dart" | wc -l
find lib -name "*.dart" | wc -l

# 计算测试比例
echo "测试文件: $(find test -name "*.dart" | wc -l) 个"
echo "源文件: $(find lib -name "*.dart" | wc -l) 个"

📈 4. 性能指标分析

构建性能

# 分析构建大小
flutter build apk --analyze-size
flutter build ios --analyze-size --simulator

# 生成详细大小报告
flutter build apk --target-platform android-arm64 --analyze-size

包大小分析

# 安装分析工具
flutter pub add dev:package_size
flutter pub get

# 分析包大小
dart run package_size

# 检查资源文件大小
du -sh assets/
du -sh lib/

🗂️ 5. 项目结构分析

目录结构统计

# 查看项目树状结构
tree -d -L 3 -I 'build|.dart_tool|.idea|.vscode'

# 各目录代码分布
for dir in lib lib/models lib/screens lib/widgets lib/utils; do
    echo "=== $dir ==="
    find $dir -name "*.dart" -exec wc -l {} + | tail -1
done

# 文件大小分布
find lib -name "*.dart" -exec du -h {} + | sort -hr | head -20

文件类型统计

# 统计不同类型文件数量
echo "Dart 文件: $(find . -name "*.dart" | wc -l)"
echo "配置文件: $(find . -name "pubspec.yaml" -o -name "analysis_options.yaml" -o -name "*.json" | wc -l)"
echo "资源文件: $(find assets/ -type f 2>/dev/null | wc -l)"
echo "图片数量: $(find . -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.gif" -o -name "*.svg" | wc -l)"

🔍 6. 依赖与包分析

第三方依赖

# 列出所有依赖及其用途
cat pubspec.yaml | grep -A 100 "dependencies:"
cat pubspec.yaml | grep -A 100 "dev_dependencies:"

# 检查版本兼容性
flutter pub deps --json > deps.json
python3 -c "import json; data=json.load(open('deps.json')); print('Direct dependencies:', len(data['packages']))"

依赖安全性检查

# 安全检查(需要配置)
flutter pub outdated --mode=null-safety
flutter pub audit

📝 7. 注释与文档分析

# 统计注释行数
find lib -name "*.dart" -exec cat {} + | grep -c "//"
find lib -name "*.dart" -exec cat {} + | grep -c "///"

# 计算注释密度
total_lines=$(find lib -name "*.dart" -exec cat {} + | wc -l)
comment_lines=$(find lib -name "*.dart" -exec cat {} + | grep -c "//")
echo "注释密度: $((comment_lines * 100 / total_lines))%"

# 检查文档覆盖率
# 使用 dartdoc 生成文档并检查
dartdoc --output doc/

🔧 8. 构建与发布分析

配置检查

# 检查构建配置
ls -la android/app/build.gradle
ls -la ios/Runner.xcodeproj

# 检查版本信息
grep -r "version:" pubspec.yaml
grep -r "buildNumber" pubspec.yaml

📱 9. 平台特定分析

# 检查平台特定代码
find . -name "*.kt" -o -name "*.java" -o -name "*.swift" -o -name "*.m" -o -name "*.h" | wc -l

# 检查 MethodChannel 使用
grep -r "MethodChannel" lib/ | wc -l
grep -r "PlatformChannel" lib/ | wc -l

📋 10. 综合健康度检查清单

创建一个分析脚本 analyze_project.sh

#!/bin/bash

echo "🚀 Flutter 项目综合分析报告"
echo "=========================="
echo ""

# 1. 基本信息
echo "📊 项目基本信息:"
echo "项目名称: $(grep 'name:' pubspec.yaml | head -1 | cut -d':' -f2 | xargs)"
echo "版本: $(grep 'version:' pubspec.yaml | head -1 | cut -d':' -f2 | xargs)"
echo "描述: $(grep 'description:' pubspec.yaml | head -1 | cut -d':' -f2 | xargs)"

# 2. 代码规模
echo ""
echo "📈 代码规模分析:"
dart_files=$(find lib -name "*.dart" 2>/dev/null | wc -l)
test_files=$(find test -name "*.dart" 2>/dev/null | wc -l)
echo "Dart 文件数: $dart_files"
echo "测试文件数: $test_files"
echo "测试覆盖率: 运行 'flutter test --coverage' 查看"

# 3. 依赖分析
echo ""
echo "📦 依赖分析:"
deps_count=$(cat pubspec.yaml | grep -A 100 "dependencies:" | grep -c "^\s*\w")
dev_deps_count=$(cat pubspec.yaml | grep -A 100 "dev_dependencies:" | grep -c "^\s*\w")
echo "生产依赖: $deps_count 个"
echo "开发依赖: $dev_deps_count 个"

# 4. 资源分析
echo ""
echo "🖼️ 资源分析:"
if [ -d "assets" ]; then
    asset_count=$(find assets -type f 2>/dev/null | wc -l)
    echo "资源文件: $asset_count 个"
else
    echo "资源文件: 无 assets 目录"
fi

# 5. 状态管理
echo ""
echo "🔄 状态管理:"
state_managers=("Provider" "Riverpod" "Bloc" "GetX" "MobX" "Redux")
for manager in "${state_managers[@]}"; do
    count=$(grep -r "$manager" lib/ 2>/dev/null | grep -v "//" | wc -l)
    if [ $count -gt 0 ]; then
        echo "  - $manager: 使用"
    fi
done

# 6. 建议
echo ""
echo "💡 分析建议:"
echo "1. 运行 'flutter analyze' 检查代码质量"
echo "2. 运行 'flutter test --coverage' 检查测试覆盖"
echo "3. 运行 'flutter pub outdated' 检查依赖更新"
echo "4. 检查 'analysis_options.yaml' 配置代码规范"
echo "5. 运行 'dart format .' 格式化代码"

🔬 11. 高级分析工具

使用 SonarQube

# 配置 SonarQube for Dart/Flutter
# 需要安装 sonar-scanner 和配置 sonar-project.properties
sonar-scanner

自定义分析脚本

#!/usr/bin/env python3
"""
Flutter 项目综合分析工具
"""
import os
import subprocess
import json
from pathlib import Path

def analyze_flutter_project():
    project_path = Path.cwd()
    
    # 收集各类信息
    analysis = {
        "project_info": {},
        "code_metrics": {},
        "dependencies": {},
        "tests": {},
        "assets": {}
    }
    
    # 运行 flutter analyze
    print("🔍 运行代码分析...")
    result = subprocess.run(["flutter", "analyze"], capture_output=True, text=True)
    analysis["code_analysis"] = result.stdout
    
    print("✅ 分析完成!")
    return analysis

if __name__ == "__main__":
    analyze_flutter_project()

📊 推荐的分析流程

  1. 基础统计 - 代码行数、文件数、目录结构
  2. 代码质量 - 静态分析、复杂度、规范检查
  3. 测试覆盖 - 测试文件数、覆盖率报告
  4. 依赖健康 - 依赖数量、版本、安全性
  5. 构建配置 - 构建大小、配置完整性
  6. 资源管理 - 图片、字体、本地化资源
  7. 架构评估 - 状态管理、路由、分层设计

📝 生成分析报告

建议创建一个自动化分析脚本,定期运行并生成报告,帮助团队:

  • 追踪技术债务
  • 监控代码质量趋势
  • 优化项目结构
  • 识别性能瓶颈

通过多维度分析,你可以全面了解项目的健康状况、技术栈选择合理性、团队编码习惯等信息。