This article details a method to install APKS files via sideloading them in a StageNow profile . APKS files are split APK files containing multiple component files which are combined into a single file. More and more applications posted on Play are in this format so the use of this method is expected to increase significantly over time
The traditional way to sideload an application without using Play is to create a single APK created via a backup utility such as ‘App Backup and Restore’ . This has worked previously for almost all apps posted on Play . Recently we noticed that some apps backed up this way will either fail install via ADB with an error such as ‘Failure [INSTALL_FAILED_VERIFICATION_FAILURE]’ or will install and then fail without an error when run on the device.
The reason for this is that the app has been split into multiple APK’s ( https://developer.android.com/studio/build/configure-apk-splits , source code here: https://forum.xda-developers.com/android/software-hacking/guide-apk-bundle-installation-t3934631 ) so the single APK contains only part of the complete app. Other Enterprise apps which are in the APKS format include the following:
SumUp Payment Client https://play.google.com/store/apps/details?id=com.kaching.merchant&hl=en
RawBT Print Driver
Taking the Waitrose app above as an example , we can compare the size of the APK file created by the ‘App Backup and Restore’ utility with the APKS file created by an equivalent Split APK backup utility (
Split APKs Installer (SAI) https://play.google.com/store/apps/details?id=com.aefyr.sai )
The APKS file is almost double the size of the single APK and contains the missing parts of the app which are required in order to allow it to install and run correctly when sideloaded.
Using the APKS file, we can install the full application via an unofficial utility developed by James Swinton (Zebra EMEA) named ApksInstaller. This utility uses the Google PackageInstaller API (https://developer.android.com/reference/android/content/pm/PackageInstaller ) to install the APKS file and has an intent inferface so that it can be included in a StageNow profile for installation of any APKS file.
For demonstration , the internet-hosted StageNow package which installs the Waitrose APKS via this utility is provided below . Scan this barcode on a Zebra device with a pre-configured internet connection to test .
Note that a couple of manual confirmations are required during installation for permissions which are not able to be pre-granted as shown in the screenshots below:
Enable Allow from this source
APKS install in progress
The XML required to launch the APKS installer app is as follows:
<characteristic version="4.3" type="Intent">
<parm name="Action" value="StartActivity" />
<parm name="ActionName" value="com.zebra.jamesswinton.splitapkpackageinstaller.INSTALL_PACKAGE" />
<parm name="Package" value="com.zebra.jamesswinton.apksinstaller" />
<parm name="Class" value="com.zebra.jamesswinton.apksinstaller.MainActivity" />
<parm name="ExtraType" value="string" />
<parm name="ExtraName" value="apks_path" />
<parm name="ExtraValue" value="/sdcard/Waitrose_com,waitrose,groceries_2,2,3,2234.apks"/>
The ExtraValue specifies the path and filename of the APKS file to install. The APKS installer utility is attached to this blog and also available here: http://zebra.airsetup.com/2020/apks_installer/APKSInstaller.apk . Note that this utility is keyed to Zebra hardware and will not run on other manufacturer’s devices. Full XML used in the Waitrose sample profile is available here: http://zebra.airsetup.com/2020/apks_installer/waitrose.xml