---
title: "Android app requirements"
description: "Learn about the requirements and testing of apps for Android payment terminals."
url: "https://docs.adyen.com/point-of-sale/android-terminals/app-requirements"
source_url: "https://docs.adyen.com/point-of-sale/android-terminals/app-requirements.md"
canonical: "https://docs.adyen.com/point-of-sale/android-terminals/app-requirements"
last_modified: "2026-03-17T11:09:00+01:00"
language: "en"
---

# Android app requirements

Learn about the requirements and testing of apps for Android payment terminals.

[View source](/point-of-sale/android-terminals/app-requirements.md)

On your Android payment terminal, you can install and use Android apps. These apps must meet certain requirements, because it is critical that the terminals remain secure.

This page provides an overview of:

* The requirements your Android apps must meet with regard to specifications, allowed permissions, restrictions, and (if applicable) WebView versions.
* How you can test your Android apps.

## App specifications

Make sure that your app meets the following specifications with regard to APK file size, operating system and SDK version, app version, and native code.

* **APK file size**:\
  To distribute the app to your terminals, we need to have the app's Android Package (APK). The maximum file size of the APK is:

  * 200 MB for the live environment.
  * 700 MB for the test environment.

* **Operating system** and **SDK version**:\
  The app must run on a specific Android version, and the *AndroidManifest.xml* that is included in the APK must have a [`minSdkVersion` ](https://developer.android.com/guide/topics/manifest/uses-sdk-element#min)field. This field specifies the minimum API level required for your app to run, and allows us to verify that your app is supported on the payment terminal.\
  For example, AMS1 running on Android 10 will support `minSdkVersion` **29** or earlier, but not `minSdkVersion` **30** and later.\
  The required Android version and minimum SDK version depend on the terminal model and region, as indicated in the following table.

  ![](/user/themes/adyen/images/illustrations/warning.svg) **Work in progress**. Currently not all models are available in all regions.\
  You can check terminal availability for your region in your live [Customer Area](https://ca-live.adyen.com/).

  | Terminal     | Region                                     | OS version | `minSdkVersion` | `Build.MODEL`      | CPU architecture |
  | ------------ | ------------------------------------------ | ---------- | --------------- | ------------------ | ---------------- |
  | AMS1         | AU/NZ, BR, EU/UK, JP, SG/HK/MY, UAE, US/CA | Android 10 | SDK 29          | `AMS1`             | ARMv7            |
  | S1E2L        | AU/NZ, BR, EU/UK, JP, SG/HK/MY, UAE, US/CA | Android 10 | SDK 29          | `S1E2L` / `S1E2-L` | ARM64            |
  | S1E4Pro      | AU/NZ, EU(except Germany)/UK, UAE, US/CA   | Android 13 | SDK 33          | `S1F4 PRO`         | ARM64            |
  | S1F2         | EU/UK, SG/HK/MY, UAE                       | Android 9  | SDK 28          | `Saturn1000F2`     | ARMv7            |
  | S1F2 Barcode | EU/UK, SG/HK/MY, UAE                       | Android 9  | SDK 28          | `Saturn1000F2`     | ARMv7            |
  | S1F4Pro      | AU/NZ, EU/UK, JP, SG/HK/MY, UAE, US/CA     | Android 13 | SDK 33          | `S1F4 PRO`         | ARM64            |
  | S1U2         | AU/NZ, EU/UK, JP, SG/HK/MY, UAE, US/CA     | Android 10 | SDK 29          | `S1U2`             | ARMv7            |
  | SFO1         | EU/UK, US/CA                               | Android 13 | SDK 33          | `SFO1`             | ARM64            |

* **App version** :\
  The [`versionCode` ](https://developer.android.com/studio/publish/versioning)of every release of your app in the Customer Area must be unique.

* **Native code** :\
  Apps that use native code (NDK) must include libraries that match the payment terminal's CPU architecture.

  * ARM32 (ARMv7) payment terminals support apps using `armeabi-v7a` or `armeabi` ABIs.
  * ARM64 payment terminals support apps using `arm64-v8a` ABI.

  It is possible to build a single Android app that supports both ARM32 and ARM64 architectures. For more information refer to the official [Android documentation](https://developer.android.com/ndk/guides/abis).

## Allowed permissions

To keep the payment terminals as secure as possible, we allow only a carefully chosen set of app permissions. These permissions may differ from those on other Android devices that the app is deployed to.\
These are the allowed app permissions:

| Permission                   | Description                                                                                                                                                                            |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ACCESS\_BACKGROUND\_LOCATION | Allows access to location in the background.                                                                                                                                           |
| ACCESS\_COARSE\_LOCATION     | Allows access to approximate location.                                                                                                                                                 |
| ACCESS\_FINE\_LOCATION       | Allows access to precise location.                                                                                                                                                     |
| ACCESS\_MEDIA\_LOCATION      | Allows access to any geographic locations persisted in the user's shared collection.                                                                                                   |
| ACCESS\_NETWORK\_STATE       | Allows access to information about networks.                                                                                                                                           |
| ACCESS\_WIFI\_STATE          | Allows access to information about Wi-Fi networks.                                                                                                                                     |
| BATTERY\_STATS               | Allows the app to collect battery statistics.                                                                                                                                          |
| BLUETOOTH                    | Allows the app to connect to paired Bluetooth devices.                                                                                                                                 |
| BLUETOOTH\_ADMIN             | Allows the app to discover and pair Bluetooth devices.                                                                                                                                 |
| BROADCAST\_STICKY            | Allows the app to broadcast sticky intents.                                                                                                                                            |
| CAMERA                       | Allows access to the camera device.                                                                                                                                                    |
| FLASHLIGHT                   | Deprecated flashlight permission - Covered by CAMERA.                                                                                                                                  |
| FOREGROUND\_SERVICE          | Allows the app to use Service.startForeground.                                                                                                                                         |
| GET\_ACCOUNTS                | Allows access to the list of accounts in the Accounts Service.                                                                                                                         |
| INTERNET                     | Allows the app to open network sockets.                                                                                                                                                |
| READ\_EXTERNAL\_STORAGE      | Allows the app to read from external storage.                                                                                                                                          |
| READ\_PHONE\_STATE           | Allows read-only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device. |
| RECEIVE\_BOOT\_COMPLETED     | Allows the app to receive the Intent.ACTION\_BOOT\_COMPLETED that is broadcast after the system finishes booting.                                                                      |
| RECORD\_AUDIO                | Allows the app to record audio.                                                                                                                                                        |
| SET\_ALARM                   | Allows the app to broadcast an Intent to set an alarm for the user.                                                                                                                    |
| USE\_BIOMETRIC               | Allows the app to use device-supported biometric modalities.                                                                                                                           |
| USE\_FINGERPRINT             | This permission was deprecated in API level 28. Apps should request USE\_BIOMETRIC instead.                                                                                            |
| VIBRATE                      | Allows access to the vibration feature.                                                                                                                                                |
| WAKE\_LOCK                   | Allows using PowerManager WakeLocks to keep the processor from sleeping or the screen from dimming.                                                                                    |
| WRITE\_EXTERNAL\_STORAGE     | Allows the app to write to external storage.                                                                                                                                           |

If your app includes a permission that is not on the preceding list, the app will be marked as invalid when you upload it.

## Restrictions

Android payment terminals come with certain limitations that you need to take into account:

* Launcher apps with the [CATEGORY\_HOME](https://developer.android.com/reference/android/content/Intent#CATEGORY_HOME) intent are not allowed.
* In the *AndroidManifest.xml*, the [testOnly](https://developer.android.com/guide/topics/manifest/application-element#testOnly) flag is not allowed.
* [Creating your own accessibility service](https://developer.android.com/guide/topics/ui/accessibility/service) is not allowed.
* There is no debug mode on the terminal.
* The terminals do not have a browser installed.
* The terminals do not have Google Play services installed.
* Downgrading the version of an app you installed is not allowed. You can either upgrade the version of your app or uninstall it.
* Apps must not request the `android.permission.BIND_DEVICE_ADMIN` permission.

## WebView versions

If you build your app as a [webapp running with WebView](https://developer.android.com/develop/ui/views/layout/webapps/webview), make sure the app is compatible with the following WebView versions that our terminals support. To check your terminal's Android version, refer to the [Android terminal model overview](/point-of-sale/android-terminals#terminal-models).

To check what WebView version is currently running on your terminal, go to **Settings** > **Device info**.

| Terminal software version | Android 13 WebView version | Android 10 WebView version | Android 9 WebView version |
| ------------------------- | -------------------------- | -------------------------- | ------------------------- |
| 1.120 or later            | 101.0.4951.61              | 135.0.7049.38              | 135.0.7049.38             |
| 1.114 or later            | 101.0.4951.61              | 130.0.6723.86              | 130.0.6723.86             |
| 1.109 or later            | 101.0.4951.61              | 91.0.4472.88               | 91.0.4472.88              |
| 1.108 or earlier          | (not available)            | 74.0.3729.186              | 91.0.4472.88              |

To request a specific WebView version, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other).

## Debug and test

For security reasons, we cannot enable USB debugging via Android Debug Bridge (adb) on our payment terminals. Therefore, it is not possible to debug your application directly on the terminal.

1. To debug your Android app, install the app on a regular (non-payment) Android device that supports USB debugging, and debug the app using adb.

2. Upload the app to us, install the app on a test terminal, and carry out integration tests by sending Terminal API requests to the terminal through local or cloud communications.

   If a bug occurs, you can ask our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to check the logs from the terminal.

3. For final integration testing, repeat the previous step using your live Customer Area and a live terminal.

## Next steps

[Deploy apps to your terminals](/point-of-sale/android-terminals/deploy-apps)

[Upload apps to Adyen and make them available on your Android payment terminals.](/point-of-sale/android-terminals/deploy-apps)
