2015-10-15 163 views
3

我可以從JS上傳的文件中獲取APK包名嗎?獲取APK包的名稱

我正在使用HTML5上傳文件,我想獲取所選文件的包名稱。

<input type="file"/> 

這可能嗎?

+0

您運行的Node.js作爲一個Web服務器的任何機會呢?我不認爲有可能做這個客戶端。 – Billy

+0

我認爲它可能* ...使用HTML5文件輸入API將APK作爲blob,將它傳遞給解壓縮庫以提取AndroidManifest.xml,並解析該XML以獲取包名稱? – Shai

回答

0

最後,我用了驚人的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; 
     }