Android config Android.mk parameter

0x00 LOCAL_PATH

根据 Android 构建系统要求,Android.mk 文档必须以 LOCAL_PATH 变量的定义开头。

LOCAL_PATH := $(call my-dir)

Android 构建系统利用 LOCAL_PATH 来定位源文件。因为将改变量设置为硬编码值不合适,所以 Android 构建系统提供了一个名为 my-dir 的宏功能。通过将该变量设置为 my-dir 宏功能的返回值,可以将其放在当前目录下。

0x01 CLEAR_VARS

Android 构建系统将 CLEAR_VARS 变量设置为 clear-vars.mk 片段的位置。包含 Makefile 片段可以清除除了 LOCAL_PATH 以外的LOCAL_name 变量,例如 LOCAL_MODULE 与 LOCAL_SRC_FILE 等。

Include $(CLEAR_VARS)

这样做是因为 Android 构建系统可以在单次执行中解析多个构建文件和模式定义,LOCAL_<name> 是全局变量。清除它们可以避免冲突,每一个原生组件被称为一个模块。

0x02 LOCAL_MODULE

改变了是用来给这些模块设定一个唯一的名称。下面的代码将该模块的名称设为 hello-jni:

LOCAL_MODULE := hello-jni

因为模块名称也被用于给构建过程的所生成的文件命名,所以构建系统给文件添加适当的前缀和后缀。本例中, hello-jni 模块会生成一个共享文件且构建系统会将它命名为 libhello-jni.so。

0x03 LOCAL_SRC_FILES

该变量用来建立和组装这个模块的源文件列表。

LOCAL_SRC_FILES := hello-jni.c

这里,hello-jni 模块只有一个源文件生成,而 LOCAL_SRC_FILES 变量可以包含用空格分开的多个源文件名。

0x04 BUILD_SHARED_LIBRARY

为了建立可供主应用程序使用的模块,必须将该模块变成共享库。Android NDK 构建系统将 BUILD_SHARED_LIBRARY 变量设置成 build_shared_libray.mk 文件保存的位置。改 Makefile 片段包含了将源文件构建和组装成共享库的必要过程。

include $(BUILD_SHARED_LIBRARY)

0x05 BUILD_STATIC_LIBRARY

建立静态库,Android 应用并不直接使用静态库,一般是将第三方代码作为静态库引入动态库中使用。

include $(BUILD_STATIC_LIBRARY)

0x06 引入共享库和静态库

LOCAL_SHARED_LIBRARY := avilib_share
LOCAL_STATIC_LIBRARY := avilib_static

0x07 多项目共享模块

多个项目共享某个模块时,先将源码导入%NDK_HOME%/source,配置好对应的 Android.mk 文件。在需要的项目中添加:

LOCAL_SHARED_LIBRARIES := avilib
$(call import-module, transcode/avilib) 

0x08 用 Prebuilt 库

将已编译好的 so 文件作为项目的共享模块:

LOCAL_PATH := $(call my-dir)
#第三方模块
include $(CLEAR_VARS)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := libavilib.so

include $(RREBUILT_SHARED_LIBRARY)

0x09 构建可执行文件

include $(BUILD_EXECUTABLE)

0x10 其他构建系统变量

#目标 CPU 体系结构名称
TARGET_ARCH := arm

#目标 Android 平台名称
TARGET_PLARFORM := andoid-3

#目标 CPU 体系结构和 ABI 名称
TARGET_ARCH_ABI := armeabi-v7a

#目标平台和 ABI 串联
TARGET_ABI := android-3-armeabi-v7a

#重定向输出文件名(默认为 LOCAL_MODULE)
LOCAL_MODULE_FILENAME := avilib

#指定 C++ 源码文件扩展名
LOCAL_CPP_EXTENSION := .cpp .cxx

#指定模块所依赖的具体 C++ 特性
LOCAL_CPP_FEATURES := rtti

#可选目录列表,NDK安装目录的相对路径,用来搜索头文件
LOCAL_C_INCLUDES := sources/shared-module

#添加编译器标志(添加宏定义)
LOCAL_CFLAGS := -DNDEBUG -DPROT=1234

#添加编译器标志(添加宏定义)仅C++
LOCAL_CPP_CFLAGS := -DNDEBUG -DPROT=1234

#LOCAL_STATIC_LIBRARY变体,所有静态库内容(当几个静态库有循环依赖的时候很有用)
LOCAL_WHOLE_STATIC_LIBRARY := avilib bvilib

#链接标志的可选列表
LOCAL_LDLIBS := -llog

#禁止生产文件中进行缺失符号检查
LOCAL_ALLOW_UNDEFINED_SYMBOLS :

#指定要生成的 ARM 二进制类型
LOCAL_ARM_MODE := arm

#开启 NEON 指令
LOCAL_ARM_NEON := true

#禁用 NX bit 安全特性(Never Execute)
LOCAL_DISABLE_NO_EXECUTE := true

#记录一组编译器标志
LOCAL_EXPORT_CFLAGS := -DENABLE_AUDIO

#与上面类型,仅用于 C++
LOCAL_EXPORT_CPPFLAGS := -DENABLE_AUDIO

