fix(admin-service): 修正 ManifestParser 调用方式 — 直接传原始 Buffer

ManifestParser(buffer) 内部自带 BinaryXmlParser,无需先调用 BinaryXmlParser.parse()
再把结果传入 ManifestParser,否则导致 readUInt16LE is not a function。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-06 09:31:08 -08:00
parent 276eda2a84
commit adda5e04d7
1 changed files with 4 additions and 10 deletions

View File

@ -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<any>((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',