锅底灰

Build环境 2

0
阅读(1987)
|-- phony_package.mk

    |-- prebuilt.mk

    |-- process_wrapper_gdb.cmds

    |-- process_wrapper_gdb.sh

    |-- process_wrapper.sh

    |-- product_config.mk

    |-- product.mk

    |-- proguard.flags

    |-- proguard_tests.flags

    |-- raw_executable.mk

    |-- raw_static_library.mk

    |-- root.mk

    |-- shared_library.mk

    |-- static_java_library.mk

    |-- static_library.mk

    |-- tasks

    |-- user_tags.mk

    `-- version_defaults.mk

    这里,目录在mydroid/build/core/tasks/有一些特别的task

    |-- apicheck.mk, 判断api是否符合AOSP的规范

    |-- cts.mk cts测试, 可以在代码根目录, make cts, 编译结束之后,进入out/host/linux-x86/bin/下,执行cts命令

    |-- ide.mk  IDE开发环境

    |-- product-graph.mk

    `-- sdk-addon.mk

    NDK的build环境没有包含在标注难得AOSP的/build/目录下

    而是在mydroid/ndk/build下

    $ cd ndk/build/tools

    $ export ANDROID_NDK_ROOT=aosp-root/ndk

    $ ./make-release --help

    一些小技巧

    如何显示每次编译所包含的所有xxx.mk文件

    找到build/core/main.mk

    把include $(subdir_makefiles)替换为

    [plain] view plaincopy $(foreach subdir_makefile, $(subdir_makefiles), \

    $(info Including $(subdir_makefile)) \

    $(eval include $(subdir_makefile)) \

    )

    subdir_makefile :=

    如果遇见API相关的PACKAGING/checkapi-current-timestamp] Error 38

    需要执行:make update-api

    如何在AOSP代码目录之外编译

    [plain] view plaincopy # Paths and settings

    TARGET_PRODUCT = generic

    ANDROID_ROOT = /home/karim/android/aosp-2.3.x

    BIONIC_LIBC = $(ANDROID_ROOT)/bionic/libc

    PRODUCT_OUT = $(ANDROID_ROOT)/out/target/product/$(TARGET_PRODUCT)

    CROSS_COMPILE = \

    $(ANDROID_ROOT)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

    # Tool names

    AS = $(CROSS_COMPILE)as

    AR = $(CROSS_COMPILE)ar

    CC = $(CROSS_COMPILE)gcc

    CPP = $(CC) -E

    LD = $(CROSS_COMPILE)ld

    NM = $(CROSS_COMPILE)nm

    OBJCOPY = $(CROSS_COMPILE)objcopy

    OBJDUMP = $(CROSS_COMPILE)objdump

    RANLIB = $(CROSS_COMPILE)ranlib

    READELF = $(CROSS_COMPILE)readelf

    SIZE = $(CROSS_COMPILE)size

    STRINGS = $(CROSS_COMPILE)strings

    STRIP = $(CROSS_COMPILE)strip

    export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF \

    SIZE STRINGS STRIP

    # Build settings

    CFLAGS = -O2 -Wall -fno-short-enums

    HEADER_OPS = -I$(BIONIC_LIBC)/arch-arm/include \

    -I$(BIONIC_LIBC)/kernel/common \

    -I$(BIONIC_LIBC)/kernel/arch-arm

    LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker \

    $(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o \

    $(PRODUCT_OUT)/obj/lib/crtend_android.o \

    -L$(PRODUCT_OUT)/obj/lib -lc -ldl

    # Installation variables

    EXEC_NAME = example-app

    INSTALL = install

    INSTALL_DIR = $(PRODUCT_OUT)/system/bin

    # Files needed for the build

    OBJS = example-app.o

    # Make rules

    all: example-app

    .c.o:

    $(CC) $(CFLAGS) $(HEADER_OPS) -c {1}lt;

    example-app: ${OBJS}

    $(CC) -o $(EXEC_NAME) ${OBJS} $(LDFLAGS)

    install: example-app

    test -d $(INSTALL_DIR) || $(INSTALL) -d -m 755 $(INSTALL_DIR)

    $(INSTALL) -m 755 $(EXEC_NAME) $(INSTALL_DIR)

    clean:

    rm -f *.o $(EXEC_NAME) core

    distclean:

    rm -f *~

    rm -f *.o $(EXEC_NAME) core

    如何增加一个新的设备

    [plain] view plaincopy $ cd ~/android/aosp-2.3.x

    $ . build/envsetup.sh

    $ mkdir -p device/acme/coyotepad

    $ cd device/acme/coyotepad

    进入AndroidProducts.mk

    PRODUCT_MAKEFILES := \

    $(LOCAL_DIR)/full_coyotepad.mk

    对于full_coyotepad.mk

    $(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

    $(call inherit-product, $(SRC_TARGET_DIR)/product/full.mk)

    DEVICE_PACKAGE_OVERLAYS :=

    PRODUCT_PACKAGES +=

    PRODUCT_COPY_FILES +=

    PRODUCT_NAME := full_coyotepad

    PRODUCT_DEVICE := coyotepad

    PRODUCT_MODEL := Full Android on CoyotePad, meep-meep

    在BoardConfig.mk中

    TARGET_NO_KERNEL := true

    TARGET_NO_BOOTLOADER := true

    TARGET_CPU_ABI := armeabi

    BOARD_USES_GENERIC_AUDIO := true

    USE_CAMERA_STUB := true

    打开vendorsetup.sh

    add_lunch_combo full_coyotepad-eng

Baidu
map