5.9 KiB
5.9 KiB
Codebase Structure
Analysis Date: 2026-03-30
Directory Layout
D:\code\new_git_code\arc/
├── lib/ # Flutter Dart source code
├── android/ # Android native implementation
├── test/ # Unit tests for Dart code
├── example/ # Example Flutter application
├── docs/ # Documentation files
├── .dart_tool/ # Dart tool cache (generated)
├── .planning/ # Planning documents (generated)
└── pubspec.yaml # Flutter package manifest
Directory Purposes
lib:
- Purpose: Flutter plugin Dart source code
- Contains: Public API, platform interface, method channel implementation
- Key files:
arc.dart,arc_platform_interface.dart,arc_method_channel.dart
android:
- Purpose: Android native implementation for ArcSoft SDK integration
- Contains: Java source, ArcSoft SDK libraries, Gradle build config
- Key files:
src/main/java/com/xiarui/arc/ArcPlugin.java,libs/arcsoft_face.jar
test:
- Purpose: Unit tests for Dart plugin code
- Contains: Mock platform implementations, method channel tests
- Key files:
arc_test.dart,arc_method_channel_test.dart
example:
- Purpose: Demonstrates plugin usage with camera-based face detection
- Contains: Complete Flutter app with camera preview and detection UI
- Key files:
lib/main.dart,integration_test/plugin_integration_test.dart
docs:
- Purpose: External SDK documentation
- Contains: ArcSoft face recognition API documentation
- Key files:
虹软人脸识别接口文档.md
android/libs:
- Purpose: ArcSoft native SDK JAR files
- Contains:
arcsoft_face.jar(face recognition),arcsoft_image_util.jar(image utilities) - Generated: No (third-party SDK)
- Committed: Yes
android/src/main/jniLibs:
- Purpose: Native library files for different CPU architectures
- Contains:
.sofiles for arm64-v8a, armeabi-v7a - Generated: No (from ArcSoft SDK)
- Committed: Yes
Key File Locations
Entry Points:
lib/arc.dart: Public API entry point for plugin consumersandroid/src/main/java/com/xiarui/arc/ArcPlugin.java: Android plugin registration and method handlingexample/lib/main.dart: Example app entry point
Configuration:
pubspec.yaml: Flutter package configuration, SDK version constraintsandroid/build.gradle: Android library build configuration, SDK dependenciesandroid/src/main/AndroidManifest.xml: Android permissions (CAMERA, INTERNET, STORAGE)
Core Logic:
lib/arc_platform_interface.dart: Platform interface abstract classlib/arc_method_channel.dart: Method channel implementationandroid/src/main/java/com/xiarui/arc/FaceEngineManager.java: Singleton managing FaceEngine lifecycle
Data Models:
android/src/main/java/com/xiarui/arc/FaceInfo.java: Face detection result modelandroid/src/main/java/com/xiarui/arc/FaceErrorCode.java: Error code enumeration (586 lines)
Testing:
test/arc_test.dart: Mock platform teststest/arc_method_channel_test.dart: Method channel unit testsandroid/src/test/java/com/xiarui/arc/ArcPluginTest.java: Android unit tests
Naming Conventions
Files:
- Dart: lowercase with underscores, e.g.,
arc_platform_interface.dart - Java: PascalCase for classes, e.g.,
ArcPlugin.java,FaceEngineManager.java
Classes:
- Dart: PascalCase, e.g.,
Arc,ArcPlatform,MethodChannelArc - Java: PascalCase, e.g.,
FaceEngineManager,FaceErrorCode
Methods:
- Dart: camelCase with descriptive names, e.g.,
activeOnline,detectFaces,extractFaceFeature - Java: camelCase with handler prefix for dispatch, e.g.,
handleActiveOnline,handleDetectFaces
Variables:
- Dart: camelCase for local/instance variables
- Java: camelCase, enum constants use UPPER_SNAKE_CASE, e.g.,
MERR_ASF_ACTIVATION_FAIL
Where to Add New Code
New Feature (Dart API):
- Primary code:
lib/arc.dart- add public method - Interface:
lib/arc_platform_interface.dart- add abstract method - Implementation:
lib/arc_method_channel.dart- add method channel invocation
New Feature (Android Native):
- Handler:
android/src/main/java/com/xiarui/arc/ArcPlugin.java- add case inonMethodCall()switch - Logic:
android/src/main/java/com/xiarui/arc/FaceEngineManager.java- add SDK operation method
New Platform Support (iOS/Web):
- Create platform-specific implementation in appropriate directory
- Register in
pubspec.yamlunderplugin.platforms
New Data Model:
- Location:
android/src/main/java/com/xiarui/arc/alongside existing models - Pattern: JavaBean style with getters/setters and
toMap()method
Tests:
- Dart tests:
test/directory, named*_test.dart - Android tests:
android/src/test/java/com/xiarui/arc/directory
Utilities:
- Shared helpers:
android/src/main/java/com/xiarui/arc/as utility classes
Special Directories
android/libs:
- Purpose: ArcSoft SDK JAR files (third-party)
- Generated: No
- Committed: Yes (required for build)
- Note: Contains
arcsoft_face.jar,arcsoft_image_util.jar
android/src/main/jniLibs:
- Purpose: Native
.solibraries for CPU architectures - Generated: No (from ArcSoft SDK distribution)
- Committed: Yes
- Architectures: arm64-v8a, armeabi-v7a
example/build:
- Purpose: Flutter/Gradle build artifacts
- Generated: Yes
- Committed: No (should be in .gitignore)
.dart_tool:
- Purpose: Dart package config and tool cache
- Generated: Yes
- Committed: No
.planning:
- Purpose: GSD planning documents
- Generated: Yes (by GSD tools)
- Committed: Yes (for team visibility)
Package Structure
Flutter Package:
- Package name:
arc - Version: 0.0.1
- SDK constraint:
^3.9.0 - Flutter constraint:
>=3.3.0 - Platforms: Android only (current)
Android Package:
- Package name:
com.xiarui.arc - Plugin class:
ArcPlugin - Min SDK: 24 (Android 7.0)
- Compile SDK: 36
- Java version: 11
Structure analysis: 2026-03-30