手机版

第六章 android.mk语法

发布时间:2021-06-07   来源:未知    
字号:

Android系统移植第四章 android.mk语法

第1页

一、android.mk的基本语法 二、简单实例介绍 三、系统软件执行步骤

第2页

一、android.mk语法 android.mk是android的工程的管理文件,起作用基本等同于linux 中的MakeFile。在语法上,android.mk和普通的MakeFile略有不同, 主要是android.mk包含一些android编译系统的公共宏。 可以参考build/core/config.mk 各个选项的默认值在build/core/base_rules.mk Android.mk文件处理从根目录开始找到的第一个android.mk文件, 如果需要递归需要在当前目录中做如下处理 Include $(call all-makefile-under,$(LOCAL_PATH)) 增加以上内容后,如果当前子目录中还有android.mk,也会对其作 出处理。 Android.mk中可以生成多个目标:可执行程序、动态库、静态库、 或者android的应用程序包。

第3页

一、android.mk语法 编译可执行程序 LOCAL_PATH:=$(my-dir) //获取当前目录 #Test Exe Include $(CLEAR_VARS) //清除许多LOCAL_XXX变量 LOCAL_MODULE_TAGS :=eng //编译的版本 LOCAL_SRC_FILES:= \ //源文件 main.c LOCAL_MODULE=test_exe //生成可执行程序 LOCAL_C_INCLUDES := //包含的头文件 LOCAL_STATIC_LIBARIES:= //需要的静态库 LOCAL_SHARED_LIBARIES:=libc //需要的动态库 Include $(BUILD_EXECUTABLE) //编译后生成文件路径

第4页

android.mk语法说明 LOCAL_PATH - 编译时的目录 $(call 目录,目录….) 目录引入操作符: 如该目录下有个文件夹名称 src, 则可以这样写 $(call src),那么就会得到 src 目录的完整路径 宏函数’my-dir’, 由编译系统提供,用于返回当前路径 include $(CLEAR_VARS) -清除之前的一些系统变量 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk 在 build/core/config.mk 定义 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk 通过include 包含自定义的.mk文件(即是自定义编译规则)或是引用系统其 他的.mk文件(系统定义的编译规则)。 LOCAL_SRC_FILES - 编译的源文件 可以是.c, .cpp, .java, .S(汇编文件)或是.aidl等格式, 不同的文件用空格 隔开。如果编译目录子目录,采用相对路径,如子目录/文件名。 也可以通过$(call 目录),指明编译某目录下所有.c/.cpp/.java/.S/ .aidl文 件. 追加文件 LOCAL_SRC_FILES += 文件

第5页

android.mk语法说明 LOCAL_C_INCLUDES - 需要包含的头文件目录 可以是系统定义路径,也可以是相对路径. 如该编译目录下有个 include目录,写法是include/*.h 宏CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许 多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),除 LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。 eng: 工程机,user:

最终用户机 tests:测试机 optional:指该模块在所有版本 下都编译 LOCAL_SRC_FILES - 编译的源文件,可以是.c, .cpp, .java, .S(汇编文件) 或是.aidl等格式, 不同的文件用空格隔开 Include $(BUILD_EXECUTABLE): out/target/product/<TARGET_PRODUCT>/obj/EXECUTABLES/<LOCAL_ MODULE>

第6页

android.mk语法说明 编译静态库的模板: #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表示编译一个静态库。 编译生成的是以“lib<module_name>.so”的文件,这个就是共享库了,这是系统会自 动加上“头”和“尾”。 libtest_static.a Include $(BUILD_EXECUTABLE): out/target/product/<TARGET_PRODUCT>/obj/STATIC_LIBRARY/<LOCAL_MODUL E>第7页

android.mk语法说明 编译动态库的模板: #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) LOCAL_PRELINK_MODULE := false Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可 以加快起动速度,还可以减少部分内存开销。 out/target/product/<TARGET_PRODUCT>/obj/SHARED_LIBRARY/<LOCAL_ MODULE>第8页

android.mk语法说明 编译一个简单的APK 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 # Tell it to build an APK include $(BUILD_PACKAGE) BUILD_PACKAGE表示编译一个apk程序,而call all-subdir-java-files表示自动 查找当前目录下的所有java文件进行编译。 在源码中编译和SDK环境下编译有所不同,涉及的目录主要有两个。 Out/target/common/obj/apps—通用java字节码目录 out/target/product/<TARGET_PRODUCT>/apps---android应用包目录

第9页

android.mk语法说明 在这两个目录中都有一个名为LOCAL_PACKAGE_NAME_intermediates/的独立目录。每个目录下有三个apk文件,名称为 LOCAL_PACKAGE_NAME.apk.unsigned:第一步生成没有签名的apk包 LOCAL_PACKAGE_NAME.apk.unaligned:第二步生成没有签名的apk包 LOCAL_PACKAGE_NAME.apk.:第三步生成最终的apk包

第 10 页

Android系统开发 在android

第 11 页

Android系统开发 在android

第 12 页

Android系统开发 在android

第 13 页

Android系统开发 在android

第 14 页

Android系统开

可执行程序:XXX_intermediates 静态库: XXX_static_intermediates 动态库: XXX_shared_intermediates

第 15 页

第 16 页

第六章 android.mk语法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)