Android.mk文件和Application.mk文件详解

相同点:都是轻量级 Makefile(Makefile文件定义一些列指令,指定文件编译顺序,类似shell脚本)

Application:

位置:通常在 $PROJECT/jni目录下

作用:配置所有modules的编译变量在 APP_ABI := xxx xxx xxx   设置中间有空格

可以设置一个或多个ABI对应的指令集

指令集合(armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64,all) all全部对应

关于指令集的选择:

armeabi-v7a兼容armeabi

x86手机因兼容性基本都使用libhoudini模块,兼容arm指令集

64位默认兼容32位abi的so

所以:对大小严格要求选择 armeabi,对性能也有要求添加 x86

APP_OPTM(编译模式)

默认release  可修改为debug

Android.mk文件

包含:

1.  宏:my-dir,all-subdir-makefiles等   在$(call <function>)调用,返回文本信息

2.  变量:CLEAR_VARS,BUILD_SHARED_LIBRARY,TARGET_ARCH等,NDK提供,在Android.mk被解析前存在

3.  模块描述变量:LOCAL_PATH,LOCAL_MODULE,LOCAL_SRC_FILES等(LOCAL_前缀),除LOCAL_PATH外其余都在include $(CLEAR_VARS)和include $(BUILD_XXX)之间。

LOCAL_PATH(当前目录):

my-dir:通常最后一次包含Makefile文件路径,通常是Android.mk所在路径

CLEAR_VARS(变量清除):

除LOCAL_PATH外的其余在include $(CLEAR_VARS)和include $(BUILD_XXX)之间的变量

BUILD_EXECUTABLE

LOCAL_MODULE(module名称)

LOCAL_SRC_FILE(源码文件)

BUILD_SHARED_LIBRARY(动态编译)                    BUILD_STATIC_LIBRARY(静态编译)

PREBUILD_SHARED_LIBRARY(动态预编译)    PREBUILD_STATIC_LIBRARY(静态预编译)

BUILD_EXECUTABLE(生成可执行的文件)

TARGET_ARCH_ABI(目标ABI名称)

LOCAL_LDLIBS(链接库)

用额外链接选项,所有库都有“-l”前缀,可同时列出空格隔开

LOCAL_CFLAGS,LOCA_CPPFLAGS和LOACL_LDFLAGES(编译,链接标志)

LOCAL_CFLAGS: 编译C/C++传递给编译器的标志集合

LCOAL_CPPFLAGS: 只支持C++传递给编译器的标志集合

LOCAL_LDFLAGES: 传递给连接器的额外参数

编译选项格式(LOCAL_CPPFLAGES += XXX)

1.-fexception:NDK异常处理默认禁止,可以编译带异常处理的C++代码

2.-ftti:NDK默认不支持C++RTTI,可以编译带RTTI的C++代码

3.-fvisibility=hidden:隐藏不需要导出的函数,若某个函数需要导出添加JNIEXPROT或者__attribute__((visibility(“default”)))即可

4.-lfunction-section:默认编译文件.o中代码部分只有.text段,会使每个函数都单独

有一个段。对链接后代码大小并没有影响

5.-fdata-section:同上每个data都有一个单独的段

6.-Wl—gc-sections:使用连接器ld链接时删除不用的段

-Wl,<option>告诉编译器,后边选项<option>传递给连接器

7.-fPIC:PIC(position independent code)用于编译位置无关代码,生成可用于共享库的位置独立代码。若不添加-fPIC,加载so文件的代码段时,代码段引用的数据对象需要重

定位,重定位会修改代码段内容,造成,没有调用这个so,代码段的进程在内核中会产生着个文件拷贝。

8.-Wall:(wring all)编译和链接中显示所有警告信息

 关闭PIE:

  1. LOCAL_CFLAGS += -pie -fPIE
  2. LOCAL_LDFLAGS += -pie -fPIE

Android.mk通用格式:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm

LOCAL_MODULE    := helloworld

LOCAL_SRC_FILES := helloworld.c

include $(BUILD_EXECUTABLE)

Application.mk通用格式

APP_ABI := x86 armeabi-v7a

Android.mk文件和Application.mk文件详解的更多相关文章

  1. Android中Application类的详解:

    Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...

  2. WebService核心文件【server-config.wsdd】详解及调用示例

    WebService核心文件[server-config.wsdd]详解及调用示例 作者:Vashon 一.准备工作 导入需要的jar包: 二.配置web.xml 在web工程的web.xml中添加如 ...

  3. robots.txt文件配置和使用方法详解

    robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件 ...

  4. DOS文件转换成UNIX文件格式详解

    转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...

  5. 转:关于将Java编译过的.class文件打成jar可执行文件/JAR详解

    原文链接:关于将Java编译过的.class文件打成jar可执行文件/JAR详解 如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. ...

  6. 原来Github上的README.md文件这么有意思——Markdown语言详解(sublime text2 版本)

    一直想学习 Markdown 语言,想起以前读的一篇 赵凯强 的 博客 <原来Github上的README.md文件这么有意思——Markdown语言详解>,该篇博主 使用的是Mac系统, ...

  7. express文件上传中间件Multer详解

    express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html   Express默认并不处理HTTP请 ...

  8. maven pom文件简单模板和配置详解

    https://blog.csdn.net/earbao/article/details/49924943 maven pom文件简单模板和配置详解

  9. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

随机推荐

  1. css 布局 一中一右

    .container { position: relative; .my-center { text-align: center; line-height: 30rpx; min-width: 400 ...

  2. js 浮点数计算精度不准确问题

    或许很多人都遇到过,js 对小数的加.减.乘.除时经常得到一些奇怪的结果! 比如 :0.1 + 0.2 = 0.3  ? 这么一个简单的计算,当你用js 计算时会发现结果是:0.30000000000 ...

  3. react使用ant design pro时的滑动图片组件

    react的滑动图片验证,是基于https://segmentfault.com/a/1190000018309458?utm_source=tag-newest做的修改,改动的主要有以下几点: 1. ...

  4. Selenium请求库

    阅读目录 一 介绍 二 安装 三 基本使用 四 等待元素被加载 五 选择器 六 元素交互操作 七 其他 八 项目练习 九 破解登录验证 一 介绍 1.selenium是什么? selenium最初是一 ...

  5. 提高 Visualforce 页面加载效率的小知识

    一般原则 在设计页面时,我们要将页面的功能降至最少,不要包含多余的功能和数据,以最大化提高运行效率 如果需要开发的功能可以通过 Salesforce 的标准功能实现,那么尽量使用标准功能,比如 工作流 ...

  6. plv8 require 模块试用

    plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...

  7. 编码格式检测chardet模块

    chardet模块: -->检测编码格式 未知编码的bytes,要把它转换成str,就需要知道该bytes的编码方式 #1.直接检测bytes >>> chardet.dete ...

  8. V8 引擎如何进行垃圾内存的回收?

    JS 语言不像 C/C++, 让程序员自己去开辟或者释放内存,而是类似Java,采用自己的一套垃圾回收算法进行自动的内存管理.作为一名资深的前端工程师,对于JS内存回收的机制是需要非常清楚, 以便于在 ...

  9. LDoc使用总结

    LDoc使用总结 安装 按照下面的安装就可以了 http://www.cnblogs.com/ZhYQ-Note/articles/6022525.html 使用 参考:官方的说明文档 https:/ ...

  10. javascript系列--认识并理解构造函数,原型和原型链

    一.前言 介绍构造函数,原型,原型链.比如说经常会被问道:symbol是不是构造函数:constructor属性是否只读:prototype.[[Prototype]]和__proto__的区别:什么 ...