armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64 ...

Well, armeabi is sort of understandable. This kind of architecture on all (or almost all) real gadgets.
x86 - it seems to be clear too. This is primarily for Genymotion and other emulators, where Android is x86.

And the rest?

Would it be an ideal solution to simply build a lib for all ABI? And if there is no opportunity to protest everywhere, but only on x86 and armeabi?

And why so many armies: armeabi, armeabi-v7a, arm64-v8a? Which one is more relevant? How to determine which one is supported by my gadget? Can there be several at once?

    1 answer 1

    x86 is primarily Intel Atom processors , which are installed in a considerable number of real devices, and not emulators. The emulator can just emulate any architecture, regardless of the architecture of the processor on which it is hosted - he and the emulator. You can see this for yourself by looking at the list of images for emulation:

    scrn

    The minimum set of supported architectures is the APP_ABI := x86 armeabi . Next, you should decide whether your application will use the additional capabilities of the armeabi-v7a architecture , for example, NEON - if so, then this architecture should also be included in the list ( extended list of arm-v7 instructions ) - in fact, now almost all ARM processors, at least v7

    Recently, devices with processors on a 64-bit architecture are increasingly available, so they should also be taken into account.

    You can just ignore mips / mips64

    You can find out the architecture of your device by the specification of the processor it uses. For example, Qualcomm Snapdragon 820 - ARM-V8A . Also in the market you can find programs that show system information.

    Several ARM architectures in one processor cannot be, but each next one includes the previous one, that is, ARM is included in ARM-V7, ARM-V7 is included in ARM-V8. In fact, the most current ARM platform is now ARM-V7, an absolute majority of existing processors are built on it, but ARM-V8 is actively coming.
    The difference in ARM architectures is obvious, each next step is an evolution, new features are added at the level of the iron core.

    You can specify to build a library for all abi and this will be a good solution if the final size of the application suits you - each additional platform - new files that are sized.

    The official guide on this issue.

    • > Emulator, just can emulate any architecture On your screenshot, as I understand it, AVD. He can and any. But it is very picky about the hardware, otherwise it terribly slows down, I use Genymotion, and there it seems like only x86. - user204455
    • What about x86_64? What is the general sense to do 64-bit libraries, if you can do 32-bit libraries that work on both x86 and x86_64? - user204455
    • @ user204455 Well, I don’t know what is happening with Genymotion and its architectures, the fact remains that x86 support is needed primarily for a large number of real Android devices with an Intel processor, and lastly for a Genymotion emulator. - pavlofff
    • AVD in the second reincarnation (Android Studio 2. *) gained much more mobility, however, regarding Windows, only in combination with the “iron” virtualization technology - HAXM, which is available only in relatively modern Intel processors. On the Linux family, hardware virtualization is also well supported, and it is implemented in AMD processors (via QEMU) - everything works much more fun there. - pavlofff
    • As for x86_64, the most pressing question of our time is why all this is necessary, if the increase in productivity is very small. There is no definite answer yet, but traditionally it is required to support for optimization. (arch64 technology itself, in particular, makes it possible to address more RAM if it’s visual, so its appearance is justified, but in terms of supporting 64-bit code everything is vague). - pavlofff