App Manager

Note: To display only the features present on a particular device, select one or more filters from the SmartDocs bar below.

EMDK For Android - 7.3

Overview

Application Manager (AppMgr) administers the user applications on the device. It can be used to programmatically install, uninstall, upgrade and turn on (or off) the ability to launch an application, all with no need for user interaction. AppMgr also can designate an application as the Default Launcher (invoked when pressing the HOME Key), and can perform other tasks related to the management of applications.

On consumer Android devices, app management generally requires the user to interact with a management UI presented on the device. For corporate scenarios involving management by an Enterprise Mobility Management (EMM) system (sometimes referred to as mobile device management, or MDM), user consent or approval might not be desired as they potentially limit a company's ability to fully control the user apps installed on a device. AppMgr provides such control.

When considering the capabilities of AppMgr, it is important to understand the difference between System apps and User apps. System applications are built into the device and always by default. User applications are not built in, and must be installed before use. Some AppMgr functions apply only to System apps, some only to User apps, and some to both. Each function identifies the class of the app(s) to which it applies.

Main Functionality

  • Install, Uninstall and Upgrade User apps (with no device user involvement)
  • Set an app to be launched by pressing the HOME key
  • Turn On/Off the ability of an app to Launch (Whitelisting and Blacklisting)
  • Clear the Recent Application List
  • Clear an app's cache (which stores the app's temporary files)
  • Add/remove apps from Battery Optimization exemption list (see below)
  • Enable all GMS apps
  • Disable all GMS apps that are safe to disable
  • Disable GMS apps in set groups
  • Enable/Disable access to app info
  • Reserve/Unreserve an Android unique ID (UID)
  • Enable/Disable individual app feature(s)
  • Enable/Disable background data individually by app

GMS Restricted Mode: In response to security concerns, Zebra has implemented GMS Restricted Mode, which allows administrators to disable some or all GMS apps deemed "safe to disable" without interfering with normal device operations. See GMS Manager for more information.

App Permissions

The evolving security practices employed by Android have changed the user experience in Android 10 to give greater control to the device user. Such changes could impact the enterprise use cases of Zebra customers. To implement the necessary functionality while maintaining device security, MX 10.0 provides the IT administrator with the ability to silently (without device-user interaction) grant application runtime permissions typically used by remote management systems. For some of the Actions executed by this CSP, including Install and Upgrade, apps must be targeted at Android API level 23 (or newer) to be silently granted runtime permissions on devices running Android 10 or later.

Battery Optimization

The App Manager allows one or more apps to be added to the Battery Optimization "exemption whitelist." While running, apps on this list prevent the device from entering Doze and App Standby power saving modes, thereby preserving their ability to continue functioning and/or providing services. Doze mode conserves battery power by deferring background CPU and network activities when the device is idle. App Standby defers background network activity for apps with which the user has not recently interacted. By default, all non-system apps are subject to Doze and App Standby modes unless added to the whitelist.

For more information, refer to the Android Developer site.

Virtual Keyboards

Virtual keyboards (aka soft input panels) are enabled and disabled by referenceing their package name with the desired AppMgr Action. Some of the most common keyboards are listed below:

  • AI Type - com.aitype.android.p
  • AnySoftKeyboard - com.menny.android.anysoftkeyboard
  • AOSP - com.android.inputmethod.latin
  • Chrooma - com.gamelounge.chroomakeyboard
  • Fancykey - com.pinssible.fancykey
  • Fleksy - com.syntellia.fleksy.keyboard
  • GBoard - com.google.android.inputmethod.latin
  • Ginger - com.gingersoftware.android.keyboard
  • GO - com.jb.emoji.gokeyboard
  • Grammarly Keyboard - com.grammarly.android.keyboard
  • Hacker’s keyboard - org.pocketworkstation.pckeyboard
  • Minuum - com.whirlscape.minuumfree
  • Multiline O Keyboard - kl.ime.oh
  • OpenBoard - org.dslul.openboard.inputmethod.latin
  • Simple Keyboard - rkr.simplekeyboard.inputmethod
  • Swiftkey - com.touchtype.swiftkey
  • Vysor - com.koushikdutta.vysor

Action

Used to enter the Action to perform on an app or app-related setting or action. Actions can apply only to System apps, only to User apps, or to both (as noted in the table below).

