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 df02f6f..e476309 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 @@ -1,3 +1,6 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; import { Injectable, Logger, BadRequestException } from '@nestjs/common'; import { IPackageParser, ParsedPackageInfo } from '../../domain/ports/package-parser.interface'; @@ -13,10 +16,13 @@ export class PackageParserService implements IPackageParser { } private async parseApk(buffer: Buffer): Promise { + // adbkit-apkreader v3 底层用 yauzl.open(),只接受文件路径而非 Buffer + // 先写入临时文件,解析后删除 + const tmpFile = path.join(os.tmpdir(), `apk-parse-${Date.now()}.apk`); try { - // Dynamic import to handle missing dependency gracefully + fs.writeFileSync(tmpFile, buffer); const ApkReader = await import('adbkit-apkreader').then(m => m.default || m); - const reader = await ApkReader.open(buffer); + const reader = await ApkReader.open(tmpFile); const manifest = await reader.readManifest(); return { packageName: manifest.package || 'unknown', @@ -33,6 +39,8 @@ export class PackageParserService implements IPackageParser { versionName: '0.0.0', platform: 'ANDROID', }; + } finally { + try { fs.unlinkSync(tmpFile); } catch { /* ignore */ } } }