古詩詞大全網 - 藝術簽名 - Android學習構建環境介紹

Android學習構建環境介紹

在這裏,我將跳過對手機上android的文件系統框架的闡述(谷歌或百度可以幫妳找到相應的資料),主要是看看谷歌是如何將生成合適的rootfs的工作集成到其構建系統中的,同時,我將看壹看CyanogenMod中各種模型對應的構建機制。

首先,我們來看看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#