Android M 的编译
对于新版本的Android系统(6.0 开始 ??),在编译时,支持同时编译出两种CPU架构( 即 32-bit 和 64-bit )的 Binaries,这个被称作 "Multilib build"。
对于 native static libraries 和 shared libraries,编译系统会同时编译出两种架构的 Binary。
PRODUCT_PACKAGES 会决定哪个 Binary 会被放进 System Image。
系统默认是编译 64-bit 的版本,可以通过修改 BoardConfig.mk 文件进行定制。
产品配置 (整个系统)
在BoardConfig.mk中,以下变量可以配置 second CPU architecture 以及 ABI(application binary interface):
TARGET_2ND_ARCH
TARGET_2ND_ARCH_VARIANT
TARGET_2ND_CPU_VARIANT
TARGET_2ND_CPU_ABI
TARGET_2ND_CPU_ABI2
以 build/target/board/generic_arm64/BoardConfig.mk 为例:
TARGET_NO_BOOTLOADER := true TARGET_NO_KERNEL := true TARGET_ARCH := arm64 TARGET_ARCH_VARIANT := armv8-a TARGET_CPU_VARIANT := generic TARGET_CPU_ABI := arm64-v8a TARGET_2ND_ARCH := arm TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI2 := armeabi
如果想改为,默认编译32-bit系统,可以设置以下变量:
TARGET_PREFER_32_BIT := true
在Android.mk中配置模块
在某个模块的 Andorid.mk 中,使用 LOCAL_MULTILIB 变量,可以 override 系统设定的 TARGET_PREFER_32_BIT。
LOCAL_MULTILIB可以设置为:
LOCAL_MULTILIB := both // build both 32-bit and 64-bit LOCAL_MULTILIB := 32 // build 32-bit LOCAL_MULTILIB := 64 // build 64-bit LOCAL_MULTILIB := first // build for the first arch (32-bit in 32-bit device, 64-bit in 64-bit device) LOCAL_MULTILIB := // the default
还可以使用指定架构的 "LOCAL_MODULE_TARGET_ARCH" 变量来编译指定架构的 Binaries:
LOCAL_MODULE_TARGET_ARCH := arm
LCOAL_MODULE_TARGET_ARCH := arm64
参考文献:
https://source.android.com/source/64-bit-builds.html (请自行FQ~~~)https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/