Is it safe to support only armeabi-v7a for Android 4 and above?

Issue

I have developed an app which is mostly in C++ and is compiled by NDK to .so libraries as usual. We know that native apps have to be build for each CPU architecture separately; So I have different so files for armeabi and armeabi-v7a. (I deliberately left out x86 and mips, since not many Android devices with these architectures are released.)

However, the size is very big and each so file takes about 90 MB of space and I want to reduce it.

I know I can leave out armeabi-v7a, because of backward compatibility, but in that case the app will run very slowly.

Considering the fact that my app supports only android ICS and above (minSdkVersion"14"), Can I safely remove armeabi and suppose that all of these new devices use armeabi-v7a? Or some of the devices may still use the old armeabi and not armeabi-v7a architectures?

Solution

The unmodified, original Android source for Android 4.0 and newer doesn’t support ARMv5/ARMv6 by default (but can be modified to build for ARMv5/ARMv6 – there are custom builds of it that run on ARMv6). I’m not sure if one can get an ARMv6 device certified compatible with such Android releases, or if it only is applicable for unofficial firmwares. Since Android 4.4, the CDD (compatibility definition) strictly requires ARMv7. See https://android.stackexchange.com/questions/34958/what-are-the-minimum-hardware-specifications-for-android for details on this.

So yes, maybe, in principle, you could drop armeabi if your app requires Android 4.0, but I’m not sure if there is any such official guarantee. If you require Android 4.4, it should absolutely be fine though.

Answered By – mstorsjo

Leave a Comment