GrabDuck

Android系統移植技術詳解一|精彩博文 - 博搜網

:


主機系統: Ubuntu9.04
(1) 安裝如下軟體包
sudo apt-get install git-core
sudo apt-get install gnupg
sudo apt-get install sun-java5-jdk
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install libsdl-dev
sudo apt-get install libesd0-dev
sudo apt-get install build-essential
sudo apt-get install zip
sudo apt-get install curl
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
android 編譯對 java 的需求只支持 jdk5.0 低版本, jdk5.0 update 12 版本和 java 6 不支持。
(2) 下載 repo 工具
curl http://android.git.kernel.org/repo >/bin/repo
chmod a+x /bin/repo
(3) 創建源代碼下載目錄:
mkdir /work/android-froyo-r2
(4) 用 repo 工具初始化一個版本 ( 以 android2.2r2 為例 )
cd /work/android-froyo-r2
repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
初始化過程中會顯示相關的版本的 TAG 信息,同時會提示你輸入用戶名和郵箱地址,以上面的方式初始化的是 android2.2 froyo 的最新版本,
android2.2 本身也會有很多個版本,這可以從 TAG 信息中看出來,當前 froyo 的所有版本如下:
* [new tag]         android-2.2.1_r1 -> android-2.2.1_r1
* [new tag]         android-2.2_r1 -> android-2.2_r1
* [new tag]         android-2.2_r1.1 -> android-2.2_r1.1
* [new tag]         android-2.2_r1.2 -> android-2.2_r1.2
* [new tag]         android-2.2_r1.3 -> android-2.2_r1.3

 * [new tag]         android-cts-2.2_r1 -> android-cts-2.2_r1
* [new tag]         android-cts-2.2_r2 -> android-cts-2.2_r2
* [new tag]         android-cts-2.2_r3 -> android-cts-2.2_r3
這樣每次下載的都是最新的版本,當然我們也可以根據 TAG 信息下載某一特定的版本如下:
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-cts-2.2_r3
(5) 下載代碼
repo sync
froyo 版本的代碼大小超過 2G ,漫長的下載過程。
(6) 編譯代碼
cd /work/android-froyo-r2
make


Ubuntu 下安裝 Simba 伺服器將 linux 電腦上的內容共享,同一區域網內的另外一台 Windows PC 即可訪問其共享內容,
從而實現 Windows 電腦向訪問本地文件一樣訪問 Linux 文件系統的內容。

(1) 安裝 Simaba 伺服器
sudo apt-get install samba

(2) 安裝 samba 圖形化配置軟體
sudo apt-get install system-config-samba

(3) 創建一個 Simba 專用用戶
從「系統」—「系統管理」—「用戶和組」,來創建。如圖,先點擊「解鎖」,然後「添加新用戶」
然後輸入新用戶名字 ( 如 Simba) 和密碼 ( 如 111111) ,然後在「高級」裡面,選擇「主組」為 sambashare 後點擊 " 確定 " 即可
一句話來概括,就是創建一個主組為 sambashare 的用戶

(4) 配置 samba 共享
從「系統」—「系統管理—」 samba「 ,運行配置界面
然後」首選項「—」伺服器設置「。點擊:安全性,在最後的」來賓帳號「裡面,
選擇我們新建立的那個用戶 simba 後點擊確定

(5) 修改 samba 配置文件
打開 /etc/samba/smb.conf ,修改 valid users = XXXX 為 valid users = simba

(6) 重啟 samba 服務
sudo /etc/init.d/samba restart

(7) 添加共享文件
從「系統」—「系統管理—」 samba「 ,運行配置界面
點擊 " 添加 " 來添加共享文件夾 , 點擊 " 瀏覽 " 來選擇需要共享的文件夾,選擇 " 可擦寫 " 和 " 顯示 " ,點擊 " 訪問 " 可以設置訪問許可權,最好設置成 " 允許所有用戶訪問 "

本文來自 CSDN 博客,轉載請標明出處: http://blog.csdn.net/jiajie961/archive/2010/11/04/5987821.aspx


實驗平台: Ubuntu9.04

(1) 安裝 tftp 服務
sudo apt-get install tftp tftpd openbsd-inetd

(2) 在根目錄下創建文件夾 tftpboot 文件夾並修改許可權
cd /
sudo mkdir tftpboot
sudo chmod 777 tftpboot

