新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Android學(xué)習(xí)之Build環(huán)境初探

Android學(xué)習(xí)之Build環(huán)境初探

作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

|-- 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的規(guī)范

|-- cts.mk cts測試, 可以在代碼根目錄, make cts, 編譯結(jié)束之后,進(jìn)入out/host/linux-x86/bin/下,執(zhí)行cts命令

|-- ide.mk IDE開發(fā)環(huán)境

|-- product-graph.mk

`-- sdk-addon.mk

NDK的build環(huán)境沒有包含在標(biāo)注難得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相關(guān)的PACKAGING/checkapi-current-timestamp] Error 38

需要執(zhí)行: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

如何增加一個新的設(shè)備

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

$ . build/envsetup.sh

$ mkdir -p device/acme/coyotepad

$ cd device/acme/coyotepad

進(jìn)入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


上一頁 1 2 下一頁

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