APK Parser

APK parser for Android

License

License

GroupId

GroupId

com.jaredrummler
ArtifactId

ArtifactId

apk-parser
Last Version

Last Version

1.0.2
Release Date

Release Date

Type

Type

aar
Description

Description

APK Parser
APK parser for Android
Project URL

Project URL

https://github.com/jaredrummler/APKParser
Source Code Management

Source Code Management

https://github.com/jaredrummler/APKParser.git

Download apk-parser

How to add to project

<!-- https://jarcasting.com/artifacts/com.jaredrummler/apk-parser/ -->
<dependency>
    <groupId>com.jaredrummler</groupId>
    <artifactId>apk-parser</artifactId>
    <version>1.0.2</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/com.jaredrummler/apk-parser/
implementation 'com.jaredrummler:apk-parser:1.0.2'
// https://jarcasting.com/artifacts/com.jaredrummler/apk-parser/
implementation ("com.jaredrummler:apk-parser:1.0.2")
'com.jaredrummler:apk-parser:aar:1.0.2'
<dependency org="com.jaredrummler" name="apk-parser" rev="1.0.2">
  <artifact name="apk-parser" type="aar" />
</dependency>
@Grapes(
@Grab(group='com.jaredrummler', module='apk-parser', version='1.0.2')
)
libraryDependencies += "com.jaredrummler" % "apk-parser" % "1.0.2"
[com.jaredrummler/apk-parser "1.0.2"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

APK Parser Maven Central Software License Twitter Follow

Features

  • Retrieve basic apk metas, such as title, icon, package name, version, etc.
  • Parse and convert binary xml file to text
  • Classes from dex file
  • Get certificate metas and verify apk signature

Get apk-parser

Download the latest AAR or grab via Gradle:

compile 'com.jaredrummler:apk-parser:1.0.2'

Usage

The easiest way is to use the ApkParser class, which contains convenient methods to get AndroidManifest.xml, apk meta infos, etc. #####1. Apk meta info ApkMeta contains name(label), packageName, version, sdk, used features, etc.

PackageManager pm = getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo("com.facebook.katana", 0);
ApkParser apkParser = ApkParser.create(appInfo);
ApkMeta meta = apkParser.getApkMeta();
String packageName = meta.packageName;
long versionCode = meta.versionCode;
List<UseFeature> usesFeatures = meta.usesFeatures;
List<String> requestedPermissions = meta.usesPermissions;

#####2. Get binary xml and manifest xml file

ApplicationInfo appInfo = getPackageManager().getApplicationInfo("some.package.name", 0);
ApkParser apkParser = ApkParser.create(appInfo);
String readableAndroidManifest = apkParser.getManifestXml();
String xml = apkParser.transBinaryXml("res/layout/activity_main.xml");

#####3. Get dex classes

ApplicationInfo appInfo = getPackageManager().getApplicationInfo("com.instagram.android", 0);
ApkParser apkParser = ApkParser.create(appInfo);
List<DexInfo> dexFiles = apkParser.getDexInfos(); // if size > 1 then app is using multidex
for (DexInfo dexInfo : dexFiles) {
  DexClass[] dexClasses = dexInfo.classes;
  DexHeader dexHeader = dexInfo.header;
}

#####4. Get certificate and verify apk signature

ApplicationInfo appInfo = getPackageManager().getApplicationInfo("com.instagram.android", 0);
ApkParser apkParser = ApkParser.create(appInfo);
if (apkParser.verifyApk() == ApkParser.ApkSignStatus.SIGNED) {
  System.out.println(apkParser.getCertificateMeta().signAlgorithm);
}

#####5. Get intent-filters from apk manifest:

ApkParser parser = ApkParser.create(getPackageManager(), "com.android.settings");
AndroidManifest androidManifest = parser.getAndroidManifest();
for (AndroidComponent component : androidManifest.getComponents()) {
  if (!component.intentFilters.isEmpty()) {
    for (IntentFilter intentFilter : component.intentFilters) {
      // Got an intent filter for activity/service/provider/receiver.
    }
  }
}

#####6. Locales Apk may return different infos(title, icon, etc.) for different region and language, which is determined by Locales. If the locale is not set, the "en_US" locale(Locale.US) is used. You can set the locale like this:

ApkParser apkParser = ApkParser.create(filePath);
apkParser.setPreferredLocale(Locale.SIMPLIFIED_CHINESE);
ApkMeta apkMeta = apkParser.getApkMeta();

The PreferredLocale parameter work for getApkMeta, getManifestXml, and other binary xmls. Apk parser will find best match languages with locale you specified.

If locale is set to null, ApkParser will not translate resource tag, just give the resource id. For example, apk title will be '@string/app_name' instead of 'WeChat'.


APK Parser is based on CaoQianLi's apk-parser

Versions

Version
1.0.2
1.0.1
1.0.0