Android編譯系統初涉

來源:互聯網
上載者:User

標籤:編譯   android   makefile   

Makefile檔案的規則格式TARGET:PREFEQUISTES COMMANDS
main.c #include <stdio.h>#include <utility.h>int main(int argc,char *argv[]){    printf("%d",getNumber());    return 0;}utility.hint getNumber();utility.cint getNumber(){    return 2;}
例子
SimpleMakefile:main.o utility.o     gcc -o SimpleMakefile main.o utility.omain.o:main.c   gcc -c main.cutility.o:utility.c gcc -c utility.cMakefile(另一種寫法)OBEJCT=main.o utility.oSimpleMakefile:$(OBEJCT)gcc -o SimpleMakefile $(OBEJCT)
Android 系統的編譯:
  1. 1.Makefile->build/core/main.mk
  2. main.mk的droid流程
    APP:droid->app_only->$(unbunled_build_modules)
    系統:droid->droidcore
    ->dist_files

  3. main.mk的定製檔案(處理屬性 零件)
    vendorsetup.sh (出現在envsetup.sh)
    AndroidProducts.mk
    BoardConfig.mk
    Android.mk (出現在main.mk)

  4. droidcore編譯過程
# 產生droidcore的過程 主要files 與最後一個產生的installed-files.txt記錄預先安裝程式模組# 負責產生系統的所有可執行程式包 如system.img boot.img recovery.img等.PHONY: droidcoredroidcore: files     systemimage     $(INSTALLED_BOOTIMAGE_TARGET)     $(INSTALLED_RECOVERYIMAGE_TARGET)     $(INSTALLED_USERDATAIMAGE_TARGET)     $(INSTALLED_CACHEIMAGE_TARGET)     $(INSTALLED_VENDORIMAGE_TARGET)     $(INSTALLED_FILES_FILE)------------------------------files-----------------------------------------# 重點看files產生過程# prebuilt 該機制用於早期版本.PHONY: filesfiles: prebuilt         $(modules_to_install)         $(INSTALLED_ANDROID_INFO_TXT_TARGET)# 描述系統需要安裝的模組# product_FILES各modules安裝檔案的列表# tags_to_install 通過標誌選擇性編譯的模組# get-tagged-modules 判斷目標是否有“拒絕”標籤,如果有 則不被編譯modules_to_install := $(sort     $(ALL_DEFAULT_INSTALLED_MODULES)     $(product_FILES)     $(foreach tag,$(tags_to_install),$($(tag)_MODULES))     $(call get-tagged-modules, shell_$(TARGET_SHELL))     $(CUSTOM_MODULES)   )----------------------------------------------------------------------------------------------------------systemimage-----------------------------------# 該定義在build/core/Makefile# BUILT_SYSTEMIMAGE := $(systemimage_intermediates)/system.img   最終產生system.img檔案# [email protected] 代表target的集合$(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH) | $(ACP)    @echo "Install system fs image: [email protected]"    $(copy-file-to-target)    $(hide) $(call assert-max-image-size,[email protected] $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE),yaffs)systemimage: $(INSTALLED_SYSTEMIMAGE)----------------------------------------------------------------------------
  1. dist_files編譯過程
# 在out目錄下產生dist檔案夾用於儲存多種分發包 # dist_files only for putting your library into the dist directory with a full build..PHONY: dist_files
Android.mk系統例子
  • 以 $(源碼)\system\core\adb 項目的android.mk為例
