From adda5e04d7b748760c84b13cbed33728f1a31416 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 6 Mar 2026 09:31:08 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin-service):=20=E4=BF=AE=E6=AD=A3=20Mani?= =?UTF-8?q?festParser=20=E8=B0=83=E7=94=A8=E6=96=B9=E5=BC=8F=20=E2=80=94?= =?UTF-8?q?=20=E7=9B=B4=E6=8E=A5=E4=BC=A0=E5=8E=9F=E5=A7=8B=20Buffer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ManifestParser(buffer) 内部自带 BinaryXmlParser,无需先调用 BinaryXmlParser.parse() 再把结果传入 ManifestParser,否则导致 readUInt16LE is not a function。 Co-Authored-By: Claude Sonnet 4.6 --- .../parsers/package-parser.service.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts index 85c8091..eb3d4fa 100644 --- a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts +++ b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts @@ -17,12 +17,9 @@ export class PackageParserService implements IPackageParser { // 改用 yauzl.fromBuffer() + adbkit-apkreader 内部 ManifestParser 直接解析 try { const yauzl = await import('yauzl'); - const { ManifestParser } = await import('adbkit-apkreader/lib/apkreader/parser/manifest' as any).then( - (m: any) => ({ ManifestParser: m.default || m }), - ); - const { BinaryXmlParser } = await import('adbkit-apkreader/lib/apkreader/parser/binaryxml' as any).then( - (m: any) => ({ BinaryXmlParser: m.default || m }), - ); + // ManifestParser(buffer) 内部自带 BinaryXmlParser,直接传原始 Buffer 即可 + const ManifestParser: any = await import('adbkit-apkreader/lib/apkreader/parser/manifest' as any) + .then((m: any) => m.default || m); const zipfile = await new Promise((resolve, reject) => yauzl.fromBuffer(buffer, { lazyEntries: true }, (err: any, zf: any) => @@ -49,10 +46,7 @@ export class PackageParserService implements IPackageParser { zipfile.on('error', reject); }); - const binaryXml = new BinaryXmlParser(manifestBuffer); - const parsed = binaryXml.parse(); - const manifestParser = new ManifestParser(parsed); - const manifest = manifestParser.parse(); + const manifest = new ManifestParser(manifestBuffer).parse(); return { packageName: manifest.package || 'unknown',