@ohos-cpf/3rdloop 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +290 -244
- package/bin/3rdloop.mjs +46 -46
- package/lib/cli.js +781 -781
- package/lib/config-cmd.js +451 -451
- package/lib/config.js +318 -318
- package/lib/doctor.js +113 -113
- package/lib/exit-codes.js +30 -30
- package/lib/opencode.js +155 -155
- package/lib/orch.js +426 -426
- package/lib/queries.js +263 -263
- package/lib/step.js +325 -325
- package/lib/ui.js +222 -222
- package/lib/update.js +279 -279
- package/lib/workflow.js +308 -308
- package/lib/workflows.js +131 -131
- package/package.json +50 -50
- package/vendor/Server/Agent/SkillSelector/README.md +343 -343
- package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
- package/vendor/Server/Agent/SkillSelector/index.js +14 -14
- package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
- package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
- package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
- package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
- package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
- package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
- package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
- package/vendor/Server/Brain/Brain.js +686 -686
- package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
- package/vendor/Server/Brain/PlanPersistence.js +196 -196
- package/vendor/Server/Brain/SkillExecutor.js +251 -251
- package/vendor/Server/Brain/index.js +11 -11
- package/vendor/Server/CLI/cli.js +275 -275
- package/vendor/Server/CLI/deveco-code/index.js +71 -71
- package/vendor/Server/CLI/deveco-code.js +5 -5
- package/vendor/Server/CLI/opencode/index.js +817 -818
- package/vendor/Server/CLI/opencode.js +5 -5
- package/vendor/Server/DbUse/MessageArchive.js +61 -61
- package/vendor/Server/DbUse/StorageManager.js +107 -107
- package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
- package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
- package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
- package/vendor/Server/DbUse/index.js +160 -160
- package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
- package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
- package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
- package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
- package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
- package/vendor/Server/FlexRunner/index.js +12 -12
- package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
- package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
- package/vendor/Server/Knowledge/index.js +33 -33
- package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
- package/vendor/Server/LoopEngine/index.js +11 -11
- package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
- package/vendor/Server/Orchestrator/StepNode.js +312 -312
- package/vendor/Server/Orchestrator/index.js +13 -13
- package/vendor/Server/Routes/controllers/BrainController.js +241 -241
- package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
- package/vendor/Server/Routes/controllers/HealthController.js +44 -44
- package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
- package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
- package/vendor/Server/Routes/controllers/StatsController.js +57 -57
- package/vendor/Server/Routes/controllers/StreamController.js +67 -67
- package/vendor/Server/Routes/library/logger.js +179 -179
- package/vendor/Server/Routes/library/zipArchive.js +172 -172
- package/vendor/Server/Routes/router/Router.js +204 -204
- package/vendor/Server/Routes/routes/brain.js +47 -47
- package/vendor/Server/Routes/routes/flexrunner.js +72 -72
- package/vendor/Server/Routes/routes/health.js +28 -28
- package/vendor/Server/Routes/routes/index.js +57 -57
- package/vendor/Server/Routes/routes/knowledge.js +55 -55
- package/vendor/Server/Routes/routes/loopengine.js +58 -58
- package/vendor/Server/Routes/routes/orchestrator.js +61 -61
- package/vendor/Server/Routes/routes/registry.js +97 -97
- package/vendor/Server/Routes/routes/stats.js +23 -23
- package/vendor/Server/Routes/routes/stream.js +30 -30
- package/vendor/Server/Routes/server.js +203 -203
- package/vendor/Server/Routes/sse/SseHub.js +308 -308
- package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
- package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
- package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
- package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
- package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
- package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
- package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
- package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
- package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
- package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
- package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
- package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
- package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
- package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
- package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
- package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
- package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
- package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
- package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
- package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
- package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
- package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
- package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
- package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
- package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
- package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
- package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
- package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
- package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
- package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
- package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
- package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
- package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
- package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
- package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
- package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
- package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
- package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
- package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/flutter-interface/README.md +75 -75
- package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
- package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
- package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
- package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
- package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
- package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
- package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
- package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
- package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
- package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
- package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
- package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
- package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
- package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
- package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
- package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
- package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
- package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
- package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
- package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
- package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
- package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
- package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
- package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
- package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
- package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
- package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
- package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
- package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
- package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
- package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
- package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
- package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
- package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
- package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
- package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
- package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
- package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
- package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
- package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
- package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
- package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
- package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
- package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
- package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
- package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
- package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
- package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
- package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
- package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
- package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
- package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
- package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
- package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
- package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
- package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
- package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
- package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
- package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
- package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
- package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
- package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
- package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
- package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
- package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
- package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
- package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
- package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
- package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
- package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
- package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
- package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
- package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
- package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
- package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
- package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
- package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
- package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
- package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
- package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
- package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
- package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
- package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
- package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
- package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
- package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
- package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
- package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
- package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
- package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
- package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
- package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
- package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
- package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
- package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
- package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
- package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
- package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
- package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
- package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
- package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
- package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
- package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
- package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
- package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
- package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
- package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
- package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
- package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
- package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
- package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
- package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
- package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
- package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
- package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
- package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
- package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
- package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
- package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
- package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
- package/vendor/Server/TestCheck/TestCheck.js +775 -775
- package/vendor/Server/TestCheck/index.js +11 -11
- package/vendor/Server/library/McpToolGuide.js +280 -280
- package/vendor/Server/library/StatsService.js +126 -126
- package/vendor/Server/library/cstTime.js +16 -16
- package/vendor/VERSION +3 -3
- package/workflows/pr-check.mjs +105 -105
- package/workflows/pr-push.mjs +192 -192
- package/vendor/Server/Agent/SkillSelector/types.js +0 -63
|
@@ -1,745 +1,745 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: flutter-library-stability-check
|
|
3
|
-
description: 对 Flutter 三方库的鸿蒙化代码进行稳定性检视,聚焦鸿蒙化新增的 ArkTS/ETS 代码,分析异常处理、资源释放、并发安全、调用链完整性等稳定性维度,生成严苛评分报告(0-100分)。仅对鸿蒙化新增代码评分,原库上游问题列入风险提示但不纳入评分。作为 Flutter 仓库检视流程的第二阶段,依赖 library-interface-analyzer 的输出。
|
|
4
|
-
license: Apache-2.0
|
|
5
|
-
compatibility: 需要访问 Git 仓库、分析 ohos 目录源码、识别代码来源(Copyright/git blame)
|
|
6
|
-
metadata:
|
|
7
|
-
version: "1.0.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# FlutterLibraryStabilityCheckSkill
|
|
11
|
-
|
|
12
|
-
对 Flutter 三方库的**鸿蒙化实现代码**进行稳定性检视,评估库在异常情况下的处理能力、资源管理安全性、跨语言调用可靠性等关键稳定性指标。
|
|
13
|
-
|
|
14
|
-
> ⚠️ **核心定位**:本 SKILL **仅对鸿蒙化新增代码评分**,原库上游代码问题列入"上游风险提示"但不纳入评分。检视范围通过**智能扫描 + 代码来源识别**双重判定。
|
|
15
|
-
>
|
|
16
|
-
> **代码来源识别维度**:
|
|
17
|
-
> - **Copyright 声明**:`"Huawei Device Co., Ltd."` / `"OpenHarmony"` → 鸿蒙化新增;`"The Kraken authors"` / 其他 → 原库上游
|
|
18
|
-
> - **文件类型特征**:`.ets`(ArkTS/ETS)、`module.json5`(鸿蒙模块配置)
|
|
19
|
-
> - **API 调用特征**:`@ohos.*`、`napi_*`、`import from '@ohios'`、`geoLocationManager` 等
|
|
20
|
-
> - **平台标识特征**:目录名包含 `ohos`、`harmony`、`openharmony` 等
|
|
21
|
-
> - **配置文件特征**:`oh-package.json5`、`build-profile.json5`
|
|
22
|
-
>
|
|
23
|
-
> ⚠️ **架构适配**:部分 Flutter 三方库使用 **dart:ffi + MethodChannel** 而非 NAPI 桥接。此类项目中:
|
|
24
|
-
> - Phase 3(NAPI 层分析)标记为 N/A,不扣分
|
|
25
|
-
> - 评分以 ArkTS/ETS 鸿蒙化代码质量为主
|
|
26
|
-
> - C++ 原库代码(即使为 OHOS 编译)列为上游风险提示
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 任务参数
|
|
31
|
-
|
|
32
|
-
| 参数 | 必需 | 说明 |
|
|
33
|
-
|------|------|------|
|
|
34
|
-
| `repoUrl` | ✅ | Git 仓库地址,支持分支参数 `?branch=xxx` |
|
|
35
|
-
| `outputDir` | ✅ | 输出目录绝对路径,存放检视报告 |
|
|
36
|
-
| `interfaceDocPath` | ✅ | 接口规格说明文档路径(由 library-interface-analyzer 生成) |
|
|
37
|
-
| `repoName` | ✅ | 仓库名称(用于报告标识) |
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 输入依赖
|
|
42
|
-
|
|
43
|
-
本 SKILL 是 Flutter 仓库检视流程的**第二阶段**,依赖:
|
|
44
|
-
|
|
45
|
-
- **前置 SKILL**: `library-interface-analyzer`
|
|
46
|
-
- **输入文件**: `接口规格说明.md`(位于 outputDir)
|
|
47
|
-
- **仓库源码**: 已克隆到 `{outputDir}/source/`,通过智能扫描定位鸿蒙化代码
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 工作流程
|
|
52
|
-
|
|
53
|
-
### Phase 1:鸿蒙代码智能定位与范围识别
|
|
54
|
-
|
|
55
|
-
**通过多维度特征扫描**,智能识别鸿蒙化代码,而非依赖固定目录名称。
|
|
56
|
-
|
|
57
|
-
#### 1.1 扫描策略(优先级递减)
|
|
58
|
-
|
|
59
|
-
| 扫描维度 | 特征模式 | 权重 | 说明 |
|
|
60
|
-
|----------|----------|------|------|
|
|
61
|
-
| **文件类型** | `*.ets` 文件 | ⭐⭐⭐ 高 | ArkTS/ETS 文件是鸿蒙化的最强特征 |
|
|
62
|
-
| **配置文件** | `module.json5`、`oh-package.json5` | ⭐⭐⭐ 高 | 鸿蒙特有的模块配置文件 |
|
|
63
|
-
| **API 调用** | `@ohos.*`、`napi_*`、`import from '@ohos'` | ⭐⭐ 中 | 鸿蒙 API 特征 |
|
|
64
|
-
| **目录标识** | 目录名包含 `ohos`、`harmony`、`openharmony` | ⭐ 低 | 辅助参考,可能使用其他名称 |
|
|
65
|
-
| **C++ NAPI** | `napi_create_reference`、`napi_value` 等 | ⭐⭐ 中 | Native 层鸿蒙绑定特征 |
|
|
66
|
-
|
|
67
|
-
#### 1.2 扫描执行流程
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# Step 1: 扫描 ArkTS/ETS 文件(最高优先级)
|
|
71
|
-
find {sourceDir} -name "*.ets" -type f
|
|
72
|
-
|
|
73
|
-
# Step 2: 扫描鸿蒙配置文件
|
|
74
|
-
find {sourceDir} -name "module.json5" -o -name "oh-package.json5" -type f
|
|
75
|
-
|
|
76
|
-
# Step 3: 扫描 NAPI 相关 C++ 文件
|
|
77
|
-
grep -r "napi_" --include="*.cpp" --include="*.h" {sourceDir}
|
|
78
|
-
|
|
79
|
-
# Step 4: 扫描 @ohos API 导入
|
|
80
|
-
grep -r "import.*@ohos" --include="*.ets" --include="*.ts" {sourceDir}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
#### 1.3 代码定位结果分类
|
|
84
|
-
|
|
85
|
-
根据扫描结果,将代码分为以下类别:
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
检视范围判定:
|
|
89
|
-
├── 鸿蒙核心代码(必检视)
|
|
90
|
-
│ ├── *.ets 文件 # ArkTS/ETS 实现 ✅ 检视
|
|
91
|
-
│ │ ├── plugin*.ets # Plugin 实现
|
|
92
|
-
│ │ ├── entry*.ets # Ability 入口
|
|
93
|
-
│ │ └── *.ets # 其他 ETS 文件
|
|
94
|
-
│ ├── module.json5 # 模块配置 ✅ 检视
|
|
95
|
-
│ ├── napi_*.cpp / *.cpp # Native NAPI 绑定 ✅ 检视
|
|
96
|
-
│ └── oh-package.json5 # 依赖配置 ⚠️ 辅助参考
|
|
97
|
-
├── 非鸿蒙代码(不检视)
|
|
98
|
-
│ ├── android/ # Android 实现 ❌ 不检视
|
|
99
|
-
│ ├── ios/ # iOS 实现 ❌ 不检视
|
|
100
|
-
│ ├── lib/ # Flutter Dart 层 ❌ 不检视
|
|
101
|
-
│ └── 未包含鸿蒙特征的代码 ❌ 不检视
|
|
102
|
-
├── 疑似鸿蒙代码(需验证)
|
|
103
|
-
│ ├── 目录名含 harmony/ohos 但无 .ets 文件 ⚠️ 进一步检查
|
|
104
|
-
│ └── 含部分 napi 调用但无完整结构 ⚠️ 进一步检查
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
#### 1.4 判定规则
|
|
108
|
-
|
|
109
|
-
| 扫描结果 | 判定 | 评分 | 后续操作 |
|
|
110
|
-
|----------|------|------|----------|
|
|
111
|
-
| 发现 `.ets` 文件 | ✅ 存在鸿蒙化 | 正常评分 | 进入 Phase 1.5 代码来源分类 |
|
|
112
|
-
| 发现 `module.json5` + NAPI 代码 | ✅ 存在鸿蒙化 | 正常评分 | 进入 Phase 1.5 代码来源分类 |
|
|
113
|
-
| 仅发现目录名含 `ohos` 但无代码文件 | ⚠️ 疑似未完成 | 0-30 分 | 报告标注"鸿蒙化代码疑似缺失" |
|
|
114
|
-
| 未发现任何鸿蒙特征 | ❌ 未实现鸿蒙化 | 0 分 | 报告标注"未发现鸿蒙化实现代码" |
|
|
115
|
-
| 无法访问源码目录 | ❌ 无法检视 | 0 分 | 报告标注"源码目录不可访问" |
|
|
116
|
-
|
|
117
|
-
**重要说明**:
|
|
118
|
-
- **不以固定目录名否定**:即使没有 `ohos/` 目录,只要发现 `.ets` 文件或鸿蒙 API 调用,即判定为存在鸿蒙化
|
|
119
|
-
- **不以目录名肯定**:仅有 `ohos/` 目录名但无实际代码文件,不认定为鸿蒙化完成
|
|
120
|
-
- **优先代码特征**:文件类型和 API 调用特征优先级高于目录名称
|
|
121
|
-
|
|
122
|
-
### Phase 1.5:代码来源分类(评分范围划定)
|
|
123
|
-
|
|
124
|
-
**关键步骤**:区分鸿蒙化新增代码与原库上游代码,确保评分仅针对鸿蒙化开发者的工作。
|
|
125
|
-
|
|
126
|
-
#### 1.5.1 分类策略
|
|
127
|
-
|
|
128
|
-
通过以下方法识别每个扫描发现的文件的代码来源:
|
|
129
|
-
|
|
130
|
-
| 识别方法 | 优先级 | 说明 |
|
|
131
|
-
|----------|--------|------|
|
|
132
|
-
| **Copyright 声明** | ⭐⭐⭐ 最高 | 检查文件头部 Copyright 声明,区分鸿蒙化新增 vs 原库上游 |
|
|
133
|
-
| **Git blame 历史** | ⭐⭐ 中 | 查看文件修改历史,鸿蒙化分支新增的文件为鸿蒙化代码 |
|
|
134
|
-
| **文件位置特征** | ⭐ 低辅助 | `ohos/` 目录下的 `.ets` 文件通常是鸿蒙化新增;`bridge/` 下的 C++ 通常为原库 |
|
|
135
|
-
|
|
136
|
-
#### 1.5.2 分类执行流程
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
# Step 1: 检查 Copyright 声明(最可靠)
|
|
140
|
-
# 鸿蒙化代码特征:Copyright 中包含 "Huawei Device Co., Ltd." 或 "OpenHarmony"
|
|
141
|
-
grep -r "Copyright.*Huawei Device" --include="*.ets" --include="*.ts" --include="*.cpp" --include="*.h" {sourceDir}
|
|
142
|
-
|
|
143
|
-
# Step 2: 检查原库代码 Copyright
|
|
144
|
-
# 原库代码特征:Copyright 中包含原始项目名(如 "The Kraken authors"),不含华为/OpenHarmony
|
|
145
|
-
grep -r "Copyright" --include="*.ets" --include="*.ts" --include="*.cpp" --include="*.h" {sourceDir}
|
|
146
|
-
|
|
147
|
-
# Step 3: 检查 git blame(辅助验证)
|
|
148
|
-
# 查看文件最近修改是否为鸿蒙化分支新增
|
|
149
|
-
git log --oneline -- {sourceDir}/ohos/
|
|
150
|
-
git log --oneline -- {sourceDir}/bridge/
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
#### 1.5.3 分类结果
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
代码来源分类:
|
|
157
|
-
├── 鸿蒙化新增代码(✅ 纳入评分)
|
|
158
|
-
│ ├── *.ets 文件(Copyright: Huawei/OpenHarmony) ✅ 评分
|
|
159
|
-
│ ├── module.json5 / oh-package.json5 ✅ 评分
|
|
160
|
-
│ ├── build_ohos.ps1 / CMakeLists.ohos.txt ✅ 评分
|
|
161
|
-
│ ├── napi_*.cpp(鸿蒙化新增的 NAPI 绑定) ✅ 评分
|
|
162
|
-
│ └── EntryAbility.ets / Index.ets ✅ 评分
|
|
163
|
-
├── 原库上游代码(⚠️ 不纳入评分,列入风险提示)
|
|
164
|
-
│ ├── bridge/*.cpp / *.h(原库 C++ 桥接) ⚠️ 风险提示
|
|
165
|
-
│ ├── foundation/*.cc / *.h(原库基础设施) ⚠️ 风险提示
|
|
166
|
-
│ ├── kraken/lib/*.dart(Flutter Dart 层) ⚠️ 风险提示
|
|
167
|
-
│ └── 其他原库代码(无华为/OpenHarmony Copyright) ⚠️ 风险提示
|
|
168
|
-
├── 需验证来源的代码
|
|
169
|
-
│ ├── 无 Copyright 声明的文件 ⚠️ 需通过 git blame 验证
|
|
170
|
-
│ └── Copyright 不明确的文件 ⚠️ 需进一步分析
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
#### 1.5.4 分类判定规则
|
|
174
|
-
|
|
175
|
-
| 分类条件 | 判定 | 评分影响 | 报告处理 |
|
|
176
|
-
|----------|------|----------|----------|
|
|
177
|
-
| Copyright 包含 "Huawei Device Co., Ltd." / "OpenHarmony" | 鸿蒙化新增 | ✅ 纳入评分 | 列入"检视范围" |
|
|
178
|
-
| Copyright 不含华为/OpenHarmony(含原项目名) | 原库上游 | ❌ 不纳入评分 | 列入"上游风险提示" |
|
|
179
|
-
| 无 Copyright 声明 + 在 `ohos/` 目录 + `.ets` 文件 | 推定为鸿蒙化 | ✅ 纳入评分 | 列入"检视范围",标注"推定" |
|
|
180
|
-
| 无 Copyright 声明 + 不在 `ohos/` 目录 + `.cpp` 文件 | 推定为原库 | ❌ 不纳入评分 | 列入"上游风险提示",标注"推定" |
|
|
181
|
-
| 无 Copyright + git blame 显示鸿蒙化分支新增 | 鸿蒙化新增 | ✅ 纳入评分 | 列入"检视范围" |
|
|
182
|
-
|
|
183
|
-
#### 1.5.5 架构类型判定
|
|
184
|
-
|
|
185
|
-
同时判定项目的 Native 桥接架构类型,影响后续分析范围:
|
|
186
|
-
|
|
187
|
-
| 架构特征 | 架构类型 | Phase 3 处理 | 评分调整 |
|
|
188
|
-
|----------|----------|-------------|----------|
|
|
189
|
-
| 发现 `napi_*` 调用在鸿蒙化新增 C++ 文件中 | NAPI 架构 | 正常分析 | Phase 3 正常评分 |
|
|
190
|
-
| 发现 `napi_*` 调用但仅在原库 C++ 文件中 | 原库含 NAPI + 鸿蒙化无新增 NAPI | Phase 3 N/A(原库 NAPI 不评分) | Phase 3 标记全部通过 |
|
|
191
|
-
| 无任何 `napi_*` 调用(使用 dart:ffi / MethodChannel) | FFI 架构 | Phase 3 N/A | Phase 3 标记全部通过 |
|
|
192
|
-
| 仅发现 CMakeLists.ohos.txt(编译配置) | 编译适配型 | Phase 3 N/A | Phase 3 标记全部通过 |
|
|
193
|
-
|
|
194
|
-
**关键原则**:
|
|
195
|
-
- **原库 C++ 代码即使为 OHOS 编译,也不纳入评分** — 鸿蒙化开发者仅添加编译配置,未修改源码
|
|
196
|
-
- **仅鸿蒙化新增的 NAPI C++ 文件纳入 Phase 3 评分**
|
|
197
|
-
- **dart:ffi / MethodChannel 架构项目中,Native 层稳定性由原库保证,不属于鸿蒙化检视范围**
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
### Phase 2:ArkTS 层稳定性分析(仅鸿蒙化代码)
|
|
202
|
-
|
|
203
|
-
> ⚠️ **评分范围**:Phase 2 仅分析**鸿蒙化新增的 ArkTS/ETS 代码**(Phase 1.5 分类结果中标记为"纳入评分"的文件)。原库代码中的异常处理问题不扣分。
|
|
204
|
-
|
|
205
|
-
#### 2.1 NAPI 引用管理 / FFI 资源管理(致命项,20分)
|
|
206
|
-
|
|
207
|
-
NAPI 引用是鸿蒙 Native 层最核心的资源,错误管理会导致内存泄漏或崩溃。
|
|
208
|
-
|
|
209
|
-
> ⚠️ **架构适配**:若项目使用 **dart:ffi + MethodChannel** 而非 NAPI(Phase 1.5 判定),ArkTS 层无直接 NAPI/FFI 资源管理,此维度全部标记为通过(20/20),不扣分。
|
|
210
|
-
|
|
211
|
-
| 检查项 | 问题描述 | 扣分规则 | 适用条件 |
|
|
212
|
-
|--------|----------|----------|----------|
|
|
213
|
-
| `napi_ref` 创建 | 是否为需要长期持有的对象创建 `napi_ref` | 缺失扣 5 分 | 仅 NAPI 架构 |
|
|
214
|
-
| `napi_ref` 释放 | 是否在 dispose/destroy 时调用 `napi_delete_reference` | **未释放扣 20 分(致命)** | 仅 NAPI 架构 |
|
|
215
|
-
| 引用计数平衡 | `napi_create_reference` 和 `napi_delete_reference` 数量是否匹配 | 不平衡扣 15 分 | 仅 NAPI 架构 |
|
|
216
|
-
| 引用有效性检查 | 使用前是否检查 ref 是否有效 | 未检查扣 5 分 | 仅 NAPI 架构 |
|
|
217
|
-
| MethodChannel 引用清理 | 是否在 onDetachedFromEngine 清空所有引用 | 未清空扣 5 分 | 仅 FFI 架构 |
|
|
218
|
-
| 静态注册表清理 | 是否在 destroy 时从静态 Map/注册表删除 | 未删除扣 5 分 | 仅 FFI 架构 |
|
|
219
|
-
|
|
220
|
-
**代码示例**:
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
// ❌ 致命错误:NAPI 引用未释放
|
|
224
|
-
export class MyPlugin {
|
|
225
|
-
private napiRef: napi_ref | null = null;
|
|
226
|
-
|
|
227
|
-
constructor() {
|
|
228
|
-
napi_create_reference(env, value, 1, &this.napiRef); // 创建引用
|
|
229
|
-
// 缺少释放逻辑!
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// 没有 onDestroy 或 dispose 方法释放 napi_ref
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// ✅ 正确实现
|
|
236
|
-
export class MyPlugin {
|
|
237
|
-
private napiRef: napi_ref | null = null;
|
|
238
|
-
|
|
239
|
-
constructor() {
|
|
240
|
-
napi_create_reference(env, value, 1, &this.napiRef);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
onDestroy(): void {
|
|
244
|
-
if (this.napiRef !== null) {
|
|
245
|
-
napi_delete_reference(env, this.napiRef); // 必须释放
|
|
246
|
-
this.napiRef = null;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
#### 2.2 异常处理完整性(严苛项,25分)
|
|
253
|
-
|
|
254
|
-
ArkTS 异常处理必须覆盖所有可能失败的调用路径。
|
|
255
|
-
|
|
256
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
257
|
-
|--------|----------|----------|
|
|
258
|
-
| API 调用异常 | 所有 @ohos 模块 API 调用是否有 try-catch | **关键路径无异常处理扣 10 分** |
|
|
259
|
-
| 参数验证 | 方法入口是否验证参数类型和边界 | 缺失扣 5 分 |
|
|
260
|
-
| 空值防护 | 是否处理 null/undefined 情况 | 缺失扣 5 分 |
|
|
261
|
-
| 异步异常 | Promise 链是否有 `.catch()` 或 try-catch | 缺失扣 8 分 |
|
|
262
|
-
| 异常传播 | Native 异常是否正确传播到 Flutter 层 | 不传播扣 7 分 |
|
|
263
|
-
|
|
264
|
-
**关键路径定义**:
|
|
265
|
-
- Flutter MethodChannel 调用的处理函数
|
|
266
|
-
- Native 返回结果到 Flutter 的回调函数
|
|
267
|
-
- 涉及系统资源(文件、网络、数据库)的操作
|
|
268
|
-
|
|
269
|
-
**代码示例**:
|
|
270
|
-
|
|
271
|
-
```typescript
|
|
272
|
-
// ❌ 严重缺陷:关键路径无异常处理
|
|
273
|
-
export class BluetoothPlugin {
|
|
274
|
-
async connect(deviceId: string): Promise<void> {
|
|
275
|
-
// 直接调用 @ohos.bluetooth API,无异常捕获
|
|
276
|
-
await bluetooth.connect(deviceId); // 可能抛出 PermissionError、DeviceNotFoundError
|
|
277
|
-
return; // 异常未传播到 Flutter 层
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// ✅ 正确实现
|
|
282
|
-
export class BluetoothPlugin {
|
|
283
|
-
async connect(deviceId: string): Promise<void> {
|
|
284
|
-
try {
|
|
285
|
-
if (!deviceId || deviceId.length === 0) {
|
|
286
|
-
throw new Error('Invalid deviceId'); // 参数验证
|
|
287
|
-
}
|
|
288
|
-
await bluetooth.connect(deviceId);
|
|
289
|
-
} catch (e) {
|
|
290
|
-
// 异常传播到 Flutter 层
|
|
291
|
-
throw new Error(`Bluetooth connect failed: ${e.message}`);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
#### 2.3 资源释放与生命周期绑定(严苛项,20分)
|
|
298
|
-
|
|
299
|
-
鸿蒙 Ability 生命周期与资源释放必须严格绑定。
|
|
300
|
-
|
|
301
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
302
|
-
|--------|----------|----------|
|
|
303
|
-
| Ability 生命周期 | 是否在 `onDestroy` 释放所有资源 | **未绑定扣 15 分** |
|
|
304
|
-
| StreamController 关闭 | 是否在销毁时关闭所有 Stream | 未关闭扣 10 分 |
|
|
305
|
-
| Timer 取消 | 是否取消所有未完成的 Timer | 未取消扣 5 分 |
|
|
306
|
-
| 事件订阅取消 | 是否取消所有 `@ohos` 事件订阅 | **未取消扣 12 分** |
|
|
307
|
-
| 监听器注销 | 是否注销所有注册的监听器 | 未注销扣 8 分 |
|
|
308
|
-
|
|
309
|
-
**关键事件订阅检查**:
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
// ❌ 致命:事件订阅未取消
|
|
313
|
-
export class LocationPlugin {
|
|
314
|
-
private locationCallback: (result: Location) => void;
|
|
315
|
-
|
|
316
|
-
startListening(): void {
|
|
317
|
-
geoLocationManager.on('locationChange', this.locationCallback);
|
|
318
|
-
// 缺少 off 调用!
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
onDestroy(): void {
|
|
322
|
-
// 没有 geoLocationManager.off() 调用
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// ✅ 正确实现
|
|
327
|
-
export class LocationPlugin {
|
|
328
|
-
private locationCallback: (result: Location) => void;
|
|
329
|
-
private isListening: boolean = false;
|
|
330
|
-
|
|
331
|
-
startListening(): void {
|
|
332
|
-
geoLocationManager.on('locationChange', this.locationCallback);
|
|
333
|
-
this.isListening = true;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
stopListening(): void {
|
|
337
|
-
if (this.isListening) {
|
|
338
|
-
geoLocationManager.off('locationChange', this.locationCallback);
|
|
339
|
-
this.isListening = false;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
onDestroy(): void {
|
|
344
|
-
this.stopListening(); // 必须取消订阅
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
#### 2.4 并发安全与状态管理(严苛项,15分)
|
|
350
|
-
|
|
351
|
-
鸿蒙主线程与 Worker 线程的并发安全。
|
|
352
|
-
|
|
353
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
354
|
-
|--------|----------|----------|
|
|
355
|
-
| 全局状态保护 | 共享状态是否有锁机制或原子操作 | 无保护扣 10 分 |
|
|
356
|
-
| 线程安全 | Worker 线程访问主线程资源是否安全 | 不安全扣 8 分 |
|
|
357
|
-
| 状态一致性 | 多实例场景状态是否正确隔离 | 不隔离扣 7 分 |
|
|
358
|
-
| 初始化顺序 | 是否确保初始化完成后再使用 | 未确保扣 5 分 |
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
### Phase 3:C++ Native 层稳定性分析(仅鸿蒙化新增 C++ 代码)
|
|
363
|
-
|
|
364
|
-
> ⚠️ **评分范围**:Phase 3 仅分析**鸿蒙化新增的 NAPI C++ 代码**(Phase 1.5 分类结果中标记为"纳入评分"的 napi_*.cpp 等文件)。原库 C++ 代码(即使为 OHOS 编译)不纳入评分,列入"上游风险提示"。
|
|
365
|
-
|
|
366
|
-
#### 3.0 架构适配判定
|
|
367
|
-
|
|
368
|
-
根据 Phase 1.5 架构类型判定结果:
|
|
369
|
-
|
|
370
|
-
| 架构类型 | Phase 3 处理 | 评分 |
|
|
371
|
-
|----------|-------------|------|
|
|
372
|
-
| NAPI 架构 + 鸿蒙化新增 NAPI 文件 | 正常分析 Phase 3.1-3.3 | 正常评分 |
|
|
373
|
-
| 原库含 NAPI + 鸿蒙化无新增 NAPI | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
374
|
-
| FFI 架构(无 napi_* 调用) | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
375
|
-
| 编译适配型(仅 CMakeLists.ohos.txt) | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
376
|
-
|
|
377
|
-
#### 3.1 NAPI Handle 管理(致命项,20分)
|
|
378
|
-
|
|
379
|
-
> 仅适用于 NAPI 架构且鸿蒙化新增了 NAPI C++ 文件的项目。
|
|
380
|
-
|
|
381
|
-
NAPI handle 是 Native 层的核心资源。
|
|
382
|
-
|
|
383
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
384
|
-
|--------|----------|----------|
|
|
385
|
-
| Handle Scope | 是否在函数结束时清理 `napi_handle_scope` | **未清理扣 15 分** |
|
|
386
|
-
| Handle 有效性 | 是否在异步操作中保持 handle 有效 | 失效扣 10 分 |
|
|
387
|
-
| 引用释放 | `napi_ref` 是否在析构时释放 | **未释放扣 20 分** |
|
|
388
|
-
| 异常传播 | Native 异常是否转换为 ArkTS 异常 | 不转换扣 8 分 |
|
|
389
|
-
|
|
390
|
-
**C++ 代码示例**:
|
|
391
|
-
|
|
392
|
-
```cpp
|
|
393
|
-
// ❌ 致命:Handle Scope 未清理
|
|
394
|
-
static napi_value GetDeviceInfo(napi_env env, napi_callback_info info) {
|
|
395
|
-
napi_handle_scope scope;
|
|
396
|
-
napi_open_handle_scope(env, &scope);
|
|
397
|
-
|
|
398
|
-
// ... 业务逻辑 ...
|
|
399
|
-
|
|
400
|
-
// 缺少 napi_close_handle_scope!
|
|
401
|
-
return result;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// ✅ 正确实现
|
|
405
|
-
static napi_value GetDeviceInfo(napi_env env, napi_callback_info info) {
|
|
406
|
-
napi_handle_scope scope;
|
|
407
|
-
napi_open_handle_scope(env, &scope);
|
|
408
|
-
|
|
409
|
-
napi_value result;
|
|
410
|
-
// ... 业务逻辑 ...
|
|
411
|
-
|
|
412
|
-
napi_close_handle_scope(env, scope); // 必须清理
|
|
413
|
-
return result;
|
|
414
|
-
}
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
#### 3.2 内存管理(严苛项,15分)
|
|
418
|
-
|
|
419
|
-
Native 层内存管理必须防止泄漏和双重释放。
|
|
420
|
-
|
|
421
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
422
|
-
|--------|----------|----------|
|
|
423
|
-
| 内存分配释放 | malloc/new 是否有对应的 free/delete | **不匹配扣 15 分** |
|
|
424
|
-
| 异常路径释放 | 异常发生时是否释放已分配内存 | 未释放扣 12 分 |
|
|
425
|
-
| 智能指针使用 | 是否使用 RAII 管理资源 | 未使用扣 8 分 |
|
|
426
|
-
| Buffer 管理 | ArrayBuffer 是否正确传递所有权 | 错误传递扣 10 分 |
|
|
427
|
-
|
|
428
|
-
#### 3.3 跨语言调用安全(严苛项,10分)
|
|
429
|
-
|
|
430
|
-
Native 到 ArkTS 的调用安全。
|
|
431
|
-
|
|
432
|
-
| 检查项 | 问题描述 | 扣分规则 |
|
|
433
|
-
|--------|----------|----------|
|
|
434
|
-
| 回调有效性 | ArkTS 回调函数是否在调用前验证 | 未验证扣 7 分 |
|
|
435
|
-
| 参数类型转换 | Native 类型转换为 ArkTS 类型是否安全 | 不安全扣 8 分 |
|
|
436
|
-
| 环境有效性 | napi_env 在异步调用中是否有效 | 失效扣 10 分 |
|
|
437
|
-
| 错误传播 | Native 错误是否传播到 ArkTS 层 | 不传播扣 6 分 |
|
|
438
|
-
|
|
439
|
-
---
|
|
440
|
-
|
|
441
|
-
### Phase 4:调用链完整性分析
|
|
442
|
-
|
|
443
|
-
#### 4.1 跨层级调用链追踪
|
|
444
|
-
|
|
445
|
-
追踪关键功能的完整调用链,检查异常传播路径:
|
|
446
|
-
|
|
447
|
-
```
|
|
448
|
-
调用链结构:
|
|
449
|
-
Flutter (Dart) 鸿蒙 (ArkTS/ETS) Native (C++)
|
|
450
|
-
│ │ │
|
|
451
|
-
├─ MethodChannel.call() │ │
|
|
452
|
-
│ └─ "methodName" │ │
|
|
453
|
-
│ │ │
|
|
454
|
-
├─ Plugin.handleMethodCall() │
|
|
455
|
-
│ ├─ try-catch ✅ │
|
|
456
|
-
│ └─ invokeNative() │
|
|
457
|
-
│ │
|
|
458
|
-
│ ├─ NativeImpl::execute()
|
|
459
|
-
│ │ ├─ napi_handle_scope ✅
|
|
460
|
-
│ │ └─ return result
|
|
461
|
-
│ │
|
|
462
|
-
├─ callback(result) │
|
|
463
|
-
│ ├─ 异常检查 ✅ │
|
|
464
|
-
│ └─ return to Flutter │
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
#### 4.2 异常传播链检查
|
|
468
|
-
|
|
469
|
-
| 检查层级 | 检查项 | 扣分规则 |
|
|
470
|
-
|----------|--------|----------|
|
|
471
|
-
| Native → ArkTS | C++ 异常是否转换为 napi_throw | 不转换扣 10 分 |
|
|
472
|
-
| ArkTS → Flutter | ArkTS 异常是否转换为 PlatformException | 不转换扣 10 分 |
|
|
473
|
-
| 完整链路 | 异常是否能从底层传播到顶层 | **断裂扣 15 分** |
|
|
474
|
-
|
|
475
|
-
---
|
|
476
|
-
|
|
477
|
-
### Phase 5:生成报告
|
|
478
|
-
|
|
479
|
-
输出文件:
|
|
480
|
-
- `{outputDir}/稳定性检视报告.md` — 详细检视报告,含严苛评分
|
|
481
|
-
|
|
482
|
-
> ⚠️ **输出文件自检**:写入结果文件前,先确认 `{outputDir}/稳定性检视报告.md` 已存在且内容完整(**独立文件,禁止只写入 result 执行结果文件**)。
|
|
483
|
-
|
|
484
|
-
#### 严苛评分计算规则
|
|
485
|
-
|
|
486
|
-
采用**严苛扣分制**,从 100 分开始扣减:
|
|
487
|
-
|
|
488
|
-
```
|
|
489
|
-
初始分数:100 分
|
|
490
|
-
|
|
491
|
-
⚠️ 核心规则:仅对鸿蒙化新增代码扣分!原库上游代码问题列入"上游风险提示"但不纳入评分。
|
|
492
|
-
|
|
493
|
-
扣分类型:
|
|
494
|
-
├── 致命问题:-20 分(最多扣 60 分,超过直接评 0 分)
|
|
495
|
-
│ ├── NAPI 引用未释放(仅鸿蒙化新增 NAPI 代码)
|
|
496
|
-
│ ├── Handle Scope 未清理(仅鸿蒙化新增 NAPI 代码)
|
|
497
|
-
│ ├── 关键路径无异常处理(仅鸿蒙化 ArkTS 代码)
|
|
498
|
-
│ ├── 事件订阅未取消(仅鸿蒙化 ArkTS 代码)
|
|
499
|
-
│ └── 异常传播链断裂(仅鸿蒙化代码层面的断裂)
|
|
500
|
-
├── 严重问题:-15 分
|
|
501
|
-
│ ├── 资源释放不完整(仅鸿蒙化代码)
|
|
502
|
-
│ ├── 全局状态无保护(仅鸿蒙化代码)
|
|
503
|
-
│ ├── 内存分配释放不匹配(仅鸿蒙化新增 C++ 代码)
|
|
504
|
-
├── 中等问题:-10 分
|
|
505
|
-
│ ├── 部分异常处理缺失(仅鸿蒙化代码)
|
|
506
|
-
│ ├── 参数验证不完整(仅鸿蒙化代码)
|
|
507
|
-
│ ├── 回调有效性未验证(仅鸿蒙化新增 C++ 代码)
|
|
508
|
-
├── 轻微问题:-5 分
|
|
509
|
-
│ ├── 代码风格不规范(仅鸿蒙化代码)
|
|
510
|
-
│ ├── 注释不完整(仅鸿蒙化代码)
|
|
511
|
-
│ ├── 日志记录缺失(仅鸿蒙化代码)
|
|
512
|
-
|
|
513
|
-
原库上游问题处理(不扣分):
|
|
514
|
-
├── 原库 C++ Release 模式安全检查缺失 → 列入"上游风险提示",不扣分
|
|
515
|
-
├── 原库 C++ 裸指针/FIXME → 列入"上游风险提示",不扣分
|
|
516
|
-
├── 原库 C++ 线程安全缺陷 → 列入"上游风险提示",不扣分
|
|
517
|
-
├── Dart FFI force unwrap → 列入"上游风险提示",不扣分
|
|
518
|
-
├── 其他原库代码质量问题 → 列入"上游风险提示",不扣分
|
|
519
|
-
|
|
520
|
-
架构适配规则:
|
|
521
|
-
├── 无 NAPI 架构(使用 dart:ffi / MethodChannel) → Phase 3 全部标记 N/A(通过),不扣分
|
|
522
|
-
├── 原库含 NAPI 但鸿蒙化未新增 NAPI → Phase 3 全部标记 N/A(通过),不扣分
|
|
523
|
-
├── 仅编译适配型(无新增 C++ 源码) → Phase 3 全部标记 N/A(通过),不扣分
|
|
524
|
-
|
|
525
|
-
特殊规则:
|
|
526
|
-
├── 不存在 ohos 目录 → 0 分
|
|
527
|
-
├── ohos 目录无代码文件 → 0 分
|
|
528
|
-
├── 致命问题 ≥ 3 个(仅鸿蒙化代码) → 0 分
|
|
529
|
-
├── 致命问题 ≥ 2 个 + 严重问题 ≥ 2 个(仅鸿蒙化代码) → 0 分
|
|
530
|
-
|
|
531
|
-
最低分数:0 分
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
---
|
|
535
|
-
|
|
536
|
-
## 输出格式规范
|
|
537
|
-
|
|
538
|
-
报告必须严格遵循以下格式,确保 `_parseFlutterLibraryScore` 函数能正确解析:
|
|
539
|
-
|
|
540
|
-
```markdown
|
|
541
|
-
# ${repoName} 稳定性检视报告
|
|
542
|
-
|
|
543
|
-
## 📊 稳定性评分
|
|
544
|
-
|
|
545
|
-
**综合评分:78/100**
|
|
546
|
-
|
|
547
|
-
> 评分说明:采用严苛扣分制,从 100 分开始扣减,最低 0 分。**仅对鸿蒙化新增代码扣分**,原库上游问题列入"上游风险提示"但不纳入评分。
|
|
548
|
-
|
|
549
|
-
| 维度 | 检查项数 | 通过数 | 失败数 | 扣分 | 得分 |
|
|
550
|
-
|------|----------|--------|--------|------|------|
|
|
551
|
-
| NAPI引用管理 | 4 | 3 | 1 | -20 | 20/20 |
|
|
552
|
-
| 异常处理 | 5 | 3 | 2 | -15 | 10/25 |
|
|
553
|
-
| 资源释放 | 5 | 4 | 1 | -12 | 8/20 |
|
|
554
|
-
| 并发安全 | 4 | 3 | 1 | -5 | 10/15 |
|
|
555
|
-
| Native Handle | 4 | 2 | 2 | -20 | 0/20 |
|
|
556
|
-
| 内存管理 | 4 | 3 | 1 | -8 | 7/15 |
|
|
557
|
-
| 调用链完整性 | 3 | 2 | 1 | -10 | 0/10 |
|
|
558
|
-
|
|
559
|
-
**扣分明细**:
|
|
560
|
-
- NAPI 引用未释放(致命):-20 分
|
|
561
|
-
- Handle Scope 未清理(致命):-20 分
|
|
562
|
-
- 部分异常处理缺失(中等):-10 分
|
|
563
|
-
- 参数验证不完整(中等):-10 分
|
|
564
|
-
- 事件订阅未取消(严重):-15 分
|
|
565
|
-
|
|
566
|
-
---
|
|
567
|
-
|
|
568
|
-
## 🔍 检视范围
|
|
569
|
-
|
|
570
|
-
### 鸿蒙代码定位结果
|
|
571
|
-
|
|
572
|
-
**扫描策略**:通过文件类型 + API 特征 + 配置文件智能识别,而非依赖固定目录名
|
|
573
|
-
|
|
574
|
-
| 扫描维度 | 发现文件数 | 检视状态 |
|
|
575
|
-
|----------|------------|----------|
|
|
576
|
-
| `.ets` 文件 | 12 | ✅ 已检视(核心) |
|
|
577
|
-
| `module.json5` | 1 | ✅ 已检视 |
|
|
578
|
-
| NAPI C++ 文件 | 8 | ✅ 已检视 |
|
|
579
|
-
| `@ohos` API 导入 | 5 处 | ✅ 已检视 |
|
|
580
|
-
| 非鸿蒙目录(android/ios/lib) | - | ⚠️ 不检视 |
|
|
581
|
-
|
|
582
|
-
### 代码来源分类
|
|
583
|
-
|
|
584
|
-
**关键区分**:通过 Copyright 声明识别代码来源,仅对鸿蒙化新增代码评分:
|
|
585
|
-
|
|
586
|
-
| 代码类别 | Copyright | 文件范围 | 检视状态 |
|
|
587
|
-
|----------|-----------|----------|----------|
|
|
588
|
-
| **鸿蒙化新增代码** | "Huawei Device Co., Ltd." / "OpenHarmony" | `.ets` Plugin 文件、module.json5 等 | ✅ **纳入评分** |
|
|
589
|
-
| **原库上游代码** | 原项目作者(不含华为/OpenHarmony) | bridge/*.cpp、foundation/*.cc 等 | ⚠️ **不纳入评分**,列入上游风险提示 |
|
|
590
|
-
| **Flutter Dart 层** | 原库代码 | kraken/lib/*.dart 等 | ❌ 不检视 |
|
|
591
|
-
|
|
592
|
-
**实际检视文件列表(鸿蒙化代码)**:
|
|
593
|
-
- `{sourceDir}/xxx/plugin.ets` ✅ 鸿蒙化新增
|
|
594
|
-
- `{sourceDir}/yyy/entry.ets` ✅ 鸿蒙化新增
|
|
595
|
-
- `{sourceDir}/zzz/napi_binding.cpp` ✅ 鸿蒙化新增 NAPI(仅 NAPI 架构项目)
|
|
596
|
-
|
|
597
|
-
**上游风险提示文件(原库代码,不纳入评分)**:
|
|
598
|
-
- `{sourceDir}/bridge/kraken_bridge.cc` ⚠️ 原库 C++ 桥接
|
|
599
|
-
|
|
600
|
-
---
|
|
601
|
-
|
|
602
|
-
## ⚠️ 上游风险提示(原库代码,不纳入评分)
|
|
603
|
-
|
|
604
|
-
> 以下问题存在于原库代码中,鸿蒙化开发者未修改这些源码。问题属上游继承,此处仅作为风险提示列出,**不纳入综合评分**。
|
|
605
|
-
|
|
606
|
-
| 风险 | 文件位置 | 说明 | 建议优先级 |
|
|
607
|
-
|------|----------|------|------------|
|
|
608
|
-
| C++ Release 模式 nullptr 崩溃 | `bridge/kraken_bridge.cc:150` | ... | P0(建议本地 patch) |
|
|
609
|
-
| C++ 线程安全缺陷 | `bridge/dart_methods.cc:16` | ... | P2 |
|
|
610
|
-
|
|
611
|
-
---
|
|
612
|
-
|
|
613
|
-
## 🔍 详细检视结果
|
|
614
|
-
|
|
615
|
-
### 1. NAPI 引用管理分析
|
|
616
|
-
|
|
617
|
-
> 若项目使用 dart:ffi + MethodChannel 架构,此维度标记为 N/A(全部通过),不扣分。
|
|
618
|
-
|
|
619
|
-
#### 1.1 致命问题
|
|
620
|
-
|
|
621
|
-
| 问题 | 文件位置 | 代码片段 | 扣分 |
|
|
622
|
-
|------|----------|----------|------|
|
|
623
|
-
| NAPI 引用未释放 | `{鸿蒙化新增的ets/cpp文件路径}:45` | `napi_create_reference(env, value, 1, &ref)` 缺少释放 | -20 |
|
|
624
|
-
|
|
625
|
-
**问题描述**:在 `MyPlugin` 类中创建了 `napi_ref`,但 `onDestroy` 方法中未调用 `napi_delete_reference`,会导致内存泄漏。
|
|
626
|
-
|
|
627
|
-
**修复建议**:
|
|
628
|
-
```typescript
|
|
629
|
-
// 在 onDestroy 中添加:
|
|
630
|
-
if (this.napiRef !== null) {
|
|
631
|
-
napi_delete_reference(env, this.napiRef);
|
|
632
|
-
this.napiRef = null;
|
|
633
|
-
}
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
---
|
|
637
|
-
|
|
638
|
-
### 2. 异常处理分析
|
|
639
|
-
|
|
640
|
-
#### 2.1 中等问题
|
|
641
|
-
|
|
642
|
-
| 问题 | 文件位置 | 影响范围 | 扣分 |
|
|
643
|
-
|------|----------|----------|------|
|
|
644
|
-
| 关键路径无异常处理 | `{鸿蒙化新增ets文件路径}:23` | connect 方法直接调用 API | -10 |
|
|
645
|
-
|
|
646
|
-
---
|
|
647
|
-
|
|
648
|
-
### 3. 资源释放分析
|
|
649
|
-
|
|
650
|
-
...
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
### 4. Native 层分析
|
|
655
|
-
|
|
656
|
-
> 若项目使用 dart:ffi + MethodChannel 架构或原库含 NAPI 但鸿蒙化未新增 NAPI,此维度标记为 N/A(全部通过),不扣分。
|
|
657
|
-
|
|
658
|
-
...
|
|
659
|
-
|
|
660
|
-
---
|
|
661
|
-
|
|
662
|
-
### 5. 调用链完整性分析
|
|
663
|
-
|
|
664
|
-
**关键功能调用链**:`connect(deviceId)`(仅追踪鸿蒙化代码层面的调用链)
|
|
665
|
-
|
|
666
|
-
```
|
|
667
|
-
Flutter → MethodChannel → ArkTS → Native → 回调
|
|
668
|
-
✅ 有异常处理 ❌ 无异常检查 ❌ Handle 未清理
|
|
669
|
-
```
|
|
670
|
-
|
|
671
|
-
**异常传播断裂点**:鸿蒙化代码层面的异常传播断裂点标注(原库代码层面的问题列为上游风险提示)。
|
|
672
|
-
|
|
673
|
-
---
|
|
674
|
-
|
|
675
|
-
## 💡 改进建议
|
|
676
|
-
|
|
677
|
-
### 优先级 P0(致命问题,必须修复)
|
|
678
|
-
|
|
679
|
-
1. **NAPI 引用释放**:在所有 Plugin 的 onDestroy 方法中添加 napi_delete_reference 调用
|
|
680
|
-
2. **Handle Scope 清理**:在所有 Native 函数结尾添加 napi_close_handle_scope
|
|
681
|
-
3. **关键路径异常处理**:所有 MethodChannel 处理函数必须包裹 try-catch
|
|
682
|
-
|
|
683
|
-
### 优先级 P1(严重问题,强烈建议修复)
|
|
684
|
-
|
|
685
|
-
...
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
**检视时间**:${new Date().toLocaleString('zh-CN')}
|
|
690
|
-
```
|
|
691
|
-
|
|
692
|
-
---
|
|
693
|
-
|
|
694
|
-
## 检视清单
|
|
695
|
-
|
|
696
|
-
详细检查项参见 [references/CHECKLIST.md](references/CHECKLIST.md)
|
|
697
|
-
|
|
698
|
-
---
|
|
699
|
-
|
|
700
|
-
## 输出要求
|
|
701
|
-
|
|
702
|
-
1. **评分格式**:必须包含 `**综合评分:XX/100**`(粗体标记,中文冒号),确保 `_parseFlutterLibraryScore` 能解析
|
|
703
|
-
2. **评分范围**:0-100 整数,严苛扣分制。**仅对鸿蒙化新增代码扣分**
|
|
704
|
-
3. **代码来源分类**:必须包含"代码来源分类"章节,区分鸿蒙化新增 vs 原库上游代码
|
|
705
|
-
4. **上游风险提示**:必须包含"上游风险提示"章节,列出原库代码问题但不纳入评分
|
|
706
|
-
5. **检视范围**:通过智能扫描 + 代码来源识别鸿蒙化代码,明确标注检视文件路径、代码来源和非检视范围
|
|
707
|
-
6. **扣分明细**:必须列出每个扣分项的具体原因和修复建议,**标注问题所属代码来源**
|
|
708
|
-
7. **架构适配**:若项目不使用 NAPI(使用 dart:ffi / MethodChannel),必须在报告中明确标注 Phase 3 为 N/A
|
|
709
|
-
8. **调用链分析**:必须包含至少 3 个关键功能的调用链图
|
|
710
|
-
9. **修复建议**:按优先级(P0/P1/P2)分类,包含示例代码
|
|
711
|
-
10. **语言**:使用中文撰写报告内容
|
|
712
|
-
|
|
713
|
-
### 结构化指标输出(必须执行)
|
|
714
|
-
|
|
715
|
-
执行环境会在任务 prompt 中下发一个**结构化指标文件输出路径**(`stepId{X}_loop{L}_meta_{N}.json`)。
|
|
716
|
-
检视完成后,**必须**将最终评分以下述 JSON 对象写入该路径:
|
|
717
|
-
|
|
718
|
-
```json
|
|
719
|
-
{
|
|
720
|
-
"stabilityScore": 85,
|
|
721
|
-
"scoreReason": "异常处理缺失2处-16等(一句话判定依据,≤50字;触发一票否决时必须注明)"
|
|
722
|
-
}
|
|
723
|
-
```
|
|
724
|
-
|
|
725
|
-
| 字段 | 类型 | 说明 |
|
|
726
|
-
|------|------|------|
|
|
727
|
-
| `stabilityScore` | number | 稳定性评分(0-100 整数,与报告中 `**综合评分:XX/100**` 的数值一致) |
|
|
728
|
-
| `scoreReason` | string | 评分判定依据摘要(可选,前端悬浮提示展示;0 分时强烈建议写明触发规则) |
|
|
729
|
-
|
|
730
|
-
**说明**:该文件由执行框架自动收割入库(前端/历史列表直接读取评分,无需解析报告文本)。若 prompt 未下发该路径则跳过本节。
|
|
731
|
-
|
|
732
|
-
---
|
|
733
|
-
|
|
734
|
-
## 特殊情况处理
|
|
735
|
-
|
|
736
|
-
| 情况 | 处理方式 | 评分 |
|
|
737
|
-
|------|----------|------|
|
|
738
|
-
| 未发现 `.ets` 文件和鸿蒙 API 特征 | 报告标注"未发现鸿蒙化实现代码" | 0 分 |
|
|
739
|
-
| 仅发现目录名含 `ohos` 但无代码文件 | 报告标注"鸿蒙化代码疑似缺失" | 0-30 分 |
|
|
740
|
-
| 发现鸿蒙代码文件但解析失败 | 报告标注"鸿蒙代码解析失败"并说明原因 | 0 分 |
|
|
741
|
-
| 致命问题 ≥ 3 个(仅鸿蒙化代码) | 报告标注"存在严重稳定性风险,建议重构" | 0 分 |
|
|
742
|
-
| 扫描到 `.ets` 文件但不在 `ohos/` 目录 | 正常检视,报告标注实际路径 | 正常评分 |
|
|
743
|
-
| 项目不使用 NAPI(使用 dart:ffi / MethodChannel) | Phase 3 标记 N/A(全部通过),评分以 ArkTS 层为主 | 正常评分 |
|
|
744
|
-
| 发现 C++ NAPI 代码但为原库上游代码 | 不纳入评分,列入"上游风险提示" | Phase 3 不扣分 |
|
|
1
|
+
---
|
|
2
|
+
name: flutter-library-stability-check
|
|
3
|
+
description: 对 Flutter 三方库的鸿蒙化代码进行稳定性检视,聚焦鸿蒙化新增的 ArkTS/ETS 代码,分析异常处理、资源释放、并发安全、调用链完整性等稳定性维度,生成严苛评分报告(0-100分)。仅对鸿蒙化新增代码评分,原库上游问题列入风险提示但不纳入评分。作为 Flutter 仓库检视流程的第二阶段,依赖 library-interface-analyzer 的输出。
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
compatibility: 需要访问 Git 仓库、分析 ohos 目录源码、识别代码来源(Copyright/git blame)
|
|
6
|
+
metadata:
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# FlutterLibraryStabilityCheckSkill
|
|
11
|
+
|
|
12
|
+
对 Flutter 三方库的**鸿蒙化实现代码**进行稳定性检视,评估库在异常情况下的处理能力、资源管理安全性、跨语言调用可靠性等关键稳定性指标。
|
|
13
|
+
|
|
14
|
+
> ⚠️ **核心定位**:本 SKILL **仅对鸿蒙化新增代码评分**,原库上游代码问题列入"上游风险提示"但不纳入评分。检视范围通过**智能扫描 + 代码来源识别**双重判定。
|
|
15
|
+
>
|
|
16
|
+
> **代码来源识别维度**:
|
|
17
|
+
> - **Copyright 声明**:`"Huawei Device Co., Ltd."` / `"OpenHarmony"` → 鸿蒙化新增;`"The Kraken authors"` / 其他 → 原库上游
|
|
18
|
+
> - **文件类型特征**:`.ets`(ArkTS/ETS)、`module.json5`(鸿蒙模块配置)
|
|
19
|
+
> - **API 调用特征**:`@ohos.*`、`napi_*`、`import from '@ohios'`、`geoLocationManager` 等
|
|
20
|
+
> - **平台标识特征**:目录名包含 `ohos`、`harmony`、`openharmony` 等
|
|
21
|
+
> - **配置文件特征**:`oh-package.json5`、`build-profile.json5`
|
|
22
|
+
>
|
|
23
|
+
> ⚠️ **架构适配**:部分 Flutter 三方库使用 **dart:ffi + MethodChannel** 而非 NAPI 桥接。此类项目中:
|
|
24
|
+
> - Phase 3(NAPI 层分析)标记为 N/A,不扣分
|
|
25
|
+
> - 评分以 ArkTS/ETS 鸿蒙化代码质量为主
|
|
26
|
+
> - C++ 原库代码(即使为 OHOS 编译)列为上游风险提示
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 任务参数
|
|
31
|
+
|
|
32
|
+
| 参数 | 必需 | 说明 |
|
|
33
|
+
|------|------|------|
|
|
34
|
+
| `repoUrl` | ✅ | Git 仓库地址,支持分支参数 `?branch=xxx` |
|
|
35
|
+
| `outputDir` | ✅ | 输出目录绝对路径,存放检视报告 |
|
|
36
|
+
| `interfaceDocPath` | ✅ | 接口规格说明文档路径(由 library-interface-analyzer 生成) |
|
|
37
|
+
| `repoName` | ✅ | 仓库名称(用于报告标识) |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 输入依赖
|
|
42
|
+
|
|
43
|
+
本 SKILL 是 Flutter 仓库检视流程的**第二阶段**,依赖:
|
|
44
|
+
|
|
45
|
+
- **前置 SKILL**: `library-interface-analyzer`
|
|
46
|
+
- **输入文件**: `接口规格说明.md`(位于 outputDir)
|
|
47
|
+
- **仓库源码**: 已克隆到 `{outputDir}/source/`,通过智能扫描定位鸿蒙化代码
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 工作流程
|
|
52
|
+
|
|
53
|
+
### Phase 1:鸿蒙代码智能定位与范围识别
|
|
54
|
+
|
|
55
|
+
**通过多维度特征扫描**,智能识别鸿蒙化代码,而非依赖固定目录名称。
|
|
56
|
+
|
|
57
|
+
#### 1.1 扫描策略(优先级递减)
|
|
58
|
+
|
|
59
|
+
| 扫描维度 | 特征模式 | 权重 | 说明 |
|
|
60
|
+
|----------|----------|------|------|
|
|
61
|
+
| **文件类型** | `*.ets` 文件 | ⭐⭐⭐ 高 | ArkTS/ETS 文件是鸿蒙化的最强特征 |
|
|
62
|
+
| **配置文件** | `module.json5`、`oh-package.json5` | ⭐⭐⭐ 高 | 鸿蒙特有的模块配置文件 |
|
|
63
|
+
| **API 调用** | `@ohos.*`、`napi_*`、`import from '@ohos'` | ⭐⭐ 中 | 鸿蒙 API 特征 |
|
|
64
|
+
| **目录标识** | 目录名包含 `ohos`、`harmony`、`openharmony` | ⭐ 低 | 辅助参考,可能使用其他名称 |
|
|
65
|
+
| **C++ NAPI** | `napi_create_reference`、`napi_value` 等 | ⭐⭐ 中 | Native 层鸿蒙绑定特征 |
|
|
66
|
+
|
|
67
|
+
#### 1.2 扫描执行流程
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Step 1: 扫描 ArkTS/ETS 文件(最高优先级)
|
|
71
|
+
find {sourceDir} -name "*.ets" -type f
|
|
72
|
+
|
|
73
|
+
# Step 2: 扫描鸿蒙配置文件
|
|
74
|
+
find {sourceDir} -name "module.json5" -o -name "oh-package.json5" -type f
|
|
75
|
+
|
|
76
|
+
# Step 3: 扫描 NAPI 相关 C++ 文件
|
|
77
|
+
grep -r "napi_" --include="*.cpp" --include="*.h" {sourceDir}
|
|
78
|
+
|
|
79
|
+
# Step 4: 扫描 @ohos API 导入
|
|
80
|
+
grep -r "import.*@ohos" --include="*.ets" --include="*.ts" {sourceDir}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### 1.3 代码定位结果分类
|
|
84
|
+
|
|
85
|
+
根据扫描结果,将代码分为以下类别:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
检视范围判定:
|
|
89
|
+
├── 鸿蒙核心代码(必检视)
|
|
90
|
+
│ ├── *.ets 文件 # ArkTS/ETS 实现 ✅ 检视
|
|
91
|
+
│ │ ├── plugin*.ets # Plugin 实现
|
|
92
|
+
│ │ ├── entry*.ets # Ability 入口
|
|
93
|
+
│ │ └── *.ets # 其他 ETS 文件
|
|
94
|
+
│ ├── module.json5 # 模块配置 ✅ 检视
|
|
95
|
+
│ ├── napi_*.cpp / *.cpp # Native NAPI 绑定 ✅ 检视
|
|
96
|
+
│ └── oh-package.json5 # 依赖配置 ⚠️ 辅助参考
|
|
97
|
+
├── 非鸿蒙代码(不检视)
|
|
98
|
+
│ ├── android/ # Android 实现 ❌ 不检视
|
|
99
|
+
│ ├── ios/ # iOS 实现 ❌ 不检视
|
|
100
|
+
│ ├── lib/ # Flutter Dart 层 ❌ 不检视
|
|
101
|
+
│ └── 未包含鸿蒙特征的代码 ❌ 不检视
|
|
102
|
+
├── 疑似鸿蒙代码(需验证)
|
|
103
|
+
│ ├── 目录名含 harmony/ohos 但无 .ets 文件 ⚠️ 进一步检查
|
|
104
|
+
│ └── 含部分 napi 调用但无完整结构 ⚠️ 进一步检查
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### 1.4 判定规则
|
|
108
|
+
|
|
109
|
+
| 扫描结果 | 判定 | 评分 | 后续操作 |
|
|
110
|
+
|----------|------|------|----------|
|
|
111
|
+
| 发现 `.ets` 文件 | ✅ 存在鸿蒙化 | 正常评分 | 进入 Phase 1.5 代码来源分类 |
|
|
112
|
+
| 发现 `module.json5` + NAPI 代码 | ✅ 存在鸿蒙化 | 正常评分 | 进入 Phase 1.5 代码来源分类 |
|
|
113
|
+
| 仅发现目录名含 `ohos` 但无代码文件 | ⚠️ 疑似未完成 | 0-30 分 | 报告标注"鸿蒙化代码疑似缺失" |
|
|
114
|
+
| 未发现任何鸿蒙特征 | ❌ 未实现鸿蒙化 | 0 分 | 报告标注"未发现鸿蒙化实现代码" |
|
|
115
|
+
| 无法访问源码目录 | ❌ 无法检视 | 0 分 | 报告标注"源码目录不可访问" |
|
|
116
|
+
|
|
117
|
+
**重要说明**:
|
|
118
|
+
- **不以固定目录名否定**:即使没有 `ohos/` 目录,只要发现 `.ets` 文件或鸿蒙 API 调用,即判定为存在鸿蒙化
|
|
119
|
+
- **不以目录名肯定**:仅有 `ohos/` 目录名但无实际代码文件,不认定为鸿蒙化完成
|
|
120
|
+
- **优先代码特征**:文件类型和 API 调用特征优先级高于目录名称
|
|
121
|
+
|
|
122
|
+
### Phase 1.5:代码来源分类(评分范围划定)
|
|
123
|
+
|
|
124
|
+
**关键步骤**:区分鸿蒙化新增代码与原库上游代码,确保评分仅针对鸿蒙化开发者的工作。
|
|
125
|
+
|
|
126
|
+
#### 1.5.1 分类策略
|
|
127
|
+
|
|
128
|
+
通过以下方法识别每个扫描发现的文件的代码来源:
|
|
129
|
+
|
|
130
|
+
| 识别方法 | 优先级 | 说明 |
|
|
131
|
+
|----------|--------|------|
|
|
132
|
+
| **Copyright 声明** | ⭐⭐⭐ 最高 | 检查文件头部 Copyright 声明,区分鸿蒙化新增 vs 原库上游 |
|
|
133
|
+
| **Git blame 历史** | ⭐⭐ 中 | 查看文件修改历史,鸿蒙化分支新增的文件为鸿蒙化代码 |
|
|
134
|
+
| **文件位置特征** | ⭐ 低辅助 | `ohos/` 目录下的 `.ets` 文件通常是鸿蒙化新增;`bridge/` 下的 C++ 通常为原库 |
|
|
135
|
+
|
|
136
|
+
#### 1.5.2 分类执行流程
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Step 1: 检查 Copyright 声明(最可靠)
|
|
140
|
+
# 鸿蒙化代码特征:Copyright 中包含 "Huawei Device Co., Ltd." 或 "OpenHarmony"
|
|
141
|
+
grep -r "Copyright.*Huawei Device" --include="*.ets" --include="*.ts" --include="*.cpp" --include="*.h" {sourceDir}
|
|
142
|
+
|
|
143
|
+
# Step 2: 检查原库代码 Copyright
|
|
144
|
+
# 原库代码特征:Copyright 中包含原始项目名(如 "The Kraken authors"),不含华为/OpenHarmony
|
|
145
|
+
grep -r "Copyright" --include="*.ets" --include="*.ts" --include="*.cpp" --include="*.h" {sourceDir}
|
|
146
|
+
|
|
147
|
+
# Step 3: 检查 git blame(辅助验证)
|
|
148
|
+
# 查看文件最近修改是否为鸿蒙化分支新增
|
|
149
|
+
git log --oneline -- {sourceDir}/ohos/
|
|
150
|
+
git log --oneline -- {sourceDir}/bridge/
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### 1.5.3 分类结果
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
代码来源分类:
|
|
157
|
+
├── 鸿蒙化新增代码(✅ 纳入评分)
|
|
158
|
+
│ ├── *.ets 文件(Copyright: Huawei/OpenHarmony) ✅ 评分
|
|
159
|
+
│ ├── module.json5 / oh-package.json5 ✅ 评分
|
|
160
|
+
│ ├── build_ohos.ps1 / CMakeLists.ohos.txt ✅ 评分
|
|
161
|
+
│ ├── napi_*.cpp(鸿蒙化新增的 NAPI 绑定) ✅ 评分
|
|
162
|
+
│ └── EntryAbility.ets / Index.ets ✅ 评分
|
|
163
|
+
├── 原库上游代码(⚠️ 不纳入评分,列入风险提示)
|
|
164
|
+
│ ├── bridge/*.cpp / *.h(原库 C++ 桥接) ⚠️ 风险提示
|
|
165
|
+
│ ├── foundation/*.cc / *.h(原库基础设施) ⚠️ 风险提示
|
|
166
|
+
│ ├── kraken/lib/*.dart(Flutter Dart 层) ⚠️ 风险提示
|
|
167
|
+
│ └── 其他原库代码(无华为/OpenHarmony Copyright) ⚠️ 风险提示
|
|
168
|
+
├── 需验证来源的代码
|
|
169
|
+
│ ├── 无 Copyright 声明的文件 ⚠️ 需通过 git blame 验证
|
|
170
|
+
│ └── Copyright 不明确的文件 ⚠️ 需进一步分析
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
#### 1.5.4 分类判定规则
|
|
174
|
+
|
|
175
|
+
| 分类条件 | 判定 | 评分影响 | 报告处理 |
|
|
176
|
+
|----------|------|----------|----------|
|
|
177
|
+
| Copyright 包含 "Huawei Device Co., Ltd." / "OpenHarmony" | 鸿蒙化新增 | ✅ 纳入评分 | 列入"检视范围" |
|
|
178
|
+
| Copyright 不含华为/OpenHarmony(含原项目名) | 原库上游 | ❌ 不纳入评分 | 列入"上游风险提示" |
|
|
179
|
+
| 无 Copyright 声明 + 在 `ohos/` 目录 + `.ets` 文件 | 推定为鸿蒙化 | ✅ 纳入评分 | 列入"检视范围",标注"推定" |
|
|
180
|
+
| 无 Copyright 声明 + 不在 `ohos/` 目录 + `.cpp` 文件 | 推定为原库 | ❌ 不纳入评分 | 列入"上游风险提示",标注"推定" |
|
|
181
|
+
| 无 Copyright + git blame 显示鸿蒙化分支新增 | 鸿蒙化新增 | ✅ 纳入评分 | 列入"检视范围" |
|
|
182
|
+
|
|
183
|
+
#### 1.5.5 架构类型判定
|
|
184
|
+
|
|
185
|
+
同时判定项目的 Native 桥接架构类型,影响后续分析范围:
|
|
186
|
+
|
|
187
|
+
| 架构特征 | 架构类型 | Phase 3 处理 | 评分调整 |
|
|
188
|
+
|----------|----------|-------------|----------|
|
|
189
|
+
| 发现 `napi_*` 调用在鸿蒙化新增 C++ 文件中 | NAPI 架构 | 正常分析 | Phase 3 正常评分 |
|
|
190
|
+
| 发现 `napi_*` 调用但仅在原库 C++ 文件中 | 原库含 NAPI + 鸿蒙化无新增 NAPI | Phase 3 N/A(原库 NAPI 不评分) | Phase 3 标记全部通过 |
|
|
191
|
+
| 无任何 `napi_*` 调用(使用 dart:ffi / MethodChannel) | FFI 架构 | Phase 3 N/A | Phase 3 标记全部通过 |
|
|
192
|
+
| 仅发现 CMakeLists.ohos.txt(编译配置) | 编译适配型 | Phase 3 N/A | Phase 3 标记全部通过 |
|
|
193
|
+
|
|
194
|
+
**关键原则**:
|
|
195
|
+
- **原库 C++ 代码即使为 OHOS 编译,也不纳入评分** — 鸿蒙化开发者仅添加编译配置,未修改源码
|
|
196
|
+
- **仅鸿蒙化新增的 NAPI C++ 文件纳入 Phase 3 评分**
|
|
197
|
+
- **dart:ffi / MethodChannel 架构项目中,Native 层稳定性由原库保证,不属于鸿蒙化检视范围**
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### Phase 2:ArkTS 层稳定性分析(仅鸿蒙化代码)
|
|
202
|
+
|
|
203
|
+
> ⚠️ **评分范围**:Phase 2 仅分析**鸿蒙化新增的 ArkTS/ETS 代码**(Phase 1.5 分类结果中标记为"纳入评分"的文件)。原库代码中的异常处理问题不扣分。
|
|
204
|
+
|
|
205
|
+
#### 2.1 NAPI 引用管理 / FFI 资源管理(致命项,20分)
|
|
206
|
+
|
|
207
|
+
NAPI 引用是鸿蒙 Native 层最核心的资源,错误管理会导致内存泄漏或崩溃。
|
|
208
|
+
|
|
209
|
+
> ⚠️ **架构适配**:若项目使用 **dart:ffi + MethodChannel** 而非 NAPI(Phase 1.5 判定),ArkTS 层无直接 NAPI/FFI 资源管理,此维度全部标记为通过(20/20),不扣分。
|
|
210
|
+
|
|
211
|
+
| 检查项 | 问题描述 | 扣分规则 | 适用条件 |
|
|
212
|
+
|--------|----------|----------|----------|
|
|
213
|
+
| `napi_ref` 创建 | 是否为需要长期持有的对象创建 `napi_ref` | 缺失扣 5 分 | 仅 NAPI 架构 |
|
|
214
|
+
| `napi_ref` 释放 | 是否在 dispose/destroy 时调用 `napi_delete_reference` | **未释放扣 20 分(致命)** | 仅 NAPI 架构 |
|
|
215
|
+
| 引用计数平衡 | `napi_create_reference` 和 `napi_delete_reference` 数量是否匹配 | 不平衡扣 15 分 | 仅 NAPI 架构 |
|
|
216
|
+
| 引用有效性检查 | 使用前是否检查 ref 是否有效 | 未检查扣 5 分 | 仅 NAPI 架构 |
|
|
217
|
+
| MethodChannel 引用清理 | 是否在 onDetachedFromEngine 清空所有引用 | 未清空扣 5 分 | 仅 FFI 架构 |
|
|
218
|
+
| 静态注册表清理 | 是否在 destroy 时从静态 Map/注册表删除 | 未删除扣 5 分 | 仅 FFI 架构 |
|
|
219
|
+
|
|
220
|
+
**代码示例**:
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// ❌ 致命错误:NAPI 引用未释放
|
|
224
|
+
export class MyPlugin {
|
|
225
|
+
private napiRef: napi_ref | null = null;
|
|
226
|
+
|
|
227
|
+
constructor() {
|
|
228
|
+
napi_create_reference(env, value, 1, &this.napiRef); // 创建引用
|
|
229
|
+
// 缺少释放逻辑!
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// 没有 onDestroy 或 dispose 方法释放 napi_ref
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ✅ 正确实现
|
|
236
|
+
export class MyPlugin {
|
|
237
|
+
private napiRef: napi_ref | null = null;
|
|
238
|
+
|
|
239
|
+
constructor() {
|
|
240
|
+
napi_create_reference(env, value, 1, &this.napiRef);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
onDestroy(): void {
|
|
244
|
+
if (this.napiRef !== null) {
|
|
245
|
+
napi_delete_reference(env, this.napiRef); // 必须释放
|
|
246
|
+
this.napiRef = null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### 2.2 异常处理完整性(严苛项,25分)
|
|
253
|
+
|
|
254
|
+
ArkTS 异常处理必须覆盖所有可能失败的调用路径。
|
|
255
|
+
|
|
256
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
257
|
+
|--------|----------|----------|
|
|
258
|
+
| API 调用异常 | 所有 @ohos 模块 API 调用是否有 try-catch | **关键路径无异常处理扣 10 分** |
|
|
259
|
+
| 参数验证 | 方法入口是否验证参数类型和边界 | 缺失扣 5 分 |
|
|
260
|
+
| 空值防护 | 是否处理 null/undefined 情况 | 缺失扣 5 分 |
|
|
261
|
+
| 异步异常 | Promise 链是否有 `.catch()` 或 try-catch | 缺失扣 8 分 |
|
|
262
|
+
| 异常传播 | Native 异常是否正确传播到 Flutter 层 | 不传播扣 7 分 |
|
|
263
|
+
|
|
264
|
+
**关键路径定义**:
|
|
265
|
+
- Flutter MethodChannel 调用的处理函数
|
|
266
|
+
- Native 返回结果到 Flutter 的回调函数
|
|
267
|
+
- 涉及系统资源(文件、网络、数据库)的操作
|
|
268
|
+
|
|
269
|
+
**代码示例**:
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// ❌ 严重缺陷:关键路径无异常处理
|
|
273
|
+
export class BluetoothPlugin {
|
|
274
|
+
async connect(deviceId: string): Promise<void> {
|
|
275
|
+
// 直接调用 @ohos.bluetooth API,无异常捕获
|
|
276
|
+
await bluetooth.connect(deviceId); // 可能抛出 PermissionError、DeviceNotFoundError
|
|
277
|
+
return; // 异常未传播到 Flutter 层
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// ✅ 正确实现
|
|
282
|
+
export class BluetoothPlugin {
|
|
283
|
+
async connect(deviceId: string): Promise<void> {
|
|
284
|
+
try {
|
|
285
|
+
if (!deviceId || deviceId.length === 0) {
|
|
286
|
+
throw new Error('Invalid deviceId'); // 参数验证
|
|
287
|
+
}
|
|
288
|
+
await bluetooth.connect(deviceId);
|
|
289
|
+
} catch (e) {
|
|
290
|
+
// 异常传播到 Flutter 层
|
|
291
|
+
throw new Error(`Bluetooth connect failed: ${e.message}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
#### 2.3 资源释放与生命周期绑定(严苛项,20分)
|
|
298
|
+
|
|
299
|
+
鸿蒙 Ability 生命周期与资源释放必须严格绑定。
|
|
300
|
+
|
|
301
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
302
|
+
|--------|----------|----------|
|
|
303
|
+
| Ability 生命周期 | 是否在 `onDestroy` 释放所有资源 | **未绑定扣 15 分** |
|
|
304
|
+
| StreamController 关闭 | 是否在销毁时关闭所有 Stream | 未关闭扣 10 分 |
|
|
305
|
+
| Timer 取消 | 是否取消所有未完成的 Timer | 未取消扣 5 分 |
|
|
306
|
+
| 事件订阅取消 | 是否取消所有 `@ohos` 事件订阅 | **未取消扣 12 分** |
|
|
307
|
+
| 监听器注销 | 是否注销所有注册的监听器 | 未注销扣 8 分 |
|
|
308
|
+
|
|
309
|
+
**关键事件订阅检查**:
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
// ❌ 致命:事件订阅未取消
|
|
313
|
+
export class LocationPlugin {
|
|
314
|
+
private locationCallback: (result: Location) => void;
|
|
315
|
+
|
|
316
|
+
startListening(): void {
|
|
317
|
+
geoLocationManager.on('locationChange', this.locationCallback);
|
|
318
|
+
// 缺少 off 调用!
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
onDestroy(): void {
|
|
322
|
+
// 没有 geoLocationManager.off() 调用
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// ✅ 正确实现
|
|
327
|
+
export class LocationPlugin {
|
|
328
|
+
private locationCallback: (result: Location) => void;
|
|
329
|
+
private isListening: boolean = false;
|
|
330
|
+
|
|
331
|
+
startListening(): void {
|
|
332
|
+
geoLocationManager.on('locationChange', this.locationCallback);
|
|
333
|
+
this.isListening = true;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
stopListening(): void {
|
|
337
|
+
if (this.isListening) {
|
|
338
|
+
geoLocationManager.off('locationChange', this.locationCallback);
|
|
339
|
+
this.isListening = false;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
onDestroy(): void {
|
|
344
|
+
this.stopListening(); // 必须取消订阅
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
#### 2.4 并发安全与状态管理(严苛项,15分)
|
|
350
|
+
|
|
351
|
+
鸿蒙主线程与 Worker 线程的并发安全。
|
|
352
|
+
|
|
353
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
354
|
+
|--------|----------|----------|
|
|
355
|
+
| 全局状态保护 | 共享状态是否有锁机制或原子操作 | 无保护扣 10 分 |
|
|
356
|
+
| 线程安全 | Worker 线程访问主线程资源是否安全 | 不安全扣 8 分 |
|
|
357
|
+
| 状态一致性 | 多实例场景状态是否正确隔离 | 不隔离扣 7 分 |
|
|
358
|
+
| 初始化顺序 | 是否确保初始化完成后再使用 | 未确保扣 5 分 |
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
### Phase 3:C++ Native 层稳定性分析(仅鸿蒙化新增 C++ 代码)
|
|
363
|
+
|
|
364
|
+
> ⚠️ **评分范围**:Phase 3 仅分析**鸿蒙化新增的 NAPI C++ 代码**(Phase 1.5 分类结果中标记为"纳入评分"的 napi_*.cpp 等文件)。原库 C++ 代码(即使为 OHOS 编译)不纳入评分,列入"上游风险提示"。
|
|
365
|
+
|
|
366
|
+
#### 3.0 架构适配判定
|
|
367
|
+
|
|
368
|
+
根据 Phase 1.5 架构类型判定结果:
|
|
369
|
+
|
|
370
|
+
| 架构类型 | Phase 3 处理 | 评分 |
|
|
371
|
+
|----------|-------------|------|
|
|
372
|
+
| NAPI 架构 + 鸿蒙化新增 NAPI 文件 | 正常分析 Phase 3.1-3.3 | 正常评分 |
|
|
373
|
+
| 原库含 NAPI + 鸿蒙化无新增 NAPI | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
374
|
+
| FFI 架构(无 napi_* 调用) | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
375
|
+
| 编译适配型(仅 CMakeLists.ohos.txt) | Phase 3 全部标记 N/A(通过) | 20/20 + 15/15 + 10/10 |
|
|
376
|
+
|
|
377
|
+
#### 3.1 NAPI Handle 管理(致命项,20分)
|
|
378
|
+
|
|
379
|
+
> 仅适用于 NAPI 架构且鸿蒙化新增了 NAPI C++ 文件的项目。
|
|
380
|
+
|
|
381
|
+
NAPI handle 是 Native 层的核心资源。
|
|
382
|
+
|
|
383
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
384
|
+
|--------|----------|----------|
|
|
385
|
+
| Handle Scope | 是否在函数结束时清理 `napi_handle_scope` | **未清理扣 15 分** |
|
|
386
|
+
| Handle 有效性 | 是否在异步操作中保持 handle 有效 | 失效扣 10 分 |
|
|
387
|
+
| 引用释放 | `napi_ref` 是否在析构时释放 | **未释放扣 20 分** |
|
|
388
|
+
| 异常传播 | Native 异常是否转换为 ArkTS 异常 | 不转换扣 8 分 |
|
|
389
|
+
|
|
390
|
+
**C++ 代码示例**:
|
|
391
|
+
|
|
392
|
+
```cpp
|
|
393
|
+
// ❌ 致命:Handle Scope 未清理
|
|
394
|
+
static napi_value GetDeviceInfo(napi_env env, napi_callback_info info) {
|
|
395
|
+
napi_handle_scope scope;
|
|
396
|
+
napi_open_handle_scope(env, &scope);
|
|
397
|
+
|
|
398
|
+
// ... 业务逻辑 ...
|
|
399
|
+
|
|
400
|
+
// 缺少 napi_close_handle_scope!
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// ✅ 正确实现
|
|
405
|
+
static napi_value GetDeviceInfo(napi_env env, napi_callback_info info) {
|
|
406
|
+
napi_handle_scope scope;
|
|
407
|
+
napi_open_handle_scope(env, &scope);
|
|
408
|
+
|
|
409
|
+
napi_value result;
|
|
410
|
+
// ... 业务逻辑 ...
|
|
411
|
+
|
|
412
|
+
napi_close_handle_scope(env, scope); // 必须清理
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
#### 3.2 内存管理(严苛项,15分)
|
|
418
|
+
|
|
419
|
+
Native 层内存管理必须防止泄漏和双重释放。
|
|
420
|
+
|
|
421
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
422
|
+
|--------|----------|----------|
|
|
423
|
+
| 内存分配释放 | malloc/new 是否有对应的 free/delete | **不匹配扣 15 分** |
|
|
424
|
+
| 异常路径释放 | 异常发生时是否释放已分配内存 | 未释放扣 12 分 |
|
|
425
|
+
| 智能指针使用 | 是否使用 RAII 管理资源 | 未使用扣 8 分 |
|
|
426
|
+
| Buffer 管理 | ArrayBuffer 是否正确传递所有权 | 错误传递扣 10 分 |
|
|
427
|
+
|
|
428
|
+
#### 3.3 跨语言调用安全(严苛项,10分)
|
|
429
|
+
|
|
430
|
+
Native 到 ArkTS 的调用安全。
|
|
431
|
+
|
|
432
|
+
| 检查项 | 问题描述 | 扣分规则 |
|
|
433
|
+
|--------|----------|----------|
|
|
434
|
+
| 回调有效性 | ArkTS 回调函数是否在调用前验证 | 未验证扣 7 分 |
|
|
435
|
+
| 参数类型转换 | Native 类型转换为 ArkTS 类型是否安全 | 不安全扣 8 分 |
|
|
436
|
+
| 环境有效性 | napi_env 在异步调用中是否有效 | 失效扣 10 分 |
|
|
437
|
+
| 错误传播 | Native 错误是否传播到 ArkTS 层 | 不传播扣 6 分 |
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
### Phase 4:调用链完整性分析
|
|
442
|
+
|
|
443
|
+
#### 4.1 跨层级调用链追踪
|
|
444
|
+
|
|
445
|
+
追踪关键功能的完整调用链,检查异常传播路径:
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
调用链结构:
|
|
449
|
+
Flutter (Dart) 鸿蒙 (ArkTS/ETS) Native (C++)
|
|
450
|
+
│ │ │
|
|
451
|
+
├─ MethodChannel.call() │ │
|
|
452
|
+
│ └─ "methodName" │ │
|
|
453
|
+
│ │ │
|
|
454
|
+
├─ Plugin.handleMethodCall() │
|
|
455
|
+
│ ├─ try-catch ✅ │
|
|
456
|
+
│ └─ invokeNative() │
|
|
457
|
+
│ │
|
|
458
|
+
│ ├─ NativeImpl::execute()
|
|
459
|
+
│ │ ├─ napi_handle_scope ✅
|
|
460
|
+
│ │ └─ return result
|
|
461
|
+
│ │
|
|
462
|
+
├─ callback(result) │
|
|
463
|
+
│ ├─ 异常检查 ✅ │
|
|
464
|
+
│ └─ return to Flutter │
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
#### 4.2 异常传播链检查
|
|
468
|
+
|
|
469
|
+
| 检查层级 | 检查项 | 扣分规则 |
|
|
470
|
+
|----------|--------|----------|
|
|
471
|
+
| Native → ArkTS | C++ 异常是否转换为 napi_throw | 不转换扣 10 分 |
|
|
472
|
+
| ArkTS → Flutter | ArkTS 异常是否转换为 PlatformException | 不转换扣 10 分 |
|
|
473
|
+
| 完整链路 | 异常是否能从底层传播到顶层 | **断裂扣 15 分** |
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
### Phase 5:生成报告
|
|
478
|
+
|
|
479
|
+
输出文件:
|
|
480
|
+
- `{outputDir}/稳定性检视报告.md` — 详细检视报告,含严苛评分
|
|
481
|
+
|
|
482
|
+
> ⚠️ **输出文件自检**:写入结果文件前,先确认 `{outputDir}/稳定性检视报告.md` 已存在且内容完整(**独立文件,禁止只写入 result 执行结果文件**)。
|
|
483
|
+
|
|
484
|
+
#### 严苛评分计算规则
|
|
485
|
+
|
|
486
|
+
采用**严苛扣分制**,从 100 分开始扣减:
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
初始分数:100 分
|
|
490
|
+
|
|
491
|
+
⚠️ 核心规则:仅对鸿蒙化新增代码扣分!原库上游代码问题列入"上游风险提示"但不纳入评分。
|
|
492
|
+
|
|
493
|
+
扣分类型:
|
|
494
|
+
├── 致命问题:-20 分(最多扣 60 分,超过直接评 0 分)
|
|
495
|
+
│ ├── NAPI 引用未释放(仅鸿蒙化新增 NAPI 代码)
|
|
496
|
+
│ ├── Handle Scope 未清理(仅鸿蒙化新增 NAPI 代码)
|
|
497
|
+
│ ├── 关键路径无异常处理(仅鸿蒙化 ArkTS 代码)
|
|
498
|
+
│ ├── 事件订阅未取消(仅鸿蒙化 ArkTS 代码)
|
|
499
|
+
│ └── 异常传播链断裂(仅鸿蒙化代码层面的断裂)
|
|
500
|
+
├── 严重问题:-15 分
|
|
501
|
+
│ ├── 资源释放不完整(仅鸿蒙化代码)
|
|
502
|
+
│ ├── 全局状态无保护(仅鸿蒙化代码)
|
|
503
|
+
│ ├── 内存分配释放不匹配(仅鸿蒙化新增 C++ 代码)
|
|
504
|
+
├── 中等问题:-10 分
|
|
505
|
+
│ ├── 部分异常处理缺失(仅鸿蒙化代码)
|
|
506
|
+
│ ├── 参数验证不完整(仅鸿蒙化代码)
|
|
507
|
+
│ ├── 回调有效性未验证(仅鸿蒙化新增 C++ 代码)
|
|
508
|
+
├── 轻微问题:-5 分
|
|
509
|
+
│ ├── 代码风格不规范(仅鸿蒙化代码)
|
|
510
|
+
│ ├── 注释不完整(仅鸿蒙化代码)
|
|
511
|
+
│ ├── 日志记录缺失(仅鸿蒙化代码)
|
|
512
|
+
|
|
513
|
+
原库上游问题处理(不扣分):
|
|
514
|
+
├── 原库 C++ Release 模式安全检查缺失 → 列入"上游风险提示",不扣分
|
|
515
|
+
├── 原库 C++ 裸指针/FIXME → 列入"上游风险提示",不扣分
|
|
516
|
+
├── 原库 C++ 线程安全缺陷 → 列入"上游风险提示",不扣分
|
|
517
|
+
├── Dart FFI force unwrap → 列入"上游风险提示",不扣分
|
|
518
|
+
├── 其他原库代码质量问题 → 列入"上游风险提示",不扣分
|
|
519
|
+
|
|
520
|
+
架构适配规则:
|
|
521
|
+
├── 无 NAPI 架构(使用 dart:ffi / MethodChannel) → Phase 3 全部标记 N/A(通过),不扣分
|
|
522
|
+
├── 原库含 NAPI 但鸿蒙化未新增 NAPI → Phase 3 全部标记 N/A(通过),不扣分
|
|
523
|
+
├── 仅编译适配型(无新增 C++ 源码) → Phase 3 全部标记 N/A(通过),不扣分
|
|
524
|
+
|
|
525
|
+
特殊规则:
|
|
526
|
+
├── 不存在 ohos 目录 → 0 分
|
|
527
|
+
├── ohos 目录无代码文件 → 0 分
|
|
528
|
+
├── 致命问题 ≥ 3 个(仅鸿蒙化代码) → 0 分
|
|
529
|
+
├── 致命问题 ≥ 2 个 + 严重问题 ≥ 2 个(仅鸿蒙化代码) → 0 分
|
|
530
|
+
|
|
531
|
+
最低分数:0 分
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
## 输出格式规范
|
|
537
|
+
|
|
538
|
+
报告必须严格遵循以下格式,确保 `_parseFlutterLibraryScore` 函数能正确解析:
|
|
539
|
+
|
|
540
|
+
```markdown
|
|
541
|
+
# ${repoName} 稳定性检视报告
|
|
542
|
+
|
|
543
|
+
## 📊 稳定性评分
|
|
544
|
+
|
|
545
|
+
**综合评分:78/100**
|
|
546
|
+
|
|
547
|
+
> 评分说明:采用严苛扣分制,从 100 分开始扣减,最低 0 分。**仅对鸿蒙化新增代码扣分**,原库上游问题列入"上游风险提示"但不纳入评分。
|
|
548
|
+
|
|
549
|
+
| 维度 | 检查项数 | 通过数 | 失败数 | 扣分 | 得分 |
|
|
550
|
+
|------|----------|--------|--------|------|------|
|
|
551
|
+
| NAPI引用管理 | 4 | 3 | 1 | -20 | 20/20 |
|
|
552
|
+
| 异常处理 | 5 | 3 | 2 | -15 | 10/25 |
|
|
553
|
+
| 资源释放 | 5 | 4 | 1 | -12 | 8/20 |
|
|
554
|
+
| 并发安全 | 4 | 3 | 1 | -5 | 10/15 |
|
|
555
|
+
| Native Handle | 4 | 2 | 2 | -20 | 0/20 |
|
|
556
|
+
| 内存管理 | 4 | 3 | 1 | -8 | 7/15 |
|
|
557
|
+
| 调用链完整性 | 3 | 2 | 1 | -10 | 0/10 |
|
|
558
|
+
|
|
559
|
+
**扣分明细**:
|
|
560
|
+
- NAPI 引用未释放(致命):-20 分
|
|
561
|
+
- Handle Scope 未清理(致命):-20 分
|
|
562
|
+
- 部分异常处理缺失(中等):-10 分
|
|
563
|
+
- 参数验证不完整(中等):-10 分
|
|
564
|
+
- 事件订阅未取消(严重):-15 分
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
568
|
+
## 🔍 检视范围
|
|
569
|
+
|
|
570
|
+
### 鸿蒙代码定位结果
|
|
571
|
+
|
|
572
|
+
**扫描策略**:通过文件类型 + API 特征 + 配置文件智能识别,而非依赖固定目录名
|
|
573
|
+
|
|
574
|
+
| 扫描维度 | 发现文件数 | 检视状态 |
|
|
575
|
+
|----------|------------|----------|
|
|
576
|
+
| `.ets` 文件 | 12 | ✅ 已检视(核心) |
|
|
577
|
+
| `module.json5` | 1 | ✅ 已检视 |
|
|
578
|
+
| NAPI C++ 文件 | 8 | ✅ 已检视 |
|
|
579
|
+
| `@ohos` API 导入 | 5 处 | ✅ 已检视 |
|
|
580
|
+
| 非鸿蒙目录(android/ios/lib) | - | ⚠️ 不检视 |
|
|
581
|
+
|
|
582
|
+
### 代码来源分类
|
|
583
|
+
|
|
584
|
+
**关键区分**:通过 Copyright 声明识别代码来源,仅对鸿蒙化新增代码评分:
|
|
585
|
+
|
|
586
|
+
| 代码类别 | Copyright | 文件范围 | 检视状态 |
|
|
587
|
+
|----------|-----------|----------|----------|
|
|
588
|
+
| **鸿蒙化新增代码** | "Huawei Device Co., Ltd." / "OpenHarmony" | `.ets` Plugin 文件、module.json5 等 | ✅ **纳入评分** |
|
|
589
|
+
| **原库上游代码** | 原项目作者(不含华为/OpenHarmony) | bridge/*.cpp、foundation/*.cc 等 | ⚠️ **不纳入评分**,列入上游风险提示 |
|
|
590
|
+
| **Flutter Dart 层** | 原库代码 | kraken/lib/*.dart 等 | ❌ 不检视 |
|
|
591
|
+
|
|
592
|
+
**实际检视文件列表(鸿蒙化代码)**:
|
|
593
|
+
- `{sourceDir}/xxx/plugin.ets` ✅ 鸿蒙化新增
|
|
594
|
+
- `{sourceDir}/yyy/entry.ets` ✅ 鸿蒙化新增
|
|
595
|
+
- `{sourceDir}/zzz/napi_binding.cpp` ✅ 鸿蒙化新增 NAPI(仅 NAPI 架构项目)
|
|
596
|
+
|
|
597
|
+
**上游风险提示文件(原库代码,不纳入评分)**:
|
|
598
|
+
- `{sourceDir}/bridge/kraken_bridge.cc` ⚠️ 原库 C++ 桥接
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
602
|
+
## ⚠️ 上游风险提示(原库代码,不纳入评分)
|
|
603
|
+
|
|
604
|
+
> 以下问题存在于原库代码中,鸿蒙化开发者未修改这些源码。问题属上游继承,此处仅作为风险提示列出,**不纳入综合评分**。
|
|
605
|
+
|
|
606
|
+
| 风险 | 文件位置 | 说明 | 建议优先级 |
|
|
607
|
+
|------|----------|------|------------|
|
|
608
|
+
| C++ Release 模式 nullptr 崩溃 | `bridge/kraken_bridge.cc:150` | ... | P0(建议本地 patch) |
|
|
609
|
+
| C++ 线程安全缺陷 | `bridge/dart_methods.cc:16` | ... | P2 |
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## 🔍 详细检视结果
|
|
614
|
+
|
|
615
|
+
### 1. NAPI 引用管理分析
|
|
616
|
+
|
|
617
|
+
> 若项目使用 dart:ffi + MethodChannel 架构,此维度标记为 N/A(全部通过),不扣分。
|
|
618
|
+
|
|
619
|
+
#### 1.1 致命问题
|
|
620
|
+
|
|
621
|
+
| 问题 | 文件位置 | 代码片段 | 扣分 |
|
|
622
|
+
|------|----------|----------|------|
|
|
623
|
+
| NAPI 引用未释放 | `{鸿蒙化新增的ets/cpp文件路径}:45` | `napi_create_reference(env, value, 1, &ref)` 缺少释放 | -20 |
|
|
624
|
+
|
|
625
|
+
**问题描述**:在 `MyPlugin` 类中创建了 `napi_ref`,但 `onDestroy` 方法中未调用 `napi_delete_reference`,会导致内存泄漏。
|
|
626
|
+
|
|
627
|
+
**修复建议**:
|
|
628
|
+
```typescript
|
|
629
|
+
// 在 onDestroy 中添加:
|
|
630
|
+
if (this.napiRef !== null) {
|
|
631
|
+
napi_delete_reference(env, this.napiRef);
|
|
632
|
+
this.napiRef = null;
|
|
633
|
+
}
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
---
|
|
637
|
+
|
|
638
|
+
### 2. 异常处理分析
|
|
639
|
+
|
|
640
|
+
#### 2.1 中等问题
|
|
641
|
+
|
|
642
|
+
| 问题 | 文件位置 | 影响范围 | 扣分 |
|
|
643
|
+
|------|----------|----------|------|
|
|
644
|
+
| 关键路径无异常处理 | `{鸿蒙化新增ets文件路径}:23` | connect 方法直接调用 API | -10 |
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
### 3. 资源释放分析
|
|
649
|
+
|
|
650
|
+
...
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
654
|
+
### 4. Native 层分析
|
|
655
|
+
|
|
656
|
+
> 若项目使用 dart:ffi + MethodChannel 架构或原库含 NAPI 但鸿蒙化未新增 NAPI,此维度标记为 N/A(全部通过),不扣分。
|
|
657
|
+
|
|
658
|
+
...
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
### 5. 调用链完整性分析
|
|
663
|
+
|
|
664
|
+
**关键功能调用链**:`connect(deviceId)`(仅追踪鸿蒙化代码层面的调用链)
|
|
665
|
+
|
|
666
|
+
```
|
|
667
|
+
Flutter → MethodChannel → ArkTS → Native → 回调
|
|
668
|
+
✅ 有异常处理 ❌ 无异常检查 ❌ Handle 未清理
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
**异常传播断裂点**:鸿蒙化代码层面的异常传播断裂点标注(原库代码层面的问题列为上游风险提示)。
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
## 💡 改进建议
|
|
676
|
+
|
|
677
|
+
### 优先级 P0(致命问题,必须修复)
|
|
678
|
+
|
|
679
|
+
1. **NAPI 引用释放**:在所有 Plugin 的 onDestroy 方法中添加 napi_delete_reference 调用
|
|
680
|
+
2. **Handle Scope 清理**:在所有 Native 函数结尾添加 napi_close_handle_scope
|
|
681
|
+
3. **关键路径异常处理**:所有 MethodChannel 处理函数必须包裹 try-catch
|
|
682
|
+
|
|
683
|
+
### 优先级 P1(严重问题,强烈建议修复)
|
|
684
|
+
|
|
685
|
+
...
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
**检视时间**:${new Date().toLocaleString('zh-CN')}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
## 检视清单
|
|
695
|
+
|
|
696
|
+
详细检查项参见 [references/CHECKLIST.md](references/CHECKLIST.md)
|
|
697
|
+
|
|
698
|
+
---
|
|
699
|
+
|
|
700
|
+
## 输出要求
|
|
701
|
+
|
|
702
|
+
1. **评分格式**:必须包含 `**综合评分:XX/100**`(粗体标记,中文冒号),确保 `_parseFlutterLibraryScore` 能解析
|
|
703
|
+
2. **评分范围**:0-100 整数,严苛扣分制。**仅对鸿蒙化新增代码扣分**
|
|
704
|
+
3. **代码来源分类**:必须包含"代码来源分类"章节,区分鸿蒙化新增 vs 原库上游代码
|
|
705
|
+
4. **上游风险提示**:必须包含"上游风险提示"章节,列出原库代码问题但不纳入评分
|
|
706
|
+
5. **检视范围**:通过智能扫描 + 代码来源识别鸿蒙化代码,明确标注检视文件路径、代码来源和非检视范围
|
|
707
|
+
6. **扣分明细**:必须列出每个扣分项的具体原因和修复建议,**标注问题所属代码来源**
|
|
708
|
+
7. **架构适配**:若项目不使用 NAPI(使用 dart:ffi / MethodChannel),必须在报告中明确标注 Phase 3 为 N/A
|
|
709
|
+
8. **调用链分析**:必须包含至少 3 个关键功能的调用链图
|
|
710
|
+
9. **修复建议**:按优先级(P0/P1/P2)分类,包含示例代码
|
|
711
|
+
10. **语言**:使用中文撰写报告内容
|
|
712
|
+
|
|
713
|
+
### 结构化指标输出(必须执行)
|
|
714
|
+
|
|
715
|
+
执行环境会在任务 prompt 中下发一个**结构化指标文件输出路径**(`stepId{X}_loop{L}_meta_{N}.json`)。
|
|
716
|
+
检视完成后,**必须**将最终评分以下述 JSON 对象写入该路径:
|
|
717
|
+
|
|
718
|
+
```json
|
|
719
|
+
{
|
|
720
|
+
"stabilityScore": 85,
|
|
721
|
+
"scoreReason": "异常处理缺失2处-16等(一句话判定依据,≤50字;触发一票否决时必须注明)"
|
|
722
|
+
}
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
| 字段 | 类型 | 说明 |
|
|
726
|
+
|------|------|------|
|
|
727
|
+
| `stabilityScore` | number | 稳定性评分(0-100 整数,与报告中 `**综合评分:XX/100**` 的数值一致) |
|
|
728
|
+
| `scoreReason` | string | 评分判定依据摘要(可选,前端悬浮提示展示;0 分时强烈建议写明触发规则) |
|
|
729
|
+
|
|
730
|
+
**说明**:该文件由执行框架自动收割入库(前端/历史列表直接读取评分,无需解析报告文本)。若 prompt 未下发该路径则跳过本节。
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
734
|
+
## 特殊情况处理
|
|
735
|
+
|
|
736
|
+
| 情况 | 处理方式 | 评分 |
|
|
737
|
+
|------|----------|------|
|
|
738
|
+
| 未发现 `.ets` 文件和鸿蒙 API 特征 | 报告标注"未发现鸿蒙化实现代码" | 0 分 |
|
|
739
|
+
| 仅发现目录名含 `ohos` 但无代码文件 | 报告标注"鸿蒙化代码疑似缺失" | 0-30 分 |
|
|
740
|
+
| 发现鸿蒙代码文件但解析失败 | 报告标注"鸿蒙代码解析失败"并说明原因 | 0 分 |
|
|
741
|
+
| 致命问题 ≥ 3 个(仅鸿蒙化代码) | 报告标注"存在严重稳定性风险,建议重构" | 0 分 |
|
|
742
|
+
| 扫描到 `.ets` 文件但不在 `ohos/` 目录 | 正常检视,报告标注实际路径 | 正常评分 |
|
|
743
|
+
| 项目不使用 NAPI(使用 dart:ffi / MethodChannel) | Phase 3 标记 N/A(全部通过),评分以 ArkTS 层为主 | 正常评分 |
|
|
744
|
+
| 发现 C++ NAPI 代码但为原库上游代码 | 不纳入评分,列入"上游风险提示" | Phase 3 不扣分 |
|
|
745
745
|
| C++ 仅为 OHOS 编译配置(CMakeLists.ohos.txt)无新增源码 | Phase 3 标记 N/A(全部通过) | Phase 3 不扣分 |
|