# Copyright 2005 The Android Open Source Project## Android.mk for adb#LOCAL_PATH:= $(call my-dir)# adb host tool# =========================================================# CLEAR_VARS清除上百個LOCAL_PATH外的變數include $(CLEAR_VARS)# Default to a virtual (sockets) usb interface# 定義usb驅動USB_SRCS :=EXTRA_SRCS :=ifeq ($(HOST_OS),linux)  USB_SRCS := usb_linux.c  EXTRA_SRCS := get_my_path_linux.c  LOCAL_LDLIBS += -lrt -ldl -lpthread  LOCAL_CFLAGS += -DWORKAROUND_BUG6558362endififeq ($(HOST_OS),darwin)  USB_SRCS := usb_osx.c  EXTRA_SRCS := get_my_path_darwin.c  LOCAL_LDLIBS += -lpthread -framework CoreFoundation -framework IOKit -framework Carbonendififeq ($(HOST_OS),freebsd)  USB_SRCS := usb_libusb.c  EXTRA_SRCS := get_my_path_freebsd.c  LOCAL_LDLIBS += -lpthread -lusbendififeq ($(HOST_OS),windows)  USB_SRCS := usb_windows.c  EXTRA_SRCS := get_my_path_windows.c ../libcutils/list.c  EXTRA_STATIC_LIBS := AdbWinApi  ifneq ($(strip $(USE_CYGWIN)),)    # Pure cygwin case    LOCAL_LDLIBS += -lpthread -lgdi32    LOCAL_C_INCLUDES += /usr/include/w32api/ddk  endif  ifneq ($(strip $(USE_MINGW)),)    # MinGW under Linux case    LOCAL_LDLIBS += -lws2_32 -lgdi32    USE_SYSDEPS_WIN32 := 1    LOCAL_C_INCLUDES += /usr/i586-mingw32msvc/include/ddk  endif  LOCAL_C_INCLUDES += development/host/windows/usb/api/endif# 定義本模組所用到的所有源檔案 包括上面用的驅動變數LOCAL_SRC_FILES :=     adb.c     console.c     transport.c     transport_local.c     transport_usb.c     commandline.c     adb_client.c     adb_auth_host.c     sockets.c     services.c     file_sync_client.c     $(EXTRA_SRCS)     $(USB_SRCS)     usb_vendors.cLOCAL_C_INCLUDES += external/openssl/includeifneq ($(USE_SYSDEPS_WIN32),)  LOCAL_SRC_FILES += sysdeps_win32.celse  LOCAL_SRC_FILES += fdevent.cendifLOCAL_CFLAGS += -O2 -g -DADB_HOST=1  -Wall -Wno-unused-parameterLOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE# 所要產生的模組名稱LOCAL_MODULE := adbLOCAL_MODULE_TAGS := debug# 編譯需要用到的庫LOCAL_STATIC_LIBRARIES := libzipfile libunz libcrypto_static $(EXTRA_STATIC_LIBS)ifeq ($(USE_SYSDEPS_WIN32),)    LOCAL_STATIC_LIBRARIES += libcutilsendif# 表示產生一個Host可執行檔include $(BUILD_HOST_EXECUTABLE)$(call dist-for-goals,dist_files sdk,$(LOCAL_BUILT_MODULE))ifeq ($(HOST_OS),windows)$(LOCAL_INSTALLED_MODULE):     $(HOST_OUT_EXECUTABLES)/AdbWinApi.dll     $(HOST_OUT_EXECUTABLES)/AdbWinUsbApi.dllendif# adbd device daemon# =========================================================# 第二個模組編譯開始標誌include $(CLEAR_VARS)LOCAL_SRC_FILES :=     adb.c     backup_service.c     fdevent.c     transport.c     transport_local.c     transport_usb.c     adb_auth_client.c     sockets.c     services.c     file_sync_service.c     jdwp_service.c     framebuffer_service.c     remount_service.c     usb_linux_client.c     log_service.cLOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameterLOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCEifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))LOCAL_CFLAGS += -DALLOW_ADBD_ROOT=1endif# 所要產生的模組名稱LOCAL_MODULE := adbdLOCAL_FORCE_STATIC_EXECUTABLE := trueLOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)LOCAL_STATIC_LIBRARIES := liblog libcutils libc libmincrypt# 產生adbd可執行檔include $(BUILD_EXECUTABLE)
Android.mk變數解析

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android編譯系統初涉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.