(3) 修改 /etc/inetd.conf 文件如下:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot

(4) 開啟 tftp 服務
sudo /etc/init.d/openbsd-inetd reload
sudo in.tftpd -l /tftpboot

(5) 重啟電腦,然後將測試文件放入 /tftpboot 目錄下即可開始測試,出現問題可能一般都是許可權問題
/tftpboot 目錄下的文件訪問許可權改成 0777

本文來自 CSDN 博客,轉載請標明出處: http://blog.csdn.net/jiajie961/archive/2010/11/05/5989328.aspx


從 google 網站上下載的 android 源代碼編譯時默認是編譯 google 設定的產品,如果要開發自己的產品,
則需要重新定義一個產品項目,過程如下:
首先我們定義產品的規格,舉例如下:
公司名稱 ardent
產品名稱 MTP
主板名稱 merlin
然後安裝下面的步驟新建產品項目:
(1) 在源代碼目錄下創建一個用戶目錄
mkdir vendor

(2) 在用戶目錄下創建一個公司目錄
mkdir vendor/merlin

(3) 在公司目錄下創建一個 products 目錄
mkdir vendor/merlin/products

(4) 在上面創建的 products 下創建一個產品 makefile 文件 MTP.mk ,內容如下:
PRODUCT_PACKAGES := \
AlarmClock \
Email \
Fallback \
Launcher2 \
Music \
Camera \
Settings \
LatinIME \
NotePad \
SoundRecorder \
Bluetooth \
CertInstaller \
DeskClock

$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
#
# Overrides
PRODUCT_MANUFACTURER := ardent
PRODUCT_BRAND := ardent
PRODUCT_NAME := MTP
PRODUCT_MODEL := MultiMedia Touch Phone
PRODUCT_DEVICE := merlin
PRODUCT_LOCALES := zh_CN
產品 makefile 文件的編寫有一套規則,詳細情況見此文後面的補充內容。

(5) 在 vendor/merlin/products 目錄下創建一個 AndroidProducts.mk 文件,定義 Android 產品配置文件的路徑,具體如下:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/MTP.mk

(6) 在公司目錄下創建一個主板目錄
mkdir vendor/ardent/merlin

(7) 在主板目錄下新建一個主板配置文件 BoardConfig.mk ,內容如下:
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true

(8) 如果你希望修改系統屬性,則可以在主板目錄下新建一個 system.prop 文件,該文件中可以修改系統屬性,舉例如下:
# system.prop for
# This overrides settings in the products/generic/system.prop file
#
# rild.libpath=/system/lib/libreference-ril.so
# rild.libargs=-d /dev/ttyS0

(9) 在主板目錄下建議一個 Android 的主板配置文件 AndroidBoard.mk ,此文件是編譯系統介面文件,內容如下:
# make file for new hardware from
#
LOCAL_PATH := $(call my-dir)

#
# this is here to use the pre-built kernel
ifeq ($(TARGET_PREBUILT_KERNEL),)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel
endif

file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
$(transform-prebuilt-to-target)

#
# no boot loader, so we don't need any of that stuff..
#
LOCAL_PATH := vendor/ardent/merlin
include $(CLEAR_VARS)
#
# include more board specific stuff here? Such as Audio parameters.
#

(10) 編譯新的項目
. build/envsetup.sh
make PRODUCT-MTP-user

補充內容:
(1) 上面的新建的幾個文件的編寫可以參考 build/target/board/generic 目錄下的 AndroidBoard.mk , BoardConfig.mk 和 system.prop

(2) 產品 makefile 的編寫規則,變數定義解釋如下:
PRODUCT_NAME 終端用戶可見的產品名稱,對應到「 Settings「 中的「 About the phone」 信息
PRODUCT_MODEL End-user-visible name for the end product
PRODUCT_LOCALES 1 個以空格分隔開的兩個字母的語言碼加上 2 位元組的國家碼的列表,影響到 "Settings" 中的語言,時間,日期和貨幣格式設置,
舉例: en_GB de_DE es_ES fr_CA
PRODUCT_PACKAGES 需要安裝的 APK 應用程序列表
PRODUCT_DEVICE 工作設計名稱,即主板名稱
PRODUCT_MANUFACTURER 生產廠家
PRODUCT_BRAND 軟體設計針對的客戶品牌
PRODUCT_PROPERTY_OVERRIDES 以 "key=value" 為格式的屬性列表
PRODUCT_COPY_FILES 文件複製列表,格式為「原文件路徑:目的文件路徑」,編譯過程中會按照此規則複製文件
PRODUCT_OTA_PUBLIC_KEYS 產品的 OTA 公共密匙列表
PRODUCT_POLICY 聲明此產品使用的政策
PRODUCT_PACKAGE_OVERLAYS 指示是否使用默認資源或添加任何產品特定的資源,例如: vendor/acme/overlay
PRODUCT_CONTRIBUTORS_FILE HTML 文件中包含項目的貢獻者
PRODUCT_TAGS 以空格分隔開的指定產品關鍵詞列表

