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/  
 
posted on 2016-05-01 13:17  全能码农  阅读(761)  评论(0编辑  收藏  举报