首先,我們來看看Android的build系統使用的編譯選項和相關工具。
具體目錄位於:mydroid/build/tools/
| -非加太集團
這是壹個稍微改進的cp命令,用來處理windows/MAC/Linux下cp命令的缺陷,自述值得壹看!
| -亞洲開發銀行
這是壹個查看崩潰問題的工具。詳見安卓調試工具adbs。
| - Android.mk
| - apicheck
用於在發布前檢查API(見my droid/build/core/tasks/API check . MK),看看新編譯的系統中是否有破壞API兼容性或者非法的API。
這裏的代碼是壹個用Java編寫的xml文件(在mydroid/framework/base/api/)來檢查編譯時生成的api信息。可以參考解析xml文件的代碼。
| -先驗的
實現預鏈接的工具。簡單介紹見(my droid/bionic/linker/readme . txt)。
| -壹棵樹
android SDK服務的壹個工具,用來根據指定的xxx.atree文件中的內容進行壹些文件操作。
| - bin2asm
具體用途我不太懂。應該是用來處理壹些在mac上編譯android的gcc相關問題的。
| - buildinfo.sh
在目標中生成各種xxx.prop文件,如system.prop、build.prop等。
| - check_builds.sh
Diff被包裝以查看兩個版本之間變化。
| -檢查先決條件
設備上ota升級的工具之壹。
| - compare_fileslist.py
使用check_builds.sh完成版本比較的腳本
| - droiddoc
Android有壹些javadoc的移植。
| -轉儲-打包-統計
只需查看jar/apk文件中dex和其他文件的大小信息。
| -事件日誌標簽. py
處理事件日誌標簽的內容。關於事件日誌標簽文件的含義,請參考什麽是Android學習的事件日誌標簽?
| - fileslist.py
簡化列出指定目錄中所有文件和大小的腳本——您可以將它放入自己的工具庫中使用:)
| - findleaves.py
在指定目錄下找到指定文件的腳本(多個)-可以放入自己的工具庫中使用:)
| - fixlinebreaks.sh
把windows裏的換行符改成Linux——可以放到自己的工具庫中使用:)
| -文件系統配置
列出指定文件夾和文件的權限。
| -文件系統獲取狀態
獲取指定文件夾中文件的簡單統計信息。
| -我自己
判斷文件是否為ELF格式。
| - isprelinked
判斷文件是否預鏈接。
| - java-event-log-tags.py
處理事件日誌標簽的內容。關於事件日誌標簽文件的含義,請參考什麽是Android學習的事件日誌標簽?
| - kcm
用於關鍵字符映射的工具,請參考:
| -迷幻藥
!!!!!!
| -合並-事件-日誌-標簽. py
處理事件日誌標簽的內容。關於事件日誌標簽文件的含義,請參考什麽是Android學習的事件日誌標簽?
| - mktarball.sh
用fs_get_stats執行的打包工具。
|-print _ module _許可證. sh
顯示當前目錄中的所有模塊信息。
| -發布工具
-檢查目標文件簽名
| - common.py
| -啟迪_生成器. py
| -來自目標文件的img
|-OTA _從_目標_文件
`-簽名_目標_文件_apks
| - rgb2565
Rgb轉換工具
| - signapk
命令行下的jar包簽名工具
| -索斯林
Android的定制編譯工具之壹。簡單介紹見(my droid/bionic/linker/readme . txt)。
| - warn.py
解析Android系統編譯日誌的工具
`- zipalign
Zipfile的對齊工具,請參見README。TXT放在這個文件夾下。
#p#副標題#e#
我們來看看Android編譯器系統中定義的壹些常見的XXX.mk文件。
mydroid/build/core/
| - armelflib.x
| - armelf.x
| - armelf.xsc
| - base_rules.mk
| - binary.mk
| - build_id.mk
|-build-system.html
| -檢查樹
| - cleanbuild.mk
| - cleanspec.mk
| - clear_vars.mk
| -組合
| - config.mk
| - copy_headers.mk
| - definitions.mk
| - device.mk
| - dex_preopt.mk
| - distdir.mk
| - droiddoc.mk
| - dumpvar.mk
| - dynamic_binary.mk
| - envsetup.mk
| - executable.mk
| -過濾器_符號. sh
| - find-jdk-tools-jar.sh
| - help.mk
| - host_executable.mk
| - host_java_library.mk
| -主機_本機_測試. mk
|-host _ pre build . MK
| -主機共享庫. mk
| -主機靜態庫. mk
| - java_library.mk
| - java.mk
|-legacy _ pre builds . MK
| - main.mk
| - Makefile
|-multi _ pre build . MK
| - native_test.mk
| - node_fns.mk
| - notice_files.mk
| - package.mk
| - pathmap.mk | - phony_package.mk
|-pre build . MK
| -進程包裝器gdb.cmds
| - process_wrapper_gdb.sh
| -進程包裝器. sh
| -產品配置. 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
| -任務
| - user_tags.mk
`- version_defaults.mk
#p#副標題#e#
這裏,該目錄在mydroid/build/core/tasks/中有壹些特殊的任務
| - apicheck.mk,判斷api是否符合AOSP的規範。
| - cts.mk cts測試,可以在代碼根目錄下執行cts命令,使cts,編譯後,輸入out/host/linux-x86/bin/。
|-ide.mkide開發環境
| -產品圖. mk
`- sdk-addon.mk
NDK的構建環境不包含在標有稀有AOSP的/build/目錄中。
但是在mydroid/ndk/build下。
$ cd ndk/build/tools
$ export ANDROID _ NDK _ ROOT = aosp-ROOT/ndk
$ ./make-release -幫助
壹些提示
如何顯示每次編譯包含的所有xxx.mk文件?
找到build/core/main.mk。
將include $(subdir_makefiles)替換為
[plain]查看plain copy $(foreach subdir _ makefile,$(subdir_makefiles),
$(包含$(subdir_makefile)的信息)
$(eval include $(subdir_makefile)))
subdir_makefile :=
如果遇到API相關的打包/檢查API-current-timestamp]錯誤38。
需要執行:更新api
如何在AOSP代碼目錄外編譯
[plain]查看plaincopy #路徑和設置
目標產品=通用
ANDROID _ ROOT =/home/Karim/ANDROID/aosp-2.3 . x
仿生_ LIBC = $(ANDROID _ ROOT)/仿生/libc
產品_輸出= $(ANDROID _ ROOT)/輸出/目標/產品/$(目標_產品)
交叉編譯=
$(ANDROID _ ROOT)/預構建/Linux-x86/tool chain/arm-eabi-4 . 4 . 3/bin/arm-eabi-
#工具名稱
AS = $(CROSS_COMPILE)as
AR = $(CROSS_COMPILE)ar
CC = $(交叉編譯)gcc
CPP = $(CC) -E
LD = $(交叉編譯)LD
NM = $(交叉編譯)NM
OBJCOPY = $(CROSS _ COMPILE)OBJCOPY
OBJDUMP = $(CROSS _ COMPILE)OBJDUMP
RANLIB = $(CROSS_COMPILE)ranlib
READELF = $(CROSS _ COMPILE)READELF
SIZE = $(CROSS_COMPILE)大小
STRINGS = $(CROSS_COMPILE)字符串
STRIP = $(CROSS_COMPILE)strip
導出為AR CC CPP LD NM obj copy obj dump RANLIB READELF
大小字符串帶
#構建設置
CFLAGS =-O2-Wall-fno-short-enum
HEADER_OPS = -I$(仿生_ LIBC)/拱臂/包含
-I$(仿生_ LIBC)/內核/通用
-I$(仿生_ LIBC)/內核/拱臂
LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker
$(PRODUCT _ OUT)/obj/lib/CRT begin _ dynamic . o
$(PRODUCT _ OUT)/obj/lib/Cr tend _ Android . o
-L $(PRODUCT _ OUT)/obj/lib-LC-LDL
#安裝變量
EXEC_NAME =示例-應用程序
安裝=安裝
INSTALL _ DIR = $(PRODUCT _ OUT)/system/bin
構建所需的文件數
OBJS =示例-app.o
#制定規則
全部:示例-應用程序
c.o:
$(CC)$(CFLAGS)$(HEADER _ OPS)-c { 1 } lt;
示例-應用程序:${OBJS}
$(CC)-o $(EXEC _ NAME)$ { OBJS } $(LD flags)
安裝:示例-應用程序
測試-d $(安裝目錄)|| $(安裝)-d -m 755 $(安裝目錄)
$(安裝)-m 755 $(執行名稱)$(安裝目錄)
清潔:
rm -f *。o $(執行名稱)核心
distclean:
rm -f *~
rm -f *。o $(執行名稱)核心
如何添加新設備
[plain]查看plain copy $ CD ~/Android/aosp-2.3 . x
$ .build/envsetup.sh
$ mkdir -p設備/acme/coyotepad
$ cd設備/acme/coyotepad
轉到AndroidProducts.mk
PRODUCT_MAKEFILES :=
$(LOCAL_DIR)/full_coyotepad.mk
For full_coyotepad.mk
$(調用inherit-product,$(SRC _ TARGET _ DIR)/product/languages _ full . MK)
$(調用inherit-product,$(SRC _ TARGET _ DIR)/product/full . MK)
DEVICE_PACKAGE_OVERLAYS :=
產品包+=
產品副本文件+=
PRODUCT_NAME := full_coyotepad
產品_設備:= coyotepad
PRODUCT _ MODEL:= coyote pad上的完整Android,meep-meep
在BoardConfig.mk中
目標_無_內核:=真
TARGET_NO_BOOTLOADER := true
目標_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
使用_相機_存根:=真
打開vendorsetup.sh
add _ lunch _ combo full _ coyote pad-eng
#p#副標題#e#