apk-parser

General

Category
Free
Tag
APK
License
N/A
Registered
Sep 29, 2016
Favorites
0
Link
https://github.com/hsiafan/apk-parser
See also
APK patch size estimator
DecompileApk
KAM
dynamic-load-apk
recompress-apk

Additional

Language
Java
Version
v2.5.3 (Feb 26, 2018)
Created
Jan 10, 2014
Updated
Apr 20, 2018
Owner
Hsiafan (hsiafan)
Contributors
Tobias Preuss (johnjohndoe)
sorccu
9re
PhilLab
Ne-Lexa
XiaFan (ClearTheSKY)
Gh0u1L5
Hsiafan (hsiafan)
8
Activity
Badge
Generate
Download
Source code

Announcement

Apk parser lib, for decoding binary xml file, getting apk meta info.

Features

  • Retrieve apk meta info, such as title, icon, package name, version, etc.
  • Parse and convert binary xml file to text
  • Get classes from dex file
  • Get apk singer info

Get apk-parser

Get apk-parser from maven central repo:

<dependency>
    <groupId>net.dongliu</groupId>
    <artifactId>apk-parser</artifactId>
    <version>2.5.3</version>
</dependency>

From version 2.0, apk-parser requires java7. The last version support java6 is 1.7.4.

Usage

The ordinary way is using the ApkFile class, which contains convenient methods to get AndroidManifest.xml, apk info, etc.ApkFile need to be closed when no longer used. There is also a ByteArrayApkFile class for reading apk file from byte array.

1. Apk info

ApkMeta contains name(label), packageName, version, sdk, used features, etc.

try (ApkFile apkFile = new ApkFile(new File(filePath))) {
    ApkMeta apkMeta = apkFile.getApkMeta();
    System.out.println(apkMeta.getLabel());
    System.out.println(apkMeta.getPackageName());
    System.out.println(apkMeta.getVersionCode());
    for (UseFeature feature : apkMeta.getUsesFeatures()) {
        System.out.println(feature.getName());
    }
}
2. Get binary xml and manifest xml file
try (ApkFile apkFile = new ApkFile(new File(filePath))) {
    String manifestXml = apkFile.getManifestXml();
    String xml = apkFile.transBinaryXml("res/menu/main.xml");
}
3. Get dex classes
try(ApkFile apkFile = new ApkFile(new File(filePath))) {
    DexClass[] classes = apkFile.getDexClasses();
    for (DexClass dexClass : classes) {
        System.out.println(dexClass);
    }
}
4. Get Apk Sign info

To get apk signer certificate info and other messages, using:

try(ApkFile apkFile = new ApkFile(new File(filePath))) {
    List<ApkSigner> signers = apkFile.getApkSingers(); // apk v1 signers
    List<ApkV2Signer> v2signers = apkFile.getApkV2Singers(); // apk v2 signers
}
5. Locales

Apk may have different info(title, icon, etc.) for different regions and languages——or we can call it Locale. If locale is not set, the default "en_US" locale( Locale.US) is used. You can set one preferred locale by:

try (ApkFile apkFile = new ApkFile(new File(filePath))) {
    apkFile.setPreferredLocale(Locale.SIMPLIFIED_CHINESE);
    ApkMeta apkMeta = apkFile.getApkMeta();
}

Apk parser will find best match languages with locale you specified.

If locale is set to null, ApkFile will not translate resource tag, just give the resource id. For example, the title will be something like '@string/app_name' instead of the real name.