fix(admin-service): 修复 APK 解析 - 使用临时文件代替 Buffer

adbkit-apkreader 库只支持文件路径,不支持 Buffer
现在先将 Buffer 写入临时文件,解析后删除

参考: https://github.com/openstf/adbkit-apkreader

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Developer 2025-12-03 08:22:14 -08:00
parent b1bee7f44e
commit 114a9e611c
1 changed files with 19 additions and 1 deletions

View File

@ -1,6 +1,9 @@
import { Injectable, Logger } from '@nestjs/common'
import * as unzipper from 'unzipper'
import * as bplist from 'bplist-parser'
import * as fs from 'fs/promises'
import * as path from 'path'
import * as os from 'os'
import { Platform } from '@/domain/enums/platform.enum'
// eslint-disable-next-line @typescript-eslint/no-require-imports
@ -33,8 +36,16 @@ export class PackageParserService {
}
private async parseApk(buffer: Buffer): Promise<ParsedPackageInfo | null> {
// adbkit-apkreader only supports file paths, not buffers
// So we need to write buffer to a temp file first
const tempFile = path.join(os.tmpdir(), `apk-parse-${Date.now()}.apk`)
try {
const reader = await ApkReader.open(buffer)
// Write buffer to temp file
await fs.writeFile(tempFile, buffer)
// Open APK from file path
const reader = await ApkReader.open(tempFile)
const manifest = await reader.readManifest()
return {
@ -47,6 +58,13 @@ export class PackageParserService {
} catch (error) {
this.logger.error(`Failed to parse APK: ${error.message}`)
throw error
} finally {
// Clean up temp file
try {
await fs.unlink(tempFile)
} catch {
// Ignore cleanup errors
}
}
}