node-apk-parser v0.2.3
#node-apk-parser based on adbkit-apkreader, add meta data parse feature
node-apk-parser provides a Node.js API for extracting information from Android APK files. For example, it allows you to read the AndroidManifest.xml of an existing APK file.
Getting started
Install via NPM:
npm install --save node-apk-parserExamples
Read the AndroidManifest.xml of an APK
var util = require('util')
var ApkReader = require('node-apk-parser')
var reader = ApkReader.readFile('HelloApp.apk')
var manifest = reader.readManifestSync()
console.log(util.inspect(manifest, { depth: null }))API
ApkReader
ApkReader.readFile(file)
Alternate syntax to manually creating an ApkReader instance. Currently, only files are supported, but support for streams might be added at some point.
- file The path to the APK file.
- Throws: Erroron error (e.g. if the file is not valid)
- Returns: An ApkReaderinstance.
constructor(file)
Manually construct an ApkReader instance. Useful for testing and/or playing around. Normally you would use ApkReader.readFile(file) to create the instance.
- file The path to the APK file.
- Throws: Erroron error (e.g. if the file is not valid)
- Returns: N/A
reader.readManifestSync()
Synchronously reads and parses the AndroidManifest.xml file inside the APK and returns a simplified object representation of it.
- Throws: Error(e.g. if parsing was unsuccessful)
- Returns: A JavaScript Objectrepresentation of the manifest. See example output below:
{ versionCode: 1,
  versionName: '1.0',
  package: 'com.cvte.sdk.update',
  usesPermissions: [],
  permissions: [],
  permissionTrees: [],
  permissionGroups: [],
  instrumentation: null,
  usesSdk: { minSdkVersion: 14, targetSdkVersion: 20 },
  usesConfiguration: null,
  usesFeatures: [],
  supportsScreens: null,
  compatibleScreens: [],
  supportsGlTextures: [],
  application: 
   { theme: 'resourceId:0x7f060000',
     label: 'resourceId:0x7f050001',
     icon: 'resourceId:0x7f020000',
     debuggable: true,
     allowBackup: true,
     activities: 
      [ { label: 'resourceId:0x7f050001',
          name: 'com.cvte.sdk.update.MyActivity',
          intentFilters: 
           [ { actions: [ { name: 'android.intent.action.MAIN' } ],
               categories: [ { name: 'android.intent.category.LAUNCHER' } ],
               data: [] } ],
          metaData: [] },
        { theme: 'resourceId:0x1030071',
          name: 'com.cvte.sdk.update.UpdateDialogActivity',
          intentFilters: [],
          metaData: [] } ],
     activityAliases: [],
     launcherActivities: 
      [ { label: 'resourceId:0x7f050001',
          name: 'com.cvte.sdk.update.MyActivity',
          intentFilters: 
           [ { actions: [ { name: 'android.intent.action.MAIN' } ],
               categories: [ { name: 'android.intent.category.LAUNCHER' } ],
               data: [] } ],
          metaData: [] } ],
     services: [],
     receivers: [],
     providers: [],
     usesLibraries: [],
     metaDatas: 
      [ { name: 'MENGYOU_APPKEY',
          value: 'a41a4a18b9a1808e4b88f8beea2ddfd1870866c3' } ] } }reader.readXmlSync(path)
Synchronously reads and parses the binary XML file at the given path inside the APK file. Attempts to be somewhat compatible with the DOM API.
- path The path to the binary XML file inside the APK. For example, giving AndroidManifest.xmlas the path would parse the manifest (but you'll probably want to usereader.readManifestSync()instead).
- Throws: Error(e.g. if parsing was unsuccessful)
- Returns:  A JavaScript Objectrepresentation of the root node of the XML file. All nodes including the root node have the following properties:- namespaceURI The namespace URI or nullif none.
- nodeType 1for element nodes,2for attribute nodes, and4for CData sections.
- nodeName The node name.
- For element nodes, the following additional properties are present:- attributes An array of attribute nodes.
- childNodes An array of child nodes.
 
- For attribute nodes, the following additional properties are present:- name The attribute name.
- value The attribute value, if possible to represent as a simple value.
- typedValue May be available when the attribute represents a complex value. See android.util.TypedValue for more information. Has the following properties:- value The value, which might null,String,Boolean,Numberor even anObjectfor the most complex types.
- type A Stringrepresentation of the type of the value.
- rawType A raw integer presentation of the type of the value.
 
- value The value, which might 
 
- For CData nodes, the following additional properties are present:- data The CData.
- typedValue May be available if the section represents a more complex type. See above for details.
 
 
- namespaceURI The namespace URI or 
More information
- android.util.TypedValue For more information about value types.
- Dong Liu's excellent Java-based APK parser, which was used as a reference implementation.
- A detailed blog port about Android's binary XML format
- Stackoverflow discussion about the topic
- android-apktool The most advanced CLI/Java-based APK tool.