`

Android编译系统一

 
阅读更多
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 LOCAL_SRC_FILES:= /
        com_ura_test_JNITest.c
 LOCAL_C_INCLUDES := /
        $(JNI_H_INCLUDE)
 LOCAL_SHARED_LIBRARIES := libutils
 LOCAL_PRELINK_MODULE := false
 LOCAL_MODULE := libJNITest
 include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH - 编译时的目录

$(call 目录,目录….) 目录引入操作符

如该目录下有个文件夹名称Src,则可以这样写 $(call src) 等



CLEAR_VARS –

在build/core/config.mk 定义 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk

       详细看build/core/clear_vars.mk

      Include 是 *.mk 文件的运算符。可以通过include 包含自定义的.mk文件(即是自定义编译规则)或是引用系统其他的.mk文件(系统定义的编译规则)。

 

LOCAL_SRC_FILES - 编译的源文件

可以是.c, .cpp, .java, .S(汇编文件)或是.aidl等格式

写法是不同的文件用空格隔开。如果编译目录子目录,采用相对路径,如子目录/文件名。也可以通过$(call 目录),指明编译某目录下所有.c/.cpp/.java/.S/ .aidl文件.

追加文件 LOCAL_SRC_FILES += 文件



LOCAL_C_INCLUDES - 需要包含的头文件目录

     可以是系统定义路径,也可以是相对路径. 如该编译目录下有个include目录,写法是include/*.h



LOCAL_SHARED_LIBRARIES - 链接时需要的外部共享库

   还有链接的外部静态库用LOCAL_STATIC_LIBRARY

如果是java文件,要加入jar包用LOCAL_JAVA_LIBRARIES



LOCAL_PRELINK_MODULE - 是否需要prelink处理 .Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具.



LOCAL_MODULE - 编译的目标对象

module 是指系统的native code ,相对用Java 写成的 Android  application 称为package。Package用LOCAL_PACKAGE_NAME.



BUILD_SHARED_LIBRARY - 指明要编译成动态库。

编译的目标,用include 操作符,动态库会用到系统的编译脚本host_share_library.mk 编译静态库目标,会用到系统的编译脚本host_static_library.mk . 用BUILD_STATIC_LIBRARY来指明要编译成静态库。如果是java文件的话,会用到系统的编译脚本host_java_library.mk,用BUILD_PACKAGE来指明。三个编译脚本都放到build/core目录下。



LOCAL_ARM_MODE := arm

目前Android大部分都是基于Arm处理器的,Arm指令用两种模式Thumb(每条指令两个字节)和arm指令(每条指令四个字节)



LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays

通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

  

Android.mk 也通过ifeq关键字支持条件选择语句,类如下面

ifeq ($(HOST_OS),linux)

# Use the futex based mutex and condition variable

# implementation from android-arm because it's shared mem safe

  LOCAL_SRC_FILES += /

         futex_synchro.c /

         executablepath_linux.cpp

endif

ifeq ($(HOST_OS),darwin)

  LOCAL_SRC_FILES += /

         executablepath_darwin.cpp

endif

   总结,android.mk 的写法,系统源代码提供了大量的android.mk可以作为参考资料。在编写android.mk的时候,有任何碰到疑问的地方,可以拿系统的android.mk看看, 相信写个android.mk 应该没有什么困难.

参考资料:http://blog.csdn.net/wukunting/article/details/4640100
分享到:
评论

相关推荐

    android编译系统分析.pdf

    Android编译系统分析是Android系统中一个非常重要的组件,它负责将Android应用程序代码编译成能够在Android设备上运行的机器代码。下面是Android编译系统分析的详细知识点: 一、Android编译系统概述 Android...

    Android编译系统分析

    Android编译系统分析,odt格式的,用openoffice打开,介绍分析了Android的编译系统:原理和如何添加本地模块编译,怎样编译成动态库,静态库,可执行程序。

    android编译系统分析(很详细)

    Android 编译系统是 Android 操作系统的核心组件之一,它负责将源代码编译成可执行文件。Android 编译系统的分析对于Android 开发者来说非常重要,因为它可以帮助开发者更好地理解 Android 的编译过程,从而更好地...

    Android项目编译系统

    Android编译系统使用了一套专门的编译工具,包括Java编译器、Android Asset Packaging Tool (AAPT)、Android NDK等。 一、编译系统的主要组成部分: 1. Java编译器:负责将Java源文件编译成.class字节码文件,然后...

    Android的编译系统.pdf

    通过上述内容,我们可以看到Android编译系统的复杂性和灵活性,它能够根据不同的需求定制化构建出适合特定设备和应用场景的操作系统。对于初学者来说,掌握这些基础概念和流程是理解和开发Android系统的关键。

    Android编译系统(四)Android编译系统框架分析及main.mk 分析

    然而,Android编译系统相对集中,位于Android源码的build/core目录下,包含了大量的makefile(*.mk)文件和shell脚本。Google为了满足多目标(MultipleTargets)、非递归构建(Non-RecursiveMake)、快速编译测试...

    Android编译系统分析-转

    总的来说,Android编译系统是一个高度定制化的、复杂的构建框架,它允许开发者灵活地配置和构建针对不同硬件平台和产品需求的Android系统。理解和掌握这个系统对于优化开发流程、调试问题以及进行系统级别的定制至关...

    Android编译系统组成

    Android编译系统组成

    android编译.doc

    Android 编译环境搭建是 Android 应用开发的必要步骤,本文将指导读者从零开始搭建 Android 编译环境,并详细介绍编译 Android 的步骤。 一、安装必要的软件环境 在 Ubuntu 9.10 平台上,需要安装以下软件包: * ...

    android编译系统详解

    总结来说,Android编译系统是一个复杂的工程化编译方法,它依赖于Makefile的编写和Shell脚本的应用。了解和熟练掌握Make工具的使用、Makefile的规则和结构以及Shell脚本编程,对于理解Android编译构建系统至关重要。...

    Android4.4编译系统介绍.pdf

    Android4.4编译系统介绍.pdf

    android编译系统框架分析及main.mk分析

    尽管Android源代码体积庞大(通过`repo`同步后大约为2GB),这可能会给人一种Android系统极其复杂的印象,但实际上,通过对Android编译系统的深入分析,我们可以发现其背后的设计理念与实现机制。本文旨在详细分析...

    Android编译过程详解

    在深入探讨Android编译过程之前,首先需要理解的是Android系统的开放性使得开发者和制造商能够根据特定硬件需求定制操作系统。例如,小米、LePhone和M9等品牌就利用这一特性为自家设备打造独特的用户体验。要对...

    全志 Android编译服务器系统安装标准手册

    根据提供的文件内容,本知识点将详细介绍全志Android编译服务器系统安装标准手册中的内容,重点关注Ubuntu Server 12.04 LTS的操作系统安装步骤。 1. **下载Ubuntu Server 12.04 LTS** - 访问Ubuntu官方网站并下载...

    android编译系统makefile(Android.mk)写法.pdf

    Android 编译系统 Makefile (Android.mk) 写法 Android 编译系统使用 Makefile 文件来编译和构建 Android 系统中的模块。其中,Android.mk 文件是编译系统的核心配置文件,用于指定编译模块的源文件、编译器选项和...

    Ubuntu系统下Android源码编译.pdf

    在Android开发领域,掌握源码编译是一项至关重要的技能,尤其是在Ubuntu环境下。Ubuntu作为一个流行的Linux发行版,因其稳定性和开源特性,成为了许多开发者选择的开发平台。本文将深入探讨Ubuntu系统下Android源码...

    freetype android 编译so库

    Freetype是一个流行的开源字体渲染库,广泛用于多种操作系统和设备,包括Android。本篇将详细介绍如何在Android环境中编译Freetype库,生成适用于64位架构的SO(共享对象)库。 首先,理解Freetype库:Freetype是一...

    Android 编译系统分析.doc

    Android编译系统是Android操作系统开发的关键组成部分,负责将源代码转化为可在不同设备上运行的可执行文件和库。本文将深入解析Android编译系统的结构和工作原理,重点关注四种类型的Make文件及其作用。 首先,...

    MTK android 编译环境搭建

    总结来说,MTK Android编译环境的搭建主要包括了更新系统,安装编译所需的库,安装JDK,以及配置环境变量这四个关键步骤。这个环境使得开发者能够在Ubuntu环境下编译针对MediaTek处理器的Android系统,为定制和优化...

    android编译系统makefile(Android.mk)写法

    在Android开发中,构建系统是至关重要的,它负责编译、链接和打包应用程序或系统组件。其中,`Android.mk`文件是Android构建系统的核心部分,它是一个Makefile,用于指导NDK(Native Development Kit)如何处理C/C++...

Global site tag (gtag.js) - Google Analytics