模块的编译方式
来源:互联网 发布:西安三星项目瘫痪 知乎 编辑:程序博客网 时间:2024/05/20 18:00
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/
Android 源码中包含了许多的模块,模块的类型有很多种,例如:Java 库,C/C++ 库,APK 应用,以及可执行文件等 。并且,Java 或者 C/C++ 库还可以分为静态的或者动态的,库或可执行文件既可能是针对设备(本文的“设备”指的是 Android 系统将被安装的设备,例如某个型号的手机或平板)的也可能是针对主机(本文的“主机”指的是开发 Android 系统的机器,例如装有 Ubuntu 操作系统的 PC 机或装有 MacOS 的 iMac 或 Macbook)的。不同类型的模块的编译步骤和方法是不一样,为了能够一致且方便的执行各种类型模块的编译,在 config.mk 中定义了许多的常量,这其中的每个常量描述了一种类型模块的编译方式,这些常量有:
- BUILD_HOST_STATIC_LIBRARY
- BUILD_HOST_SHARED_LIBRARY
- BUILD_STATIC_LIBRARY
- BUILD_SHARED_LIBRARY
- BUILD_EXECUTABLE
- BUILD_HOST_EXECUTABLE
- BUILD_PACKAGE
- BUILD_PREBUILT
- BUILD_MULTI_PREBUILT
- BUILD_HOST_PREBUILT
- BUILD_JAVA_LIBRARY
- BUILD_STATIC_JAVA_LIBRARY
- BUILD_HOST_JAVA_LIBRARY
通过名称大概就可以猜出每个变量所对应的模块类型。(在模块的 Android.mk 文件中,只要包含进这里对应的常量便可以执行相应类型模块的编译。对于 Android.mk 文件的编写请参见后文:“添加新的模块”。)
这些常量的值都是另外一个 Make 文件的路径,详细的编译方式都是在对应的 Make 文件中定义的。这些常量和 Make 文件的是一一对应的,对应规则也很简单:常量的名称是 Make 文件的文件名除去后缀全部改为大写然后加上“BUILD_”作为前缀。例如常量 BUILD_HOST_PREBUILT 的值对应的文件就是 host_prebuilt.mk。
这些 Make 文件的说明如表 1 所示:
表 1. 各种模块的编译方式的定义文件
不同类型的模块的编译过程会有一些相同的步骤,例如:编译一个 Java 库和编译一个 APK 文件都需要定义如何编译 Java 文件。因此,表 3 中的这些 Make 文件的定义中会包含一些共同的代码逻辑。为了减少代码冗余,需要将共同的代码复用起来,复用的方式是将共同代码放到专门的文件中,然后在其他文件中包含这些文件的方式来实现的。这些包含关系如图 5 所示。由于篇幅关系,这里就不再对其他文件做详细描述(其实这些文件从文件名称中就可以大致猜出其作用)。
图 1. 模块的编译方式定义文件的包含关系
- 模块的编译方式
- 模块编译方式
- 使用模块编译的方式编译多个.c源文件
- Linux内核模块编译方式
- Linux2.6 模块的两种编译方式
- C模块+Python编译安装方式
- 内核模块的编译
- 编译Android的模块
- 驱动模块的编译
- 模块的规范方式
- 模块导入的方式
- Centos6.9实现基于源码编译安装LAMP(FPM模块方式)的wordpress应用
- Linux内核模块:模块的编译
- 模块及模块间的接口方式
- Android编译,模块的编译和CLEAN
- Cython的编译方式
- Java的编译方式
- 编译内核模块的方法
- win10快捷键
- iOS开发的一些奇巧淫技
- u-boot中环境变量操作和hash表
- 红黑树特点以及如何构建红黑树
- centos挂载光盘报错:mount: you must specify the filesystem type
- 模块的编译方式
- 基于qualcomm平台的kinect教程四之获取骨骼图
- jsp 页面无法正确显示后台数据 ,需多次刷新才能正确显示 在springmvc
- SVM
- jetty https服务端-2
- WCF Restful调用跨域解决方案
- android 自定义actionbar+字符串滚动显示
- 2016-9-19
- 人工神经网络(ANN)