Notes

  • IMPORTANT: See Overview section regarding changes to Android 10 permissions.
  • Virtual keyboards (aka soft input panels) are enabled and disabled in the same way as apps, by referenceing their package name with the desired AppMgr Action. Disabled keyboards do not appear for selection in the Android Settings panel. See the Overview section for a list of virtual keyboards.
  • On some older devices, "Protected" Apps remain on the "Recent Apps" list after the list has been cleared using the "ClearRecentApps" Action.
    See Protected List Action parameter for more information.
  • When persisting the DisableGMSApps Action across an Enterprise Reset, the Action MUST be preceded by a bypass of the Android Setup Wizard to prevent unpredictable behavior. See Power Manager for more information.
  • EnableGMSApps and DisableGMSApps Actions are supported only on SDM660-platform devices, which includes (but is not limited to):
    • ET51
    • ET55
    • L10
    • MC93
    • PS20
    • TC52
    • TC57
    • TC72
    • TC77
  • IMPORTANT: If upgrading a device to gain access to "GMS Restricted" mode (implemented in MX 8.3 and later), the upgrade and related actions must be performed in the following order:
    • If apps were previously disabled using the "DisableGMSApps" App Manager Action, execute the "EnableGMSApps" App Manager Action.
    • Perform the device upgrade with a package containing MX 8.3 or later.
    • Perform "Restricted" GMS Manager Action.
    • Zebra recommends Zebra recommends restarting the device following any Action that enables GMS restrictions.
    • If desired, use Persist Manager to safeguard the XML on the device.
      NOTE: It is not possible to transition a device to a new OS and to implement GMS Restricted mode with the same XML profile.

See GMS Manager for more information about GMS Restricted.

Note: For Install and Upgrade Actions, apps must be targeted at Android API level 23 (or newer) to be silently granted runtime permission on devices running Android 10 or later.

Parm Name: Action

Option Name Description Note Requires
0 Do nothing This value (or the absence of this parm from the XML) will cause no change to applications on the device.

MX: 4.1+

1 Install Installs the user app contained within an .apk file in the specified path on the device. If the requested app cannot be installed, an error is returned in the Result XML document. Note- Attempts to install an app with the same Package Name as one already installed on the device result in an error in the Result XML. To replace an app already installed on the device with a different version with the same Package Name, use the Upgrade action (option 3).

OSX: 1.0+

MX: 4.2+

2 Uninstall Removes the User app with the specified Package Name from the device. If the requested app cannot be found or removed, an error is returned in the Result XML. Note- When an app is removed, data stored in sandbox areas owned by that app also are removed. If the app requiring such data is reinstalled, the data must be recreated.

OSX: 1.0+

MX: 4.1+

3 Upgrade Upgrades the User app contained within an .apk file in the specified path with the same Package Name on the device. If the requested app cannot be found or upgraded, an error is returned in the Result XML. To install an application that is not already installed on the device, use the "Install" action (option 1). Note- When an application is upgraded, the data for that application is maintained. Note- In devices running Android Jelly Bean, an Upgrade can replace any version of an app with any other version of the same app. In devices running Android KitKat or higher, an Upgrade can replace only apps with a numerically greater version number.

OSX: 1.0+

MX: 4.1+

4 SetDefaultLauncher Sets a System or User app with the specified Package Name as the new default launcher. The specified app must already be installed on the device and generally should be designed to be a Android Launcher according to Android specifications. If no app with the specified Package Name is installed on the device, an error is returned in the Result XML document.

OSX: 1.3+

MX: 4.1+

5 EnableApplication Enables the System app with the specified Package Name to be launched. If the Package Name does not exist on the device, an error is returned in the Result XML document.

MX: 4.2+

Android API: 1+

6 DisableApplication Prevents the System app with the specified Package Name from being launched. If Package Name does not exist on the device, an error is returned in the Result XML document.

MX: 4.2+

Android API: 1+

7 ClearRecentApps Clears the Android Recent Applications List, which otherwise would allow a user to see and launch recently used apps (Protected Apps excluded. See Note above).

MX: 4.2+

Android API: 16+

8 LaunchApplication Allows a System or User app to be launched by its visible Name rather than by its package name (not case-sensitive). This refers to the app name as it appears in Launcher, App Drawer, Application Manager or app_name field of the strings.xml file (i.e. "Calculator"). To use this value, the app and its icon or widget must be visible in the Launcher screen and launchable with its main activity using that icon or widget. If the app is not present, does not have an icon or widget, cannot be launched using its main activity or contains only services and receivers, an error is returned in the Result XML document.

MX: 5.1+

Android API: 1+