本文來自 CSDN 博客,轉載請標明出處: ttp://blog.csdn.net/jiajie961/archive/2010/11/07/5993126.aspx


1, 安裝相關的軟體包
apt-get install liblzo2-dev

2, 獲取相關的工具 mkfs.ubifs 和 ubinize
這兩個工具是製作 ubifs 文件系統的時候用到,它們是 mtd-utils 工具包中的內容, mtd-utils 工具包你可以從下面的網站下載和編譯出來:
官方網站: http://www.linux-mtd.infradead.org/index.html
資源下載網站: http://git.infradead.org/

3, 創建一個 create-ubifs.sh 腳本,主要是調用 mkfs.ubifs 和 ubinize 工具和相關參數來製作 ubifs 文件系統,內容如下:
#!/bin/bash

##########################################################
# Script to generate ubifs filesystem image. #
##########################################################

##### ubinize configuration file
config_file=rootfs_ubinize.cfg

##### Function to check result of the command
check_result() {
if [ $? -ne 0 ]
then
echo "FAILED"
else
echo "SUCCESSFUL"
fi
}

###### Function to check whether an application exists
check_program() {
for cmd in "$@"
do
which ${cmd} > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo
echo "Cannot find command \"${cmd}\""
echo
exit 1
fi
done
}

