- 浏览: 513071 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
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_LI
BRARY)
表示编译成动态库。
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:= \
A
udioHardwareGeneric.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_VA
RS)
# 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_INSTRUME
NTATION_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_MODUL
E_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_PAT
H
发表评论
-
Android display架构分析
2011-11-08 14:43 2602Android display架构分析 高通7系列硬件架 ... -
android usb流程(转载加整理)
2011-11-08 14:42 3136android usb流程(转载加整理) ... -
C++友元friend --c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作
2011-09-08 16:36 966<!-- [if gte mso 9]><x ... -
Jni函数调用大全
2011-09-08 16:34 9784Jni函数调用 ... -
android linux 基础知识总结
2011-09-08 16:23 2848android linux 基础知识总结 ===== ... -
pthread_create用法 c线程
2011-09-08 09:34 3635今天开始学习linux下用C开发多线程程序,Linux系统下的 ... -
C++多线程入门(一)
2011-09-05 14:32 1243第1节 背景 为了更好的理解多线程的概念,先对进程,线程 ... -
C++中的虚函数(virtual function)多态
2011-09-05 13:41 9301.简介 虚函数是 ... -
添加一个系统服务sytem service
2011-09-02 15:51 2507方法一: 1.在应用中 com.xxx.spi.SPLLi ... -
android 中使用socket使native和framework通信
2011-09-01 10:14 1203android 中使用socket使native和frame ... -
让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher
2011-09-01 09:49 908[转]让你自己写的Android的Launcher成为系统中第 ... -
No implementation found for native Landroid/
2011-08-31 17:30 2422No implementation ... -
Java 线程中的Join、wait、notify,sleep【转】
2011-05-30 09:37 1088Java 线程中的Join、wait、notify ... -
android回调函数总结
2011-02-14 13:26 4385回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函 ... -
IPC框架分析 Binder,Service,Service manager
2011-01-22 13:10 1316IPC框架分析 Binder,Servic ... -
Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等
2011-01-22 11:41 2212Android中几种图像特效处理的小技巧,比如圆角,倒影,还有 ... -
Android中SurfaceView的使用示例
2011-01-19 20:54 880SurfaceView在游戏开发中有着举足轻重的地位,它对于画 ... -
Android 的 SurfaceView 双缓冲应用
2011-01-19 20:46 1802双缓冲是为了防止动画闪烁而实现的一种多线程应用,基于Surfa ... -
Android Content Provider[转]
2010-10-21 14:42 1190Android应用程序可以使用 ... -
我的数据你来用—ContentProvider介绍
2010-08-25 09:09 21841.第一步 在Eclipse中, ...
相关推荐
android.mk文件简介** `android.mk`文件是Android NDK中的Makefile,它的主要任务是告诉构建系统如何处理源代码,包括哪些文件需要编译,如何链接,以及如何设置编译选项等。通过编写`android.mk`,开发者可以控制...
"Android NDK开发指南-android.mk文件" Android NDK 是 Android 操作系统中的一种开发工具,用于使用 C/C++ 语言编写 Android 应用程序。Android.mk 文件是 NDK 中的一个重要组件,用于描述编译系统的配置,使得...
Android.mk文件是Android系统构建过程中不可或缺的一部分,它用于定义模块(module)的编译规则,包括源文件、依赖项、编译选项等。本篇文章将深入探讨Android.mk文件的语法规范,帮助开发者理解和掌握Android系统...
### Android.mk 文件语法规范及使用模板详解 #### 一、引言 在深入探讨`Android.mk`文件的具体语法规范和使用模板之前,我们先来简要回顾一下`Android.mk`文件的基本概念及其在Android NDK中的作用。`Android.mk`...
1. **Android.mk文件介绍**:`Android.mk`是Android NDK中的一个配置文件,它定义了如何将C/C++源码编译为Android可执行文件。通常,它包含编译规则、库链接、编译标志等信息。 2. **Cocos2d-x与Android.mk**:...
1.Android系统源码定制和编译方法(Android7.0至...4.Android.mk或Android.bp编译生成Apk、静态库、动态库、可执行文件等的使用方法 5.Android系统定制有源码App或无源码App时关于Android.mk或Android.bp的使用方法
### Android.mk 文件详解 #### 一、概述 在Android开发中,`Android.mk`是一个非常重要的文件,主要用于定义模块的构建规则。它基于GNU Make工具,是Android NDK(Native Development Kit)的一部分,用于编译C/...
放在libffmpeg目录下的android.mk文件,根据Scott Wong给出的文档进行了修改,可以直接使用。另外还需要在Libavcodec、libavformat等目录下添加android.mk文件,libavcodec示例如下: LOCAL_PATH := $(call my-dir) ...
Android.mk文件是Android系统中的编译配置脚本,类似于Linux中的Makefile。它用于描述源代码结构,并告诉编译系统如何编译和生成目标文件。 Android.mk文件是GNU Makefile的一部分,将被编译系统解析一次或多次。 ...
从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解。了解了标准的Makefile后,发现Android.mk其实是把真正的Makefile包装起来,做成了一个对使用者来说很简单的东西。使用它来编译...
将android.mk转换为android.bp
Android构建系统读取所有的Android.mk文件,根据模块描述变量构建目标,并处理依赖关系。然后,使用NDK(Native Development Kit)或AOSP(Android Open Source Project)的构建工具进行编译、链接和打包。 总结来...
Android.mk 文件是 Android NDK 的核心组成部分之一,用于描述 C 或 C++ 源代码文件的编译规则。通过深入理解 Android.mk 文档规范,开发者能够更好地掌握 Android 编译流程的核心概念。 #### 二、基本概念与术语 ...
Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译 配置文件就是 Android.mk。在 Android...
本篇文章将详细介绍如何进行`androidmk`到`Android.bp`的转换,并探讨两者之间的差异以及转换工具的使用方法。 一、`Android.mk`与`Android.bp`概述 1. `Android.mk`:这是Android早期使用的构建系统,基于GNU ...
FFMPEG编译Android.mk文件
### Android.mk 编译系统与文件语法规范 #### 引言 `Android.mk`作为Android NDK中的核心配置文件之一,主要用于向构建系统描述项目的C/C++源代码组织方式及构建逻辑。对于深入理解Android NDK项目构建流程、优化...
其中,Android.mk 文件是编译系统的核心配置文件,用于指定编译模块的源文件、编译器选项和依赖项。下面是 Android.mk 文件的写法和相关知识点: ### 1. 指定 LOCAL_PATH 变量 Android.mk 文件首先需要指定 LOCAL_...