Setting Android SDK versions

In the Clover device, your Android app's SDK version definition needs to be evaluated and tested to ensure device compatibility.

Minimum SDK

To ensure your app can be installed on all Clover devices, set the minimum SDK (minSdkVersion) to 17. However, if you want your app to be available on a select set of Clover devices, set the minSdkVersion of your app according to the following table.

Clover deviceMinimum SDK version
Station, Mobile, Mini (1st gen), Flex, Station 2018, Mini (2nd gen), Flex (2nd gen), Station Duo17
Mobile, Mini (1st gen), Flex, Station 2018, Mini (2nd gen), Flex (2nd gen), Station Duo19
Flex, Station 2018, Mini (2nd gen), Flex (2nd gen), Station Duo21
Station 2018, Mini (2nd gen), Flex (2nd gen), Station Duo25
Mini (2nd gen), Flex (2nd gen), Station Duo27

Compile SDK

The compileSdkVersion in your project's gradle file specifies the Android API level that the Gradle should use to compile your app. This means, your app can use the API features included in this API level and lower. This ultimately has no effect on the actual behavior of your application. You should set this to the highest API level that Google has made available, as listed on (https://developer.android.com/studio/releases/platforms). Using the highest available level ensures that all software libraries your project is using, compile successfully.

The actual APIs that can be used at runtime, are determined by the API level of the device upon which your app is running. For example, if a class or method was added to the Android SDK in API level 25, the device must be running an operating system that implements API level 25 for that API to be available. Attempting to use APIs that are greater than the current device offers, will fail. Please read (https://developer.android.com/training/basics/supporting-devices/platforms) for details.

Target SDK

Set your target SDK (targetSdkVersion) to the highest SDK level on which you have tested your app.

🚧

IMPORTANT

Clover supports apps with target SDK level 25 or lower. With SDK level 27, Android introduced the account access and discoverability policy, which explicitly requests access to Clover merchant accounts and disrupts the expected merchant flow.

To have your apps functioning correctly and be approved for publication on the Clover App Market, set the targetSdkVersion value to 25 or lower.

If you are using Android Studio to generate a signed APK for your app, you may receive an error message like

Error: Google Play requires that apps target API level 29 or higher. [ExpiredTargetSdkVersion]

To suppress this error, add the following code above the targetSdkVersion line in your app's build.gradle file:

// noinspection ExpiredTargetSDKVersion

The following table lists the maximum SDK version to test against for the different Clover devices.

Clover deviceTarget SDK version
Station17
Mobile/Mini (1st gen)19
Flex21
Station 201825
Mini (2nd gen)25
Flex (2nd gen)25
Station Duo25

If you develop on an emulator, set the target SDK version to the highest API level virtual machine on which you have tested. For a more detailed description of target SDKs, refer to the Android Developer documentation.

Target SDK informs Android which compatibility layers it must enable to ensure your app runs correctly. If you set your target SDK to a value greater than what you have tested, Android may disable a compatibility layer on which your app depends.

For each SDK level you want to support, review the Android behavior changes, code with the changes in mind, and test your app against them.

Example build files

Suppose you are developing an app for Station 2018. That device's runtime is 25, so you must test your code against that version and then also compile your application against it.

Your app's build.gradle file would need to include the following:

android {
  compileSdkVersion 31 // Update to a higher level if/when compilation fails with minCompileSdk error
  ...
  defaultConfig {
    minSdkVersion 17 //required minimum SDK for Clover apps
    targetSdkVersion 25 //API level used for testing
    ...
  }
  ...
}