if [ $# -ne 5 ]
then
echo
echo 'Usage: create-ubifs.sh [page_size_in_bytes] [pages_per_block] [partition_size_in_bytes] [blocks_per_device] [path_to_rootfs]'
echo
exit
fi

page_size_in_bytes=$1
echo "Page size [$page_size_in_bytes]bytes."
pages_per_block=$2
echo "Pages per block [$pages_per_block]"
partition_size_in_bytes=$3
echo "File-system partition size [$partition_size_in_bytes]bytes."
blocks_per_device=$4
echo "Blocks per device [$blocks_per_device]"
path_to_rootfs=$5

# wear_level_reserved_blocks is 1% of total blcoks per device
wear_level_reserved_blocks=`expr $blocks_per_device / 100`
echo "Reserved blocks for wear level [$wear_level_reserved_blocks]"

#logical_erase_block_size is physical erase block size minus 2 pages for UBI
logical_pages_per_block=`expr $pages_per_block - 2`
logical_erase_block_size=`expr $page_size_in_bytes \* $logical_pages_per_block`
echo "Logical erase block size [$logical_erase_block_size]bytes."

#Block size = page_size * pages_per_block
block_size=`expr $page_size_in_bytes \* $pages_per_block`
echo "Block size [$block_size]bytes."

#physical blocks on a partition = partition size / block size
partition_physical_blocks=`expr $partition_size_in_bytes / $block_size`
echo "Physical blocks in a partition [$partition_physical_blocks]"

#Logical blocks on a partition = physical blocks on a partitiion - reserved for wear level
patition_logical_blocks=`expr $partition_physical_blocks - $wear_level_reserved_blocks`
echo "Logical blocks in a partition [$patition_logical_blocks]"

#File-system volume = Logical blocks in a partition * Logical erase block size
fs_vol_size=`expr $patition_logical_blocks \* $logical_erase_block_size`
echo "File-system volume [$fs_vol_size]bytes."

echo
echo "Generating configuration file..."
echo "[rootfs-volume]" > $config_file
echo "mode=ubi" >> $config_file
echo "image=rootfs_ubifs.img" >> $config_file
echo "vol_id=0" >> $config_file
echo "vol_size=$fs_vol_size" >> $config_file
echo "vol_type=dynamic" >> $config_file
echo "vol_name=system" >> $config_file
echo

# Note: Check necessary program for installation
#echo -n "Checking necessary program for installation......"
#check_program mkfs.ubifs ubinize
#echo "Done"

#Generate ubifs image
echo -n "Generating ubifs..."
./mkfs.ubifs -x lzo -m $page_size_in_bytes -e $logical_erase_block_size -c $patition_logical_blocks -o rootfs_ubifs.img -d $path_to_rootfs
check_result
echo -n "Generating ubi image out of the ubifs..."
./ubinize -o ubi.img -m $page_size_in_bytes -p $block_size -s $page_size_in_bytes $config_file -v
check_result

rm -f rootfs_ubifs.img
rm -f $config_file

(4) 將 mkfs.ubifs 和 ubinize 以及 create-ubifs.sh 放置在同一目錄下,然後調用 create-ubifs.sh 即可創建 ubifs 文件系統, create-ubifs.sh 用法如下:
create-ubifs.sh page_size_in_bytes( 頁大小 ) pages_per_block( 每個扇區的頁數量 ) partition_size_in_bytes( 分區大小 ) blocks_per_device( 扇區數量 ) path_to_rootfs( 文件系統路徑 )
舉例如下:
./create-ubifs.sh 2048 64 83886080 4096 ./rootfs
上面命令的意思是調用 create-ubifs.sh 將當前目錄下的 rootfs 文件夾的內容製作成 ubifs 文件系統, nand flash 的頁大小為 2k, 每個扇區有 64 頁,
總共有 4096 個扇區,要製作的文件系統的大小為 83886080 位元組。

本文來自 CSDN 博客,轉載請標明出處: http://blog.csdn.net/jiajie961/archive/2010/11/08/5994713.aspx


android 編譯系統的 makefile 文件 Android.mk 寫法如下

(1)Android.mk 文件首先需要指定 LOCAL_PATH 變數,用於查找源文件。由於一般情況下
Android.mk 和需要編譯的源文件在同一目錄下,所以定義成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的語句的意思是將 LOCAL_PATH 變數定義成本文件所在目錄路徑。

(2)Android.mk 中可以定義多個編譯模塊,每個編譯模塊都是以 include $(CLEAR_VARS) 開始
以 include $(BUILD_XXX) 結束。
include $(CLEAR_VARS)
CLEAR_VARS 由編譯系統提供,指定讓 GNU MAKEFILE 為你清除除 LOCAL_PATH 以外的所有 LOCAL_XXX 變數,
如 LOCAL_MODULE , LOCAL_SRC_FILES , LOCAL_SHARED_LIBRARIES , LOCAL_STATIC_LIBRARIES 等。
include $(BUILD_STATIC_LIBRARY) 表示編譯成靜態庫
include $(BUILD_SHARED_LIBRARY) 表示編譯成動態庫。
include $(BUILD_EXECUTABLE) 表示編譯成可執行程序

(3) 舉例如下 (frameworks/base/libs/audioflinger/Android.mk) :
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) 模塊一
ifeq ($(AUDIO_POLICY_TEST),true)
ENABLE_AUDIO_DUMP := true
endif
LOCAL_SRC_FILES:= \
AudioHardwareGeneric.cpp \
AudioHardwareStub.cpp \
AudioHardwareInterface.cpp
ifeq ($(ENABLE_AUDIO_DUMP),true)
LOCAL_SRC_FILES += AudioDumpInterface.cpp
LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP
endif
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_CFLAGS += -DGENERIC_AUDIO
endif
LOCAL_MODULE:= libaudiointerface
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_SRC_FILES += A2dpAudioInterface.cpp
LOCAL_SHARED_LIBRARIES += liba2dp
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_C_INCLUDES += $(call include-path-for, bluez)
endif
include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫
include $(CLEAR_VARS) 模塊二
LOCAL_SRC_FILES:= \
AudioPolicyManagerBase.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmedia
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudiopolicybase
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_A2DP
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫
include $(CLEAR_VARS) 模塊三
LOCAL_SRC_FILES:= \
AudioFlinger.cpp \
AudioMixer.cpp.arm \
AudioResampler.cpp.arm \
AudioResamplerSinc.cpp.arm \
AudioResamplerCubic.cpp.arm \
AudioPolicyService.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase
LOCAL_CFLAGS += -DGENERIC_AUDIO
else
LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy
endif
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudioflinger
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_SHARED_LIBRARIES += liba2dp
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif
endif
ifeq ($(BOARD_USE_LVMX),true)
LOCAL_CFLAGS += -DLVMX
LOCAL_C_INCLUDES += vendor/nxp
LOCAL_STATIC_LIBRARIES += liblifevibes
LOCAL_SHARED_LIBRARIES += liblvmxservice
# LOCAL_SHARED_LIBRARIES += liblvmxipc
endif
include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫

