Every piece of
native code generated with the Android NDK matches a given
ABI(Application Binary Interface). ABI defines exactly how machine
code is expected to interact with the system at runtime.
ABI describes following things at
runtime:
- the CPU instruction set that the machine code should use
- the endianness of memory stores and loads at runtime
- the format of executable binaries (shared libraries, programs, etc...) and what type of content is allowed/supported in them.
- various conventions used to pass data between your code and the system (e.g. how registers and/or the stack are used when functions are called, alignment constraints, etc...)
- alignment and size constraints for enum types, structure fields and arrays.
- the list of function symbols available to your machine code at runtime, generally from a very specific selected set of libraries.
Android Supported ABIs:
1.armeabi:
This ABI is for ARM-based CPUs that support at
least
the ARMv5TE instruction set.It is the ARM Architecture.
2.armeabi-v7a:
Thi is an extension of armeabi for ARM-based CPUs which has included
a few cpu instruction.
3.X86:
This is the name of an ABI for CPUs supporting the instruction set
which targets Pentium Pro instruction set.Generated code is optimized
for Atom CPU
4.mips:
This is the name of an ABI for MIPS-based CPUs that support at
least
the MIPS32r1 instruction set. It includes MIPS32 revision 1 ISA,
Little-Endian, O32, Hard-Float, no DSP application specific
extensions.
By
default, The Android NDK generats machine code for 'armeabi'
ABI.However we can define APP_ABI in Application.mk file to generate
ABI for compatible machine code. For more this.
When
we install apk, the package manager service will scan the .apk and
look for any shared library form:
lib/<primary-abi>/lib<name>.so
If
anyone is found, then it's copy under $APPDIR/lib/lib<name>.so,
where $APPDIR corresponds to the application's specific data
directory.
If none is found, and a
secondary ABI is defined, the service will then scan for shared
libraries of the form:
lib/<secondary-abi>/lib<name>.so
If
anything is found, then it's copy under $APPDIR/lib/lib<name>.so
This
automatically extract the best machine code for the target device
from the package at installation time.
Comments
Post a Comment