#与 LOCAL_EXPORT_CFLAGS 类型用于链接器标志
LOCAL_EXPORT_LDFLAGS := -DENABLE_AUDIO

#允许记录路径集
LOCAL_EXPORT_C_INCLUDES :=

#用于有大量资源或者独立的静态库/动态库的模块,分解命令长度
LOCAL_SHORT_COMMANDS := true

#定义了用于过滤来至 LOCAL_SRC_FILES变量的装配文件的应用程序
LOCAL_FILTER_ASM :=

0x11 其他构建系统函数宏

#返回当前目录下的所有子目录下的 Android.mk 构建文件列表
include $(call all-subdir-makefiles)

#放回当前 Android.mk 构建文件的路径
this-makefile

#返回包含当前构建文件的父 Android.mk 构建文件路径
parent-makefile

#和 parent-makefile 一样但用于祖父目录
grand-parent-makefile

0x12 定义新变量

LOCAL_ 和 NDK_ 开头的为预留构建名称,可使用 MY_ 开头的变量

MY_SRC_FILES := avilib.c platform_posix.c

LOCAL_SRC_FILES := $(addprefix avilib/, $(MY_SRC_FILES))

0x13 条件操作

在每个体系结构中包含一个不同的源码文件集

ifeq ($(TARGET_ARCH), arm)
    LOCAL_SRC_FILES += armonly.c
else
    LOCAL_SRC_FILES += generic.c
endif

0x14 Application.mk

#覆盖 Android.mk 构建的模块列表
APP_MODULES := avilib 

#设置二进制文件的优化级别,默认 release
APP_OPTIM := relase / debug

#编译器标志
APP_CLAGS

#编译器标志,作用于 C++ 源文件
APP_CPPLAGS

#从非 jni 子目录下查找 Android.mk 构建文件
APP_BUILD_SCRIPT

#构建系统的二进制文件,默认 armeabi ABI
APP_ABI := all / armeabi mips

#使用不同 STL 实现库,默认 system 库
APP_STL := stlport_shared

#与 LOCAL_CPP_EXTENSIONS 变量相似,表明所有模块都依赖与具体的 C++ 特性,如 RTTI,exceptions
APP_GUNSTL_FORCE_CPP_FEATURES

#与 LOCAL_SHORT_COMMANDS 变量类似
APP_SHORT_COMMANDS

原文地址:https://www.cnblogs.com/YZFHKMS-X/p/12635667.html

时间: 2024-11-10 09:34:24

Android config Android.mk parameter的相关文章

〖Android〗Android源代码所有目录生成的Target(编译生成文件反查)

=> build/tools/zipalign: out/host/linux-x86/bin/zipalign (host) => build/tools/atree: out/host/linux-x86/bin/atree (host) => build/tools: => build/tools/bin2asm: out/host/linux-x86/bin/icudata (host) => build/tools/check_prereq: system/bin/

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

【Android】Android内存溢出问题---用自行开辟的空间进行对内存管理

public static Bitmap readBitmap(String path) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPurgeable = true; options.inInputShareable = true; options.inSampleSize = compute

【Android】Android自定义带board的圆角控件

介绍 圆角控件常用于头像,按钮,图标等,用途十分广泛,而且常常配合board使用. 在IOS中,UIVIew的CALayer层已经提供了圆角和board的方法,所以圆角控件的制作非常简单,只需要类似以下简单代码即可实现: view.layer.cornerRadius = 20; view.layer.borderColor = [UIColor yellowColor].CGColor; view.layer.borderWidth = 10; view.clipsToBounds = YES

android开发——Android开发中的47个小知识

1.判断sd卡是否存在  boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 2.TextView部分文字设置颜色 TextView tv = new TextView(this); //添加css样式 tv.setText(Html.fromHtml("<font color="#ff0000">红色&l

修改android 系统设置 android 版本

http://blog.csdn.net/haplwd/article/details/10226039 Android 中的设置关于手机中的型号的更改 1.APPS-->Settings-->About phone-->Model number 通过Model number找到 ./res/values/strings.xml:1738:    <string name="model_number">Model number</string>

android权限--android开发中的权限及含义(上)

android权限--android开发中的权限及含义(上) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.pe

; AutoHotkey全自动安装环境设置和测试JAVA+Eclipas+Android+JRE+JDK+SDK+ADT+Android模拟器+Android Virtual Device Manager+NDK+Studio+Doc+Help+Android Application Project编程调试windows环境[草稿版] DetectHiddenWindows,On SetTitl

; AutoHotkey全自动安装环境设置和测试JAVA+Eclipas+Android+JRE+JDK+SDK+ADT+Android模拟器+Android Virtual Device Manager+NDK+Studio+Doc+Help+Android Application Project编程调试windows环境[草稿版] DetectHiddenWindows,OnSetTitleMatchMode,2 ; 激活窗口并单击按钮IfWinExistActiveControlClick

【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

 概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的方向的方法,导致我们拿到原始帧后还需要再次对其进行转换为对应需求的数据,例如YUV的格式,图像的方向等(旋转多少度合适),下面我就粗略的介绍一下大致的流程,理解浅薄,大神请勿喷. 注意:当前还都是基于API<21的内容,如果压根不用android.hardware.Camera的话可能有区别,还没研