System compatibility
Nutrient runs on Android devices with:
-
Android API level 21 or higher.
-
32-bit or 64-bit ARM (armeabi-v7a with NEON / arm64-v8a) or 32-bit or 64-bit Intel x86 CPU.
For development, you’ll need:
-
The latest stable version of Android Studio (or any other editor/IDE/build chain that supports Gradle).
-
To set your
targetSdkVersion
to 34. -
We recommend building your Android apps using Android Gradle plugin 8.2.0 or higher.
AndroidX support
Starting with version 5.1 of Nutrient Android SDK, we’re using AndroidX instead of the support library. This means that your app also needs to be updated to use AndroidX. You can check out our migration guide here.
Supported CPU architectures
Nutrient includes native libraries for the following Android ABIs:
-
32-bit ARMv7 (
armeabi-v7a
) -
64-bit ARMv8 (
arm64-v8a
) -
32-bit x86 (
x86
) -
64-bit x86 (
x86-64
)
This ensures the best optimization and performance on most Android devices currently sold. When your app is installed on a device, the appropriate native binary is unpacked from the APK and used.
If your app contains any other native libraries, you’ll have to make sure you only have armeabi-v7a
, arm64-v8a
, x86
, and x86-64
versions of them as well. That is due to Android demanding that all loaded native libraries be built for the same architecture. For example, if the first native library loaded is armeabi-v7a
, Android will only look for armeabi-v7a
libraries on all System.loadLibrary()
calls after that. If it doesn’t find that exact architecture, it’ll throw the java.lang.UnsatisfiedLinkError
exception.
If your other native libraries are missing an architecture, you should remove that architecture from Nutrient as well — either by stripping away the architecture or by using ABI splits.
Minimum required architecture
ARMv8 devices can load and run both arm64-v8a
and armeabi-v7a
binaries. x86 devices can load and run x86
and armeabi-v7a
binaries via the libhoudini
layer. This means that if you’re really pressed for binary size, you can ship only armeabi-v7a
native libraries and your application will still work on ARMv7, ARMv8, x86, and x86-64 devices.
This will come at a cost of general performance — you can expect about a 20-30 percent performance hit when rendering on modern ARMv8 devices, and a more severe 30-60 percent hit on x86 devices.
For more information, read about stripping away architectures.
Other architectures
Since every architecture shipped adds about 5–10 MB to a final application’s APK, we’re shipping the bare minimum for best performance.
-
armeabi
— ARMv5/6 are old architectures that haven’t been used in years, since Android 2.3, and due to limitations of architecture, Nutrient rendering was just too slow to be usable. This is why we don’t ship this architecture at all. All new devices (Android 4.0 or newer) support at least ARMv7 architecture with NEON. Support forarmeabi
was removed within the NDK 17. -
mips
andmips64
— MIPS is exclusively used for some rare embedded uses of Android. There has been no Android phone or tablet with a MIPS core released in general market.