zoukankan      html  css  js  c++  java
  • Android.mk语法解析

    Android.mk 相当于 Linux 中的 Makefile 文件,用来向安卓系统描述如何编译源代码。该文件会被编译器解析多次,所以尽量减少在 Android.mk 中声明变量。

    Android.mk 文件可以将源码打包成模块,模块可以是apk、jar包、c/c++应用程序、静态库(.a文件)和动态库(.so)。

    动态库可以被移到应用程序包(apk),静态库可以被链接入动态库。

    Android.mk 中可以定义一个或者多个模块,一个源文件也可以打包进多个模块。

     1 # Copyright 2006 The Android Open Source Project
     2 
     3 LOCAL_PATH:= $(call my-dir)
     4 include $(CLEAR_VARS)
     5 
     6 LOCAL_SRC_FILES:= 
     7     rild.c
     8 
     9 LOCAL_SHARED_LIBRARIES := 
    10     liblog 
    11     libcutils 
    12     libril 
    13     libdl
    14 
    15 # temporary hack for broken vendor rils
    16 LOCAL_WHOLE_STATIC_LIBRARIES := 
    17     librilutils_static
    18 
    19 LOCAL_CFLAGS := -DRIL_SHLIB
    20 
    21 ifeq ($(SIM_COUNT), 2)
    22     LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
    23 endif
    24 
    25 LOCAL_MODULE:= rild
    26 LOCAL_MODULE_TAGS := optional
    27 
    28 include $(BUILD_EXECUTABLE)

    在 Android.mk 中,注释以 # 开头,注释此行。

    LOCAL_PATH:= $(call my-dir)

    指定当前模块的目录。

    include $(CLEAR_VARS)

    清除 LOCAL_PATH 以外的所有 LOCAL_xxx 变量。

    LOCAL_SRC_FILES:=

      rild.c

    需要编译的源代码文件。

    LOCAL_SHARED_LIBRARIES :=
      liblog
      libcutils
      libril
      libdl

    模块运行时需要依赖的动态库。

    LOCAL_WHOLE_STATIC_LIBRARIES :=
      librilutils_static

    静态库全链接。

    LOCAL_CFLAGS := -DRIL_SHLIB

    可选的,用来在编译c/c++时附加编译选项。

    ifeq ($(SIM_COUNT), 2)
      LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
    endif

    条件编译,ifeq判断相等。

    LOCAL_MODULE:= rild

    生成的模块名称,要唯一并且不含空格,系统会自动添加前缀和后缀。

    若生成动态库,则生成 librild.so;若名称为 librild,则不会添加前缀,依然是 librild.so。

    LOCAL_MODULE_TAGS := optional

    该模块在所以版本下都编译。(user版本、eng版本、optional所有版本)

    include $(BUILD_EXECUTABLE)

    指定编译方法。

    BUILD_STATIC_LIBRARY:编译为静态库

    BUILD_SHARED_LIBRARY:编译为动态库

    BUILD_EXECUTABLE:编译为C可执行程序

    BUILD_JAVA_LIBRARY:编译为Java类库

    BUILD_PACKAGE:编译为Android应用程序包

    LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw

    指定目标文件最终安装位置——out/target/product/rk3288/system/lib/hw

    主要编译变量
    编译变量 功能
    LOCAL_PATH 指定编译路径
    LOCAL_MODULE 指定编译模块名
    LOCAL_SRC_FILES 指定编译源码列表
    LOCAL_SHARED_LIBRARIES 指定使用的c/c++共享库列表
    LOCAL_STATIC_LIBRARIES 指定使用的c/c++静态库列表
    LOCAL_STATIC_JAVA_LIBRARIES 指定使用的Java库列表
    LOCAL_CFLAGS 指定编译器参数
    LOCAL_C_INCLUDES 指定c/c++头文件路径
    LOCAL_PACKAGE_NAME 指定Android应用程序名
    LOCAL_CERTIFICATE 指定签名认证
    LOCAL_JAVA_LIBRARIES 指定使用的Java库列表
    LOCAL_SDK_VERSION 指定编译Android应用程序时的SDK版本
  • 相关阅读:
    USNews2018世界大学1250所排行榜
    2017年高盛“漂亮50”股票名单
    斯坦福纳米科学家崔屹:做顶级科研,还要开成功公司
    你的死工资正在拖垮你
    中国未来真正的30个商业模式
    一篇文看懂Hadoop:风雨十年,未来何去何从
    Lua常用API
    Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
    初识Luajit
    如何在Windows平台使用VS搭建C++/Lua的开发环境
  • 原文地址:https://www.cnblogs.com/lialong1st/p/8580145.html
Copyright © 2011-2022 走看看