9 BatteryOptimization On devices running Nougat (and higher), all apps by default allow the device to enter Doze Mode to maximize battery life. The "BatteryOptimization" parameter allows one or more apps to be added to (or if previously added, removed from) the "Doze Mode exemption" list, which determines whether the device can enter a power saving mode while the app is running.

MX: 7.0+

Android API: 23+

10 ClearApplicationCache Erases the application cache, which stores an app's temporary files. This is the functional equivalent of pressing the "Clear Cache" button in the Android App Manager, accessed through the Settings panel.

MX: 8.0+

Android API: 24+

11 EnableGMSApps Enables all GMS applications and services on the device, reversing any prior Action(s) to disable them. Subsequent DisableApplication Actions are effective.

OSX: 8.1+

MX: 8.0+

Android API: 24+

12 DisableGMSApps Disables all GMS applications and services on the device (that are safe to disable) and removes their icons from the Android Launcher. Subsequent EnableApplication Actions are effective. SEE NOTES.

OSX: 8.1+

MX: 8.0+

Android API: 24+

13 ClearApplicationUserData Erases all data created by the app specified in the Package parameter.

OSX: 8.1+

MX: 9.1+

Android API: 24+

14 ReserveUID Reserves a unique Android user ID (UID) for an app never before installed or preserves the UID of one previously assigned.

OSX: 9.2+

MX: 9.2+

Android API: 28+

15 UnReserveUID Removes the reservation for a UID of an installed app.

OSX: 9.2+

MX: 9.2+

Android API: 28+

.apk Name

Used to enter the path and file name of the Android .apk file within the device file system from which to perform an app installation or upgrade.

IMPORTANT: An .apk file can be used only to Install or Upgrade a User app or to Upgrade a System app. Any application being installed from an .apk file is by definition a User Application since it was not built into the device.

For an Upgrade, the .apk file must be signed with the same developer certificate as the application it is intended to upgrade or an error will be returned in the Result XML document. A System application can be upgraded using only an .apk file produced by the same developer that produced the built-in System application. A System application that has been upgraded is considered a User app, but will have the same permissions as the version it replaced, allowing the new version to perform the same operations as the original System app. If data is cleared and upgrades are removed from such an app, the app reverts to its original built-in version and is once again considered a System app.

Input value rules:

  • String from 1-255 characters containing the full path and name of device-resident .apk file. For example: /storage/sdcard1/Herald.apk

Shown if: The Action is "Install" or "Upgrade"

Parm Name: APK

Requires:

  • OSX: 1.0+
  • MX: 4.2+

Package Name

Used to enter the Package Name(s) of one or more applications for the selected Action. Separate multiple Package Names using commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by finding it in the device.

Important: If a Package Name is specified incorrectly in a list, all names following that name are ignored.

Input value rules:

  • String from 1-255 characters containing a valid Package Name. For example: com.mycompany.mypackage.
  • Use commas to seperate multiple names

Shown if: The Action is "Uninstall" or "Set as Default Launcher" or "Enable Application" or "Disable Application" or "Clear Application Cache" or "Remove Application User Data" or "Reserve UID" or "Unreserve UID"

Parm Name: Package

Requires:

  • OSX: 1.0,1.3+
  • MX: 4.2+
  • Android API: 1+

Package Signature

Used to enter the name of the certificate file for signing the application(s) specified in the Package name parameter.

Input value rules:

  • String of at least 1 character containing a valid file name

Shown if: The Protected List Action is "Reserve Application UID"

Parm Name: PackageSignature

Requires:

  • MX: 9.2+

Application Name

Used to enter the Name of the application for the selected Action.

Note: To perform the above listed Actions on an application, the Name of that application can be specified instead of the Package Name. The Name is defined as the name that accompanies the application icon in the Android Launcher, App Drawer or Application Manager. This name also is specified in the app_name field of the strings.xml file.

Input value rules:

  • String from 1-255 characters
  • String containing the Name of the application as it appears in the Launcher, App Drawer, Application Manager or app_name field of the strings.xml file (i.e. "Calculator")
  • Application names are not case sensitive

Shown if: The Action is "Launch an application"

Parm Name: ApplicationName

Requires:

  • MX: 5.1+

Protected List Action

Used to add or remove apps from the Protected List, which allows apps to be exempted from certain constraints.

Note: On some devices, protected apps remain on the Recent Apps list after it has been cleared using the "ClearRecentApps" Action.

An app with its Package Name on the Protected List is allowed to:

  • Launch when no device user is logged in
  • Remain running when a device user logs out
  • Maintain a single copy of data accessible by all users, even if Multi-User Data Separation is enabled
  • Remain on the Recent Apps list after it has been cleared

