Topic
This article describes how to upload custom Android Package Kit (APK) files to Android MDM policies and manage APK files in the NinjaOne APK library.
Environment
NinjaOne Mobile Device Management (MDM)
Description
This article is part of the NinjaOne MDM: Android Application Management article suite. It covers navigating to application management settings, configuring policy-level application options, working with the Managed Applications table, configuring kiosk settings, and setting persistent preferred activities. Refer to NinjaOne MDM: Android Application Management for more information.
For information about adding Google Play Store, system, private, or web applications, refer to NinjaOne MDM: Adding, Editing, and Removing Android Applications.
Add Custom App APKs
You can upload custom apps via APK files directly to an Android MDM policy. To manage custom APK files in a centralized library and apply them across multiple policies without re-uploading, refer to the Managing the APK Library section of this article.
The NinjaOne agent must be version 1.3.5 or later for APK deployment to succeed.
Select a topic to continue:
- On the Android MDM policy's configuration page, navigate to Management → Managed Applications.
- Click Add apps, then select Upload application from the drop-down menu.

The Upload application window will open. Configure the following settings.
Option Description Android connection This optional field enables you to specify the Android Enterprise connections that should receive the APK installation.
- Only the technicians attached to the connection specified will be able to view and manage the app.
- Leave this field blank to allow APK installation to your full Android MDM ecosystem.
Allow user uninstall Decide if the device end user is able to uninstall the app. Upload an application Click this button, then navigate to the APK file's location to upload it to NinjaOne. Name Enter an optional display name, which will appear in the Android MDM policy's Applications list. Publisher Enter an optional publisher name, which will appear in the Android MDM policy's Applications list. Default permission policy Select the required behavior when the app requests user permission:
- Prompt: The device asks the user if the app should allow or deny the permission.
- Grant: The device automatically approves the permission request.
- Deny: The device automatically denies the permission request.
Delegated scope access grants Android apps can have additional delegation scopes, letting applications install certificates, access managed configurations, block uninstallation, activate system apps, and more. Use the drop-down menu to select from the following:
- Certificate installation and management
- Managed configurations management
- Blocking uninstallation
- Permission policy and permission grant state
- Package access state
- Enabling system apps
Managing the APK Library
The APK library is a centralized repository for custom APK files. You can upload, edit, and override APKs from the library and apply them across multiple Android MDM policies without re-uploading files at the policy level. Changes you make in the APK library propagate automatically to all associated policies and device-level overrides.
The policy-level Upload application workflow described in the Add Custom App APKs section of this article and the APK library are separate workflows. Use the APK library when you need to manage an APK across multiple policies from a single location.
Navigating to the APK Library
To access the APK library, navigate to Administration → Apps → Installed → NinjaOne MDM Android and click APK library.

The APK library table lists all uploaded APK files. Each row displays the app's name, package name, version, publisher, Android connection, status, and upgrade status. You can add or remove columns by clicking the Actions icon, and rearrange columns by dragging them to new positions.
If NinjaOne cannot retrieve an APK's metadata, the affected fields in the row appear as - and an error indicator appears on the row. Hover over the error indicator to view the error details. Reload the table to request the metadata again.
APK Scanning Status
NinjaOne scans each APK you upload for security threats. The Status column in the APK library displays the current scan state for each file. Status changes appear in real time in the APK library and are visible only to the admin who triggered the upload or edit.
| Status | Description |
|---|---|
| Ready | The scan completed successfully. The APK is available for deployment. |
| Failed processing | The scan failed. The APK remains in the library but cannot be deployed to policies. |
To filter the APK library table by scan status, click the filter control above the table and select the status values you want to display.

Adding an APK to the Library
Follow these steps to upload a new APK to the APK library.
APK uploads support files up to 15 GB. Support for files between 15 GB and 25 GB is available behind a feature flag; uploads in this size range do not require APK scanning.
- In the APK library, click Upload.
- In the Upload an .apk file window, click Upload file.
- Navigate to the file on your system and click Open.
- Enter any of the following information that NinjaOne MDM requires. When finished, click Save.
| Option | Description |
|---|---|
| Android connection | Select the Android Enterprise connections that should have access to this APK. Leave this field blank to make the APK available across your full Android MDM ecosystem. Only users attached to the specified connection can view and manage the app. When you update this field later, NinjaOne automatically updates all associated policies and device-level overrides to reflect the change. |
| Name | Enter an optional display name. This name appears in the APK library and in any policy's Applications list where the APK is applied. |
| Publisher | Enter an optional publisher name. This name appears in the APK library and in any policy's Applications list where the APK is applied. |
| Default permission policy | Select the required behavior when the app requests user permission:
|
| Allow user uninstall | Decide if the device end user is able to uninstall the app. |
| Delegated scope access grants | Android apps can have additional delegation scopes, letting applications install certificates, access managed configurations, block uninstallation, activate system apps, and more. Use the drop-down menu to select from the following:
|
After you save, NinjaOne begins scanning the APK. The APK's status changes to Scanning until the scan is complete. NinjaOne records an activity entry when the upload succeeds or fails.
If the APK contains unrecognized permission names, NinjaOne displays a warning but allows the upload to complete. You can proceed with installation without interruption.
Editing an APK in the Library
You can upload a new version of an existing library APK to replace it. NinjaOne applies the updated file to all associated policies and device-level overrides automatically.
- In the APK library, click the Actions menu next to the APK you want to update, then click Edit.

- In the edit window, upload the replacement APK file and update any settings you want to change. When finished, click Update.
NinjaOne adds the updated APK information to all associated policies and device-level overrides and records an Activities feed entry for the edit result.
To update an APK's Android connection assignments, edit the APK in the library and change the Android connection field. NinjaOne automatically updates all associated policies and device-level overrides to reflect the change.
Overriding an APK
The override feature replaces one library APK with another version already in the library, across all associated policies and device-level overrides simultaneously. Use this workflow when you want to swap an APK version without uploading a new file.
- In the APK library, click the Actions menu next to the APK you want to replace, then click Override.
- In the override window, select the replacement APK from the library, then click Confirm.
The override window displays only APKs whose package name matches the APK you are replacing.
NinjaOne removes the original APK and updates all associated policies and device-level overrides to use the replacement. NinjaOne records an activity entry that lists the policies and device overrides that were updated.
Filtering the APK Library
You can filter the APK library table to narrow the list of APKs displayed. Click the filter control above the table and select a filtering category. You can filter APKs by:
- Upgrade status
- Policy
- Package name
APK Library Activity Log
The APK library includes an activity log that records events for each APK. To view the activity log for a specific APK, click the Actions menu next to the APK, then click Details.
The activity log records the following event types:
- Upload success and upload failure
- Scan complete, including results where the scan status is Suspicious
- Edit success and edit failure
- Policy and device override updates that result from an override or Android connection assignment change
- APK deletion
Deleting an APK from the Library
You can delete APKs from the library when they are no longer needed.
- If the APK is assigned to one or more policies or device-level overrides, NinjaOne displays the affected policies and overrides before completing the deletion.
- Deleting the APK removes it from all associated policies and node overrides and records an activity entry logging the filename.
- You must have update permissions on all referenced policies and nodes to complete the deletion.
Deleting an APK from the library permanently removes the file from storage. You cannot undo this action.
Procedure
- In the APK library, click the Actions menu next to the APK you want to delete, then click Delete.
- NinjaOne prompts you to confirm the deletion. Click Yes to complete the action. NinjaOne will remove the APK from the library and record an activity entry logging the filename that was deleted.