(4) 編譯一個應用程序 (APK)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK
include $(BUILD_PACKAGE)

(5) 編譯一個依賴於靜態 Java 庫 (static.jar) 的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK
include $(BUILD_PACKAGE)

(6) 編譯一個需要用平台的 key 簽名的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK
include $(BUILD_PACKAGE)

(7) 編譯一個需要用特定 key 前面的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK
include $(BUILD_PACKAGE)

(8) 添加一個預編譯應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Module name should match apk name to be installed.
LOCAL_MODULE := LocalModuleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

(9) 添加一個靜態 JAVA 庫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner

# The name of the jar file to create
LOCAL_MODULE := sample

# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)

(10)Android.mk 的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:
LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES 在 Android.mk 文件中編譯應用程序 (BUILD_PACKAGE) 時設置此變數,表示資源文件,
通常會定義成 LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM
LOCAL_C_INCLUDES 額外的 C/C++ 編譯頭文件路徑,用 LOCAL_PATH 表示本文件所在目錄
舉例如下:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC 指定 C 編譯器

LOCAL_CERTIFICATE 簽名認證

LOCAL_CFLAGS 為 C/C++ 編譯器定義額外的標誌 ( 如宏定義 ) ,舉例: LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS install 應用程序時需要複製的頭文件,必須同時定義 LOCAL_COPY_HEADERS_TO

LOCAL_COPY_HEADERS_TO install 應用程序時複製頭文件的目的路徑

LOCAL_CPP_EXTENSION 如果你的 C++ 文件不是以 cpp 為文件後綴,你可以通過 LOCAL_CPP_EXTENSION 指定 C++ 文件後綴名
如: LOCAL_CPP_EXTENSION := .cc
注意統一模塊中 C++ 文件後綴必須保持一致。

LOCAL_CPPFLAGS 傳遞額外的標誌給 C++ 編譯器,如: LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX 指定 C++ 編譯器

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接 ( 執行時不依賴於任何動態庫 ) ,則設置 LOCAL_FORCE_STATIC_EXECUTABLE:=true
目前只有 libc 有靜態庫形式,這個只有文件系統中 /sbin 目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常
文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES 編譯 java 應用程序和庫的時候指定包含的 java 類庫,目前有 core 和 framework 兩種
多數情況下定義成: LOCAL_JAVA_LIBRARIES := core framework
注意 LOCAL_JAVA_LIBRARIES 不是必須的,而且編譯 APK 時不允許定義 ( 系統會自動添加 )

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS 傳遞額外的參數給連接器 ( 務必注意參數的順序 )

LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以 "-lxxx" 格式,舉例:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE 生成的模塊的名稱 ( 注意應用程序名稱用 LOCAL_PACKAGE_NAME 而不是 LOCAL_MODULE)

LOCAL_MODULE_PATH 生成模塊的路徑

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS 生成模塊的標記

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME APK 應用程序的名稱

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES 預編譯 including $(BUILD_PREBUILT) 或者 $(BUILD_HOST_PREBUILT) 時所用 , 指定需要複製的可執行文件

LOCAL_PREBUILT_JAVA_LIBRARIES

LOCAL_PREBUILT_LIBS 預編譯 including $(BUILD_PREBUILT) 或者 $(BUILD_HOST_PREBUILT) 時所用 , 指定需要複製的庫 .

LOCAL_PREBUILT_OBJ_FILES

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

LOCAL_PRELINK_MODULE 是否需要預連接處理 ( 默認需要,用來做動態庫優化 )

LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊 ( 模塊安裝時將會同步安裝它所依賴的模塊 )

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES 可鏈接動態庫

LOCAL_SRC_FILES 編譯源文件

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES 可鏈接靜態庫

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫 ( 這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼 )

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH

本文來自 CSDN 博客,轉載請標明出處: http://blog.csdn.net/jiajie961/archive/2010/11/09/5997147.aspx