XAPK, APKS and APKM: How to Install Split APKs on Android

XAPK, APKS and APKM files hold one app split into several APKs. What is in each, how to install them with App Manager or adb, and why “App not installed” appears.

Short answer: an .xapk, .apks or .apkm file is a ZIP archive holding one app that has been split into several APK files, sometimes with game data alongside. Android’s own installer can’t open it. Use an installer app that puts all the parts in at once, such as App Manager, which needs no root, or unzip the file and install the parts from a computer with adb install-multiple.

Why some apps come in pieces

Developers now publish to Google Play as an Android App Bundle, and Google generates optimized APKs “for each device configuration”. Since Android 5.0, a phone can install several of these as a single app:

  • one base APK, the only one whose manifest declares the whole app, with its services, permissions and so on;
  • configuration APKs, each holding the native code for one CPU type, the resources for one screen density, or one language. A phone downloads only the ones that match it.

Download sites that copy apps from Google Play end up with these pieces, so they pack them into one file, and each site has its own format.

XAPK, APKS and APKM

Extension Comes from Inside
.apks (bundletool) Google’s bundletool, which calls it an “APK set archive” A ZIP with a table of contents, toc.pb, and the APKs in splits/ and standalones/ folders
.apks (SAI) Apps exported with SAI, Split APKs Installer The APKs in what SAI calls “simply a renamed ZIP archive”; since SAI 3.10, also the app’s icon and SAI’s own meta.sai_v1.json (plus meta.sai_v2.json since 4.0). No table of contents
.xapk APKPure A base APK and split APKs, or an APK and an .obb game data file
.apkm APKMirror A base APK and a number of split APKs
  • APKMirror has supported split APKs since March 2020. It says that to install .apkm bundles “you will need APKMirror Installer”, which also takes .xapk and .apks files.
  • Older .apkm files were encrypted. According to App Manager’s changelog, APKMirror has since removed the encryption.
  • Two different .apks formats share one extension. To tell them apart, open the file as a ZIP: bundletool’s has a toc.pb at the top level, SAI’s doesn’t. The layout of bundletool’s comes from its source code; Google’s documentation doesn’t describe it.

Install on the phone with App Manager

App Manager is an open-source tool for managing installed apps. Its README lists “APKS, APKM and XAPK with OBB files” among the files it can install, and it needs no root for this.

  1. Download the file, then open it with App Manager from your browser or file manager.
  2. If it asks which splits to install, the base APK is always needed, plus the ones for your phone’s CPU type, screen density and language.
  3. The first time, Android asks you to allow App Manager to install unknown apps.

Leave App Manager’s Sign APK setting off. It re-signs the app before installing, which replaces the developer’s signature, so the developer’s own updates won’t install over it afterwards.

Other installers

  • Install with Options imports .xapk and .apkm files (since version 0.5.0) and .apks files (since 0.6.2). It works through Shizuku or root.
  • APKMirror Installer and APKPure’s app handle their own sites’ formats. Neither is open source, so we don’t host them.
  • SAI (Split APKs Installer) still turns up in many guides, but its last release, 4.5, came out on 25 February 2021, and its README says “SAI is kinda dead”. It can’t extract OBB files from an XAPK either. SAI also exports installed apps as .apks files of its own kind (see the table above).

Install from a computer with adb

  1. Unzip the file. If your computer won’t open it, rename it to end in .zip first.
  2. Install the base APK and the splits for your phone in one command, for example:
adb install-multiple base.apk config.arm64_v8a.apk config.xxhdpi.apk config.en.apk

The file names vary; use the ones in your archive. adb’s own help describes install-multiple as “push multiple APKs to the device for a single package and install them”. All the parts go into one install session, and if one fails, the whole install is abandoned.

For an .apks file made with bundletool, bundletool install-apks --apks=my_app.apks picks the parts for you: Google’s documentation says it deploys “the right combination of APKs from that set to a connected device”. It works only on bundletool’s own files, because it reads the table of contents. An .apks exported by SAI has none, so unzip it and use adb install-multiple instead.

Game data: OBB files

Some XAPK files from APKPure include an .obb file: extra game data too large for the APK. Android expects it in an exact place:

  • the folder Android/obb/<package name>/ in the phone’s shared storage;
  • a name like main.<version>.<package name>.obb, or patch. for a patch file.

Google’s documentation says these files must not be deleted, moved or renamed. Since Android 11, the system’s file picker can’t open Android/obb/ and the folders inside it, so an ordinary file manager may not be able to put the file there. On stock Android, an app that you’ve allowed to install unknown apps does get access to the OBB folders, according to Android’s source code, which is most likely why App Manager can place the file where a file manager can’t.

Why you see “App not installed”

  • You installed only the base APK. A base APK can be marked as needing its splits (Google’s bundletool adds such a mark), and Android then refuses it on its own with INSTALL_FAILED_MISSING_SPLIT. Where a base APK does install alone, APKMirror warns that the app will then “crash due to missing resources”.
  • The parts don’t match. Android requires every part to have “the exact same package name, version code, and signing certificates”. Parts from two versions, or from two different sources, won’t install together.
  • There is no part for your CPU. See arm64-v8a or armeabi-v7a.
  • The app is already installed from somewhere else, signed with a different key, or in a newer version. Android won’t update or downgrade it; see package conflicts.

Check the signature

As far as we can tell, the XAPK, APKS or APKM wrapper itself carries no signature: what is signed are the APKs inside. Unzip the file and check the base APK with apksigner verify --print-certs, as in our signature guide. Android itself refuses splits signed with a different certificate from the base.

On this site

Every app we host is a single .apk file, so none of this is needed for them: open the file and install it.

Apps in this guide

Sources