【问题标题】:Get APK package name获取 APK 包名
【发布时间】:2015-10-15 13:33:01
【问题描述】:

我可以从 JS 中的上传文件中获取 APK 包名称吗?

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

<input type="file"/>

有可能吗?

【问题讨论】:

  • 您是否有机会将 Node.js 作为网络服务器运行?我认为不可能做这个客户端。
  • 我认为它可能...使用 HTML5 文件输入 API 将 APK 作为 blob 获取,将其传递给解压缩库以提取 AndroidManifest.xml,然后解析那个 XML 来获取包名?

标签: javascript android html apk


【解决方案1】:

最后,我使用了惊人的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 现已更新,此代码不再有效,您应该重构它。
【解决方案2】:

现在您可以使用来自 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多