From ce0fe366aaed5c877c175fb49de4a4911f0da71d Mon Sep 17 00:00:00 2001 From: chuck-chihai Date: Fri, 9 Jun 2023 14:36:51 +0800 Subject: [PATCH] feat: apk arch list --- lib/apk.js | 12 ++++++++++-- lib/zip.js | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/apk.js b/lib/apk.js index c2cc25a..34ddf04 100644 --- a/lib/apk.js +++ b/lib/apk.js @@ -2,6 +2,7 @@ const Zip = require('./zip') const { mapInfoResource, findApkIconPath, getBase64FromBuffer } = require('./utils') const ManifestName = /^androidmanifest\.xml$/ const ResourceName = /^resources\.arsc$/ +const LibName = /^lib[\\/]/ const ManifestXmlParser = require('./xml-parser/manifest') const ResourceFinder = require('./resource-finder') @@ -19,7 +20,12 @@ class ApkParser extends Zip { } parse () { return new Promise((resolve, reject) => { - this.getEntries([ManifestName, ResourceName]).then(buffers => { + this.getEntries([ManifestName, ResourceName, LibName]).then(buffers => { + for (let key of [ManifestName, ResourceName]) { + if (buffers[key]) { + buffers[key] = buffers[key][0].buffer + } + } if (!buffers[ManifestName]) { throw new Error('AndroidManifest.xml can\'t be found.') } @@ -32,7 +38,9 @@ class ApkParser extends Zip { resourceMap = this._parseResourceMap(buffers[ResourceName]) // update apkInfo with resourceMap apkInfo = mapInfoResource(apkInfo, resourceMap) - + if (buffers[LibName]) { + apkInfo.arch = [...new Set(buffers[LibName].map(item => item.fileName.match(/^lib[\\/](.*)[\\/]/)[1]))] + } // find icon path and parse icon const iconPath = findApkIconPath(apkInfo) if (iconPath) { diff --git a/lib/zip.js b/lib/zip.js index 54a8f7d..47faede 100644 --- a/lib/zip.js +++ b/lib/zip.js @@ -25,7 +25,10 @@ class Zip { getEntries (regexps, type = 'buffer') { regexps = regexps.map(regex => decodeNullUnicode(regex)) return new Promise((resolve, reject) => { - this.unzip.getBuffer(regexps, { type }, (err, buffers) => { + this.unzip.getBuffer(regexps, { + type, + multiple: true + }, (err, buffers) => { err ? reject(err) : resolve(buffers) }) })