- 浏览: 231180 次
- 性别:
- 来自: 镇江
文章分类
最新评论
-
Luozii:
安卓8.0的system.img死活解不开。http://s ...
yaffs文件打包解包工具 -
不是流氓兔:
不用设置代理了,现在官网有中文站了 http://www.my ...
myeclipse官方网站打不开解决办法 -
nicekwell:
MNC也有3位的,但我国都是2位
IMSI , MCC MNC 的概念 -
hxy1000:
android里没有模态,不过有的对话框效果类似于模态
android 模态与非模态对话框实现 -
lyx0206331:
...
window adb 安装以及usb驱动
(转自 http://www.cnblogs.com/lilactutu/archive/2010/12/03/1895537.html)
一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中 列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,在升级NDK后,你应该得到新的toolchain/platform支 持,而且不需要改变你的Android.mk文件。
先看一个简单的例子:一个简单的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相应的Android.mk文件会象下面这样:
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
我们来解释一下这几行代码:
LOCAL_PATH := $(call my-dir)
一个 Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
include $( CLEAR_VARS)
CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE := helloworld
LOCAL_MODULE 变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包 含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这 里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。
在 Android中增加本地程序或者库,这些程序和库与其所载路径没有任何关系,只和它们的Android.mk文件有关系。Android.mk和普通 的Makefile有所不同,它具有统一的写法,主要包含一些系统公共的宏。
在一个Android.mk中可以生成多个可执行程序、动态库和静态库。
1,编译应用程序的模板:
#Test Exe
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
(菜鸟级别解 释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名 称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名 称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。
2,编译静态库的模板:
#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库。
3,编译动态库的模板:
#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个静态库。
以上三者的生成结果分别在如下,generic依具体target会变:
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates
另外,在Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATH和 LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT: 表示system文件系统。
TARGET_OUT_DATA:表示 data文件系统。
用法如:
CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)
一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中 列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,在升级NDK后,你应该得到新的toolchain/platform支 持,而且不需要改变你的Android.mk文件。
先看一个简单的例子:一个简单的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相应的Android.mk文件会象下面这样:
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
我们来解释一下这几行代码:
LOCAL_PATH := $(call my-dir)
一个 Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
include $( CLEAR_VARS)
CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE := helloworld
LOCAL_MODULE 变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包 含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这 里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。
在 Android中增加本地程序或者库,这些程序和库与其所载路径没有任何关系,只和它们的Android.mk文件有关系。Android.mk和普通 的Makefile有所不同,它具有统一的写法,主要包含一些系统公共的宏。
在一个Android.mk中可以生成多个可执行程序、动态库和静态库。
1,编译应用程序的模板:
#Test Exe
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
(菜鸟级别解 释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名 称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名 称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。
2,编译静态库的模板:
#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库。
3,编译动态库的模板:
#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个静态库。
以上三者的生成结果分别在如下,generic依具体target会变:
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates
另外,在Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATH和 LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT: 表示system文件系统。
TARGET_OUT_DATA:表示 data文件系统。
用法如:
CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)
评论
1 楼
sammor
2011-12-22
哥们,你上面写的“在一个Android.mk中可以生成多个可执行程序、动态库和静态库。”指的是什么意思呢?
在一个Android.mk中是否可以一次编译,生成两个静态库呢?包含的源文件是不同的。
在一个Android.mk中是否可以一次编译,生成两个静态库呢?包含的源文件是不同的。
发表评论
-
linux andorid apk 反编译
2012-11-19 22:02 1508反编译apk 代码 1.下载dex2jar 反编译源码 jdg ... -
window adb 安装以及usb驱动
2012-06-27 22:32 53501.在windows下安装adb 将附件解压,system3 ... -
jni 入门实例
2012-06-10 22:15 3810jni HelloWorld实例 1.编写一个HelloWo ... -
andorid animation
2012-05-27 11:37 1762animation 在android 系统中,是一种帧动画,前 ... -
vim 添加中文文档帮助
2012-04-07 18:38 2275(整理于网络) vim中文文档的主页是: http://vi ... -
Failure [INSTALL_FAILED_OLDER_SDK]
2012-04-07 15:11 149281.安装文件与运行环境的skd不匹配 打开源码目录下的And ... -
ubuntu wine 安装source insight
2012-03-04 20:33 47271 sudo apt-get install wine 下载s ... -
yaffs文件打包解包工具
2012-03-03 18:35 13598Yaffs(Yet Another Flash File Sy ... -
android 模态与非模态对话框实现
2012-02-29 23:31 197701.模态对话框是指对话框不消失,不能对其他页面进行操作,也就是 ... -
链接手机设备安装apk或其他操作no permission解决方法
2012-02-26 21:11 1335如题 依次执行以下命令 sudo su adb kil ... -
android intent命名规范
2011-12-10 23:39 1360ACTION_MAIN android:name=&quo ... -
touch mode
2011-12-10 23:34 1750touch mode 是用户在交互过程中的一种视图模式。当用户 ... -
获取当前task的topactivity
2011-09-22 19:10 4574获取当前task的activity方法 ActivityM ... -
android intent 常用用法
2011-08-22 22:45 966转自 http://www.cnblogs.com/lil ... -
设置android编码格式与包的引入格式于源码一致
2011-07-17 20:44 2143andorid源码编码格式以及引入包规则 在源码根目录---d ... -
关于设置activity样式
2011-07-08 16:09 2478在android中设置activity的样式时有两种方法 1. ... -
IMSI , MCC MNC 的概念
2011-07-01 11:16 9944TelephonyManager telManager ... -
android 修改标题样式以及内容
2011-05-06 15:18 4124如果大家认为android手机上标题样式不美观大家可以自己定义 ... -
自定义activity启动退出效果
2011-05-06 13:59 1685android 自2.0以后提供了开发者可以自定义activi ... -
android test
2011-04-28 10:17 1369新建测试项目 Name: "HelloAn ...
相关推荐
本篇文章将详细介绍如何进行`androidmk`到`Android.bp`的转换,并探讨两者之间的差异以及转换工具的使用方法。 一、`Android.mk`与`Android.bp`概述 1. `Android.mk`:这是Android早期使用的构建系统,基于GNU ...
尽管如此,Android.mk仍然是很多现有项目的基础,并且在特定场景下更灵活。理解Android.mk的语法规范对维护老项目或理解Android系统构建过程至关重要。 总结,Android.mk文件是Android系统构建过程中的核心配置文件...
### Android.mk 文件详解 #### 一、概述 在Android开发中,`Android.mk`是一个非常重要的文件,主要用于定义模块的构建规则。它基于GNU Make工具,是Android NDK(Native Development Kit)的一部分,用于编译C/...
除了以上基础配置外,`Android.mk`还支持更多高级特性,包括但不限于: 1. **定义多个module**:可以在同一个`Android.mk`文件中定义多个module,只需要重复上述步骤即可。 2. **使用相同的资源文件**:可以在不同...
在描述中提到的“最简单的android.mk例子,直接下下来NDK就可以”,这意味着我们有一个基础的`android.mk`示例,无需复杂的配置,只需具备NDK环境即可运行。通常,一个简单的`android.mk`文件会包含以下几个主要部分...
### Android.mk 文件详解 #### 一、概述 `Android.mk` 是 Android NDK 中用于描述项目源代码构建规则的关键文件。此文件对于那些希望通过 C/C++ 编写原生代码并将其集成到 Android 应用中的开发者至关重要。下面将...
`Android.mk`文件是Android构建系统中的一个关键部分,它是一个Makefile,用于指导构建过程。本篇将深入探讨`Android.mk`的写法及其在Android编译系统中的作用。 1. **LOCAL_PATH变量**: 在`Android.mk`文件中,`...
然而,Android编译系统相对集中,位于Android源码的build/core目录下,包含了大量的makefile(*.mk)文件和shell脚本。Google为了满足多目标(MultipleTargets)、非递归构建(Non-RecursiveMake)、快速编译测试...
5. **Android.mk**:在Android开发中,Android.mk是一个Makefile,它告诉Android构建系统如何编译C/C++原生代码。包括memtester在内的原生库或应用都需要这样的文件来指定编译选项、依赖库和目标架构。 6. **内存...
2. **base_rules.mk**(基础规则Makefile): 定义了一些通用的规则,用于规范化其他Makefile文件中的变量。 3. **config.mk**(配置Makefile): 包含编译参数和编译命令的设置。 4. **definations.mk**(定义...
Android_mk测试包,提供:可执行程序,共享库,静态库的基本写法.方便作为调试沟通的基础包
动态加载通常使用`System.loadLibrary()`方法,而静态加载则是在Android.mk或CMakeLists.txt文件中指定。 BinderDemo-master.zip则可能是一个关于Android Binder机制的示例项目。Binder是Android系统中进程间通信...
1. **Android NDK基础知识**:NDK是Google提供的一个工具集,允许开发者在Android应用中使用C和C++代码。它可以提高性能,特别是对于计算密集型或图形密集型的应用。NDK提供了交叉编译环境,使得开发者可以在本地...
开发者需要理解Android的HAL机制,熟悉C++和Java混合编程,以及Android的编译系统如Android.mk和Android.bp。 5. **移植RTOS**:移植RTOS涉及目标平台的硬件适配、中断系统、内存管理等,需要对目标平台的CPU架构和...
1. **Android平台构成**:Android的基础是Linux内核,它包含了中间件层,如SQLite数据库系统,以及一系列关键应用程序,如电话、短信、地图和浏览器。此外,Android提供了一个Java框架,允许开发者使用Java语言进行...
这份文档"Android SDK编译,带自己api的android.jar编译.pdf"详细介绍了如何在Android源码的基础上编译带有自己API的android.jar。以下是整个过程的详细步骤: 1. **添加自定义源代码**: - 在Android源码树的`...
### Android编译系统详解 #### 一、Android编译系统简介 Android的编译系统是其核心组件之一,为开发者提供了高效且稳定的编译环境。...理解和掌握这些基础知识对于深入学习Android编译系统至关重要。
5. **Android.mk** 或 **build.gradle(app)**:如果是旧版的NDK项目,可能会包含Android.mk文件用于原生代码的编译;对于使用Gradle构建的项目,会有另一个app模块的build.gradle文件。 通过分析这个项目,开发者...
3. **本地项目结构**:理解Android原生模块的项目结构,包括Android.mk和Application.mk文件的使用,用于构建和配置原生库。 4. **C/C++编程**:复习C/C++基础知识,如数据类型、控制流程、函数、指针等,并介绍...