Android学习之Build环境初探
ny_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
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)