获取APK包名

5

我能否从JS上传的文件中获取APK包名?

我正在使用HTML5上传文件,并希望获取所选文件的包名。

<input type="file"/>

这有可能吗?


你是否在使用Node.js作为Web服务器?我认为这是不可能在客户端完成的。 - Billy
我认为这是可能的...使用HTML5文件输入API获取APK作为Blob,将其传递给解压库以提取AndroidManifest.xml,并解析该XML以获取包名称? - Shai
2个回答

3
最后,我使用了令人惊叹的JSZip库来获取AndroidManifest.xml文件的内容,并使用以下代码将其转换为可搜索的字符串:
function getPackageName(apkBlobAsByteArray) {
            // Unzipping zip blob
            var zip = new JSZip(apkBlobAsByteArray);

            // Getting AndroidManifest.xml and decompress it
            var androidCompress = zip.files['AndroidManifest.xml'];
            var androidNonCompress = androidCompress._data.getContent();

            // Reading to content to a searchable string
            var packageNameArray = [];
            var textArray = String(androidNonCompress).split(',');
            for (var i = 0, len = textArray.length; i < len; i++) {
                if (textArray[i] !== 0) {
                    packageNameArray.push(textArray[i]);
                }
            }

            // Searching for package name
            var startPattern = 'manifest';
            var androidText = String.fromCharCode.apply(null, packageNameArray).toString().toLowerCase();
            var packageName = androidText.substring(androidText.indexOf(startPattern) +
                startPattern.length, androidText.indexOf('uses'));
            // Remove version from package name
            packageName = packageName.substring(0, packageName.indexOf(packageName.match(/\d+/)[0]));

            return packageName;
        }

jszip现在已经更新,这段代码不再适用,你应该进行重构。 - mortezashojaei

1
现在你可以使用来自https://github.com/chenquincy/app-info-parser的app-info-parser。
在你的浏览器中,你可以使用JS Deliver来包含一个指向https://cdn.jsdelivr.net/gh/chenquincy/app-info-parser/dist/app-info-parser.min.js的脚本标签。
代码可能是这样的:
var parser = new AppInfoParser(files[0])
parser.parse().then(function (result) {
  console.log('app info ----> ', result);
  console.log('icon base64 ----> ', result.icon);
}).catch(function (err) {
  console.log('err ----> ', err);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接