ANDROID Porting系列三、Build Cookbook
来源:互联网 发布:单声道蓝牙软件 编辑:程序博客网 时间:2024/05/21 03:57
http://source.android.com/porting/build_cookbook.html
Android的Build Cookbook提供代码片段以帮助您快速执行一些常见的build任务。如需指示,请参阅本节中的其他build文件.
Building asimple 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)
Building aAPK that depends on a static .jar file
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)
Building aAPK that should be signed with the platform 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)
Building aAPK that should be signed with a specific vendor 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)
Adding aprebuilt APK
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)
Adding aStatic Java Library
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)
Android.mkVariables
这些都是变量,你会经常看到按字母顺序列出Android.mk文件。首先,关于命名变量说明:
· LOCAL_ -这些变量被设置每个模块。他们清除了包括$(CLEAR_VARS)行,所以你可以依靠他们正在该文件后,包括空的。大部分你的变量在大多数模块将使用LOCAL_变量。
· PRIVATE_ -这些变量是make-target-specific变量。这意味着他们只能在该模块中的命令可用。这也意味着你从后面你包含的模块回来他们也不会改变。(link tothe make documentation) 介绍了更多target-specific variables。
· HOST_ and TARGET_ -这些包含特定于主机或目标的基础之上的目录和定义。不要设置HOST_和TARGET_开头的变量在你的makefile..
· BUILD_ and CLEAR_VARS -这包含了名字和定义模板的makefiles。一些例子CLEAR_VARS和BUILD_HOST_PACKAGE。
· 任何其他的名字在您使用Android.mk是公平的。但是,请记住,这是一个非递归生成系统,因此它可能是您的变量将被改变,以后推出的另一Android.mk,并且一样当为您的规则/ module执行的命令。
Parameter
Description
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
In Android.mk files that include $(BUILD_PACKAGE)
set this to the set of files you want built into your app. Usually:
LOCAL_ASSET_FILES += $(call find-subdir-assets)
LOCAL_BUILT_MODULE_STEM
LOCAL_C_INCLUDES
Additional directories to instruct the C/C++ compilers to look for header files in. These paths are rooted at the top of the tree. Use LOCAL_PATH
if you have subdirectories of your own that you want in the include paths. For example:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
You should not add subdirectories of include to LOCAL_C_INCLUDES
, instead you should reference those files in the #include
statement with their subdirectories. For example:
#include <utils/KeyedVector.h>
not #include <KeyedVector.h>
LOCAL_CC
If you want to use a different C compiler for this module, set LOCAL_CC to the path to the compiler. If LOCAL_CC is blank, the appropriate default compiler is used.
LOCAL_CERTIFICATE
LOCAL_CFLAGS
If you have additional flags to pass into the C or C++ compiler, add them here. For example:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS
The set of files to copy to the install include tree. You must also supply LOCAL_COPY_HEADERS_TO
.
This is going away because copying headers messes up the error messages, and may lead to people editing those headers instead of the correct ones. It also makes it easier to do bad layering in the system, which we want to avoid. We also aren't doing a C/C++ SDK, so there is no ultimate requirement to copy any headers.
LOCAL_COPY_HEADERS_TO
The directory within "include" to copy the headers listed in LOCAL_COPY_HEADERS
to.
This is going away because copying headers messes up the error messages, and may lead to people editing those headers instead of the correct ones. It also makes it easier to do bad layering in the system, which we want to avoid. We also aren't doing a C/C++ SDK, so there is no ultimate requirement to copy any headers.
LOCAL_CPP_EXTENSION
If your C++ files end in something other than ".cpp
", you can specify the custom extension here. For example:
LOCAL_CPP_EXTENSION := .cc
Note that all C++ files for a given module must have the same extension; it is not currently possible to mix different extensions.
LOCAL_CPPFLAGS
If you have additional flags to pass into only the C++ compiler, add them here. For example:
LOCAL_CPPFLAGS += -ffriend-injection
LOCAL_CPPFLAGS
is guaranteed to be after LOCAL_CFLAGS
on the compile line, so you can use it to override flags listed in LOCAL_CFLAGS
LOCAL_CXX
If you want to use a different C++ compiler for this module, set LOCAL_CXX to the path to the compiler. If LOCAL_CXX is blank, the appropriate default compiler is used.
LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
LOCAL_FORCE_STATIC_EXECUTABLE
If your executable should be linked statically, set LOCAL_FORCE_STATIC_EXECUTABLE:=true
. There is a very short list of libraries that we have in static form (currently only libc). This is really only used for executables in /sbin on the root filesystem.
LOCAL_GENERATED_SOURCES
Files that you add to LOCAL_GENERATED_SOURCES
will be automatically generated and then linked in when your module is built. See the Custom Tools template makefile for an example.
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
When linking Java apps and libraries, LOCAL_JAVA_LIBRARIES
specifies which sets of java classes to include. Currently there are two of these: core
and framework
. In most cases, it will look like this:
LOCAL_JAVA_LIBRARIES := core framework
Note that setting LOCAL_JAVA_LIBRARIES
is not necessary (and is not allowed) when building an APK with "include $(BUILD_PACKAGE)
". The appropriate libraries will be included automatically.
LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
LOCAL_LDFLAGS
You can pass additional flags to the linker by setting LOCAL_LDFLAGS
. Keep in mind that the order of parameters is very important to ld, so test whatever you do on all platforms.
LOCAL_LDLIBS
LOCAL_LDLIBS
allows you to specify additional libraries that are not part of the build for your executable or library. Specify the libraries you want in -lxxx format; they're passed directly to the link line. However, keep in mind that there will be no dependency generated for these libraries. It's most useful in simulator builds where you want to use a library preinstalled on the host. The linker (ld) is a particularly fussy beast, so it's sometimes necessary to pass other flags here if you're doing something sneaky. Some examples:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl,-z,origin
LOCAL_MODULE
LOCAL_MODULE
is the name of what's supposed to be generated from your Android.mk. For exmample, for libkjs, the LOCAL_MODULE
is "libkjs" (the build system adds the appropriate suffix -- .so .dylib .dll). For app modules, use LOCAL_PACKAGE_NAME
instead of LOCAL_MODULE
.
LOCAL_MODULE_PATH
Instructs the build system to put the module somewhere other than what's normal for its type. If you override this, make sure you also set LOCAL_UNSTRIPPED_PATH
if it's an executable or a shared library so the unstripped binary has somewhere to go. An error will occur if you forget to.
See Putting modules elsewhere for more.
LOCAL_MODULE_STEM
LOCAL_MODULE_TAGS
Set LOCAL_MODULE_TAGS
to any number of whitespace-separated tags.
This variable controls what build flavors the package gets included in. For example:
· user
: include this in user/userdebug builds
· eng
: include this in eng builds
· tests
: the target is a testing target and makes it available for tests
· optional
: don't include this
LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILE
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME
LOCAL_PACKAGE_NAME
is the name of an app. For example, Dialer, Contacts, etc.
LOCAL_POST_PROCESS_COMMAND
For host executables, you can specify a command to run on the module after it's been linked. You might have to go through some contortions to get variables right because of early or late variable evaluation:
module := $(HOST_OUT_EXECUTABLES)/$(LOCAL_MODULE)
LOCAL_POST_PROCESS_COMMAND := /Developer/Tools/Rez -d __DARWIN__ -t APPL/
-d __WXMAC__ -o $(module) Carbon.r
LOCAL_PREBUILT_EXECUTABLES
When including $(BUILD_PREBUILT) or $(BUILD_HOST_PREBUILT), set these to executables that you want copied. They're located automatically into the right bin directory.
LOCAL_PREBUILT_JAVA_LIBRARIES
LOCAL_PREBUILT_LIBS
When including $(BUILD_PREBUILT) or $(BUILD_HOST_PREBUILT), set these to libraries that you want copied. They're located automatically into the right lib directory.
LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE
LOCAL_REQUIRED_MODULES
Set LOCAL_REQUIRED_MODULES
to any number of whitespace-separated module names, like "libblah" or "Email". If this module is installed, all of the modules that it requires will be installed as well. This can be used to, e.g., ensure that necessary shared libraries or providers are installed when a given app is installed.
LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION
LOCAL_SHARED_LIBRARIES
These are the libraries you directly link against. You don't need to pass transitively included libraries. Specify the name without the suffix:
LOCAL_SHARED_LIBRARIES := /
libutils /
libui /
libaudio /
libexpat /
libsgl
LOCAL_SRC_FILES
The build system looks at LOCAL_SRC_FILES
to know what source files to compile -- .cpp .c .y .l .java. For lex and yacc files, it knows how to correctly do the intermediate .h and .c/.cpp files automatically. If the files are in a subdirectory of the one containing the Android.mk, prefix them with the directory name:
LOCAL_SRC_FILES := /
file1.cpp /
dir/file2.cpp
LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_LIBRARIES
These are the static libraries that you want to include in your module. Mostly, we use shared libraries, but there are a couple of places, like executables in sbin and host executables where we use static libraries instead.
LOCAL_STATIC_LIBRARIES := /
libutils /
libtinyxml
LOCAL_UNINSTALLABLE_MODULE
LOCAL_UNSTRIPPED_PATH
Instructs the build system to put the unstripped version of the module somewhere other than what's normal for its type. Usually, you override this because you overrode LOCAL_MODULE_PATH
for an executable or a shared library. If you overrode LOCAL_MODULE_PATH
, but not LOCAL_UNSTRIPPED_PATH
, an error will occur.
See Putting modules elsewhere for more.
LOCAL_WHOLE_STATIC_LIBRARIES
These are the static libraries that you want to include in your module without allowing the linker to remove dead code from them. This is mostly useful if you want to add a static library to a shared library and have the static library's content exposed from the shared library.
LOCAL_WHOLE_STATIC_LIBRARIES := /
libsqlite3_android
LOCAL_YACCFLAGS
Any flags to pass to invocations of yacc for your module. A known limitation here is that the flags will be the same for all invocations of YACC for your module. This can be fixed. If you ever need it to be, just ask.
LOCAL_YACCFLAGS := -p kjsyy
OVERRIDE_BUILT_MODULE_PATH
- ANDROID Porting系列三、Build Cookbook
- Android Build Cookbook
- Android Porting Book--Android Build System
- ANDROID Porting系列九、Lights
- ANDROID Porting系列十、Audio
- Build Cookbook
- Build Cookbook
- Build Cookbook
- Build Cookbook
- Build Cookbook
- Build Cookbook
- ANDROID Porting系列一、ANDROID编译系统
- ANDROID Porting系列二、配置一个新产品
- ANDROID Porting系列五、定制化
- ANDROID Porting系列六、Bring Up
- ANDROID Porting系列七、Display Drivers
- ANDROID Porting系列十一、Power Management
- ANDROID Porting系列十一Power Management
- Lucene采用TermVector高亮显示方法出现问题
- Symbian集结C++高手
- chmod命令中的suid和guid
- C++ 模板的问题
- 转: 技术不是一切,可以作为兴趣
- ANDROID Porting系列三、Build Cookbook
- 系统运行的命令集锦
- asp.net ajax control ModalPopupExtender demo
- ASP.NET的分页控件-AspNetPager
- 我的C算法库[5]:实现数据结构ArrayList
- asp.net控制Excel----弹出打开下载框(NEW)
- Oracle 常见故障及日常规划
- SecureCRT连接Linux--Ubuntu
- Android大计划:人人都是移动软开发者