Shown if: The Action is "Install" or "Uninstall" or "Upgrade" or "Upgrade" or "SetDefaultLauncher" or "EnableApplication" or "DisableApplication" or "ClearRecentApps" or "LaunchApplication"

Parm Name: ProtectedListAction

Option Name Description Note Requires
0 Do nothing This value (or the absence of this parm from the XML) will cause no change to the Protected List.

OSX: 1.2+

MX: 4.2+

1 AddAppToProtectedList Adds the specified app package name to the Protected List.

OSX: 1.2+

MX: 4.2+

2 RemoveAppFromProtectedList Removes the specified app package name from the Protected List.

OSX: 1.2+

MX: 4.2+

3 ClearProtectedList Removes all app package names from the Protected List.

OSX: 1.2+

MX: 4.2+

Protected List Package Name

Used to enter the Package Name(s) of the application to add or remove from the Protected List. Separate multiple names using commas. Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by finding it in the device.

Important: If a Package Name is specified incorrectly in a list, all names following that name are ignored.

Input value rules:

  • String from 1–255 characters containing one or more valid Package Names. For example: com.mycompany.myPackage
  • Use commas to separate multiple names. For example: com.mycompany.myPackage,com.mycompany.myOtherPackage

Shown if: The Protected List Action is "Add Application to Protected List" or "Remove Application from Protected List"

Parm Name: ProtectedListPackage

Requires:

  • OSX: 1.2+
  • MX: 4.2+

Access App Info

Used to allow blocking of access to App Info for all applications without blocking access to other parts of the Android Settings panel. By disabling App Info, the user is prevented from using App Info to interfere with the configured set of installed applications.

Since the AppMgr can control which applications are installed, it might be of concern that a device user can use the App Info section of the in-device Android Settings panel to impact an installed application. For example, a device user might terminate (Force Stop) an application, remove application data (Clear Data), or even Uninstall the application completely. If an MDM is being used to control the set of installed applications on a device, such activities by a device user might be undesirable.

Compounding the issue, the App Info can be reached from several places in the device UI other than the Android Settings panel. For example, App Info can be reached from the Recent Apps list or from a notification related to the application in the Notification bar.

To prevent device users from using App Info to alter the configured set of installed applications, it might be desirable to prevent the device user from accessing App Info altogether. Of course, AppMgr can be used to disable launching of the System Settings Menu application, prevents access to App Info. But that also prevents access to all other aspects of the Settings panel. A more targeted approach is to block only App Info.

Shown if: The Action is NOT "Battery Optimization"

Parm Name: AccessAppInfoAction

Option Name Description Note Requires
0 Do nothing This value (or the absence of this parm from the XML) causes no changes to device settings; any previously selected setting is retained.

OSX: 4.2+

MX: 4.2+

1 EnableAccessAllInfo Enables access to App Info for all applications on the device if access to the Android Settings panel application is enabled.

OSX: 4.2+

MX: 4.2+

2 DisableAccessAllInfo Disables access access to App Info for all application on the device.

OSX: 4.2+

MX: 4.2+

Prevent Doze Mode

DO NOT USE THIS PARAMETER if the desired behavior is to ALLOW Doze Mode. On devices running Nougat (and higher), all apps by default allow the device to enter Doze Mode to maximize battery life.

Used to enter one or more apps (by Package Name) to be added to the Doze Mode "exemption whitelist." While running, apps on this list prevent the device from entering power saving modes. To enter multiple Package Names, separate with commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by identifying it in the device. Doze Mode is controlled using the Power Manager CSP.

Input value rules:

  • String containing one or more Package Names. For example: com.mycompany.mypackage
  • Separate multiple names with commas

Important: If a name is specified incorrectly in a list, all names following that name are ignored.

Shown if: The Action is "Battery Optimization"

Parm Name: AddPackageNames

Requires:

  • MX: 7.0+

Allow Doze Mode

Used to enter one or more apps (by Package Name) to be removed from the Doze Mode "exemption whitelist." Apps not on list do not prevent the device from entering power saving modes. To enter multiple Package Names, separate with commas. Package Name(s) must be specified exactly, and can be acquired from the application developer, by extracting the Package Name from the .apk file or by identifying it in the device.

Input value rules:

  • String containing one or more Package Names. For example: com.mycompany.mypackage.
  • Separate multiple names with commas

Shown if: The Action is "Battery Optimization"

Parm Name: RemovePackageNames

Requires:

  • MX: 7.0+

App Feature

Used to control access to certain (supported) features on a device.

Shown if: The Action is NOT "Do Nothing"

Parm Name: AppFeature

Option Name Description Note Requires
1 Background Data Allows the selected app to communicate using background data.

MX: 9.3+

Android API: 8.0+

App Feature Action

This is the On/Off switch for features selected using the App Feature parameter or in the package selected using the App Feature Packages parameter.

Parm Name: AppFeatureAction

Option Name Description Note Requires
0 Do nothing This value (or the absence of this parm from the XML) causes no changes to device settings; any previously selected setting is retained.

MX: 9.3+

Android API: 26+

1 Turn On Enables the selected feature.

MX: 9.3+

Android API: 26+

2 Turn Off Disables the selected feature.

MX: 9.3+

Android API: 26+

App Feature Package Name(s)

Used to enter the name of the app package(s) on which to perform an App Feature Action. Separate multiple names using commas.

Input value rules:

  • String of at least 1 character containing the full path and name(s) of device-resident app package(s)
  • Separate multiple names using commas (i.e. packagename1,packagename2,packagename3)

Shown if: The Action is NOT "Do Nothing"

Parm Name: AppFeaturePackages

Requires:

  • MX: 9.3+
  • Android API: 8.0+

Examples

Install An Application


<!-- Silently install Clock.apk from the /enterprise/usr/persist folder -->
<wap-provisioningdoc>
    <characteristic version="4.2" type="AppMgr">
        <parm name="Action" value="Install" />
        <parm name="APK" value="/enterprise/usr/persist/Clock.apk" />
    </characteristic>
</wap-provisioningdoc>

Upgrade An Application


<!-- Silently upgrade Clock.apk from the /enterprise/usr/persist folder -->
<wap-provisioningdoc>
    <characteristic type="AppMgr" version="4.2" >
        <parm name="Action" value="Upgrade"/>
        <parm name="APK" value="/enterprise/usr/persist/Clock.apk"/>
    </characteristic>
</wap-provisioningdoc>

Disable An Application


<wap-provisioningdoc>
    <characteristic version="4.2" type="AppMgr">
        <parm name="Action" value="DisableApplication" />
        <parm name="Package" value="com.mypackagename" />
    </characteristic>
</wap-provisioningdoc>

Uninstall An Application


<wap-provisioningdoc>
    <characteristic version="4.2" type="AppMgr">
        <parm name="Action" value="Uninstall" />
        <parm name="Package" value="com.packagename" />
    </characteristic>
</wap-provisioningdoc>

Start An Application After Installing it


<wap-provisioningdoc>
    <characteristic version="4.2" type="AppMgr">
        <parm name="Action" value="Install" />
        <parm name="APK" value="/sdcard/myapp.apk" />
    </characteristic>
    <characteristic version="4.3" type="Intent">
        <parm name="Action" value="StartActivity" />
        <parm name="ActionName" value="android.intent.action.MAIN" />
        <parm name="Package" value="com.mypackage" />
        <parm name="Class" value="com.mypackage.myactivity" />
    </characteristic>
</wap-provisioningdoc>

Add apps to Battery Optimization list

    
    <wap-provisioningdoc>
    <characteristic type="AppMgr" version="7.0" >
        <parm name="Action" value="BatteryOptimization"/>
        <parm name="AddPackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
    </characteristic>
    </wap-provisioningdoc>

    // Response from AppMgr CSP on success: 

    <wap-provisioningdoc>
    <characteristic type="AppMgr" version="7.0" >
        <parm name="Action" value="BatteryOptimization"/>
        <parm name="AddPackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
    </characteristic>
    </wap-provisioningdoc>

Remove apps from Battery Optimization list

    
    <wap-provisioningdoc>
    <characteristic type="AppMgr" version="7.0" >
        <parm name="Action" value="BatteryOptimization"/>
        <parm name="RemovePackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
    </characteristic>
    </wap-provisioningdoc>

    // Response from AppMgr CSP on success: 

    <wap-provisioningdoc>
    <characteristic type="AppMgr" version="7.0" >
        <parm name="Action" value="BatteryOptimization"/>
        <parm name="RemovePackageNames" value="com.example.android.deviceowner, com.symbol.software.filexpa"/>
    </characteristic>
    </wap-provisioningdoc>

Clear Application Cache

    
    <wap-provisioningdoc>
    <characteristic type="AppMgr" version="8.0" >
        <parm name="Action" value="ClearApplicationCache"/>
        <parm name="Package" value="com.symbol.tool.stagenow"/>
    </characteristic>
    </wap-provisioningdoc>