Android.mk文件和Application.mk文件详解
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:
- LOCAL_CFLAGS += -pie -fPIE
- 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文件详解的更多相关文章
- Android中Application类的详解:
Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...
- WebService核心文件【server-config.wsdd】详解及调用示例
WebService核心文件[server-config.wsdd]详解及调用示例 作者:Vashon 一.准备工作 导入需要的jar包: 二.配置web.xml 在web工程的web.xml中添加如 ...
- robots.txt文件配置和使用方法详解
robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件 ...
- DOS文件转换成UNIX文件格式详解
转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...
- 转:关于将Java编译过的.class文件打成jar可执行文件/JAR详解
原文链接:关于将Java编译过的.class文件打成jar可执行文件/JAR详解 如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. ...
- 原来Github上的README.md文件这么有意思——Markdown语言详解(sublime text2 版本)
一直想学习 Markdown 语言,想起以前读的一篇 赵凯强 的 博客 <原来Github上的README.md文件这么有意思——Markdown语言详解>,该篇博主 使用的是Mac系统, ...
- express文件上传中间件Multer详解
express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html Express默认并不处理HTTP请 ...
- maven pom文件简单模板和配置详解
https://blog.csdn.net/earbao/article/details/49924943 maven pom文件简单模板和配置详解
- C语言对文件的操作函数用法详解2
fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...
随机推荐
- JQuery校验时间大小
常用于按时间条件(起始日-截止日)查询时,进行校验 function checkDate(){ var startTime = $('#startTime').val(); var endTime = ...
- redis缓存, 缓存击穿,缓存雪崩,缓存穿透
在实际项目中,MySQL数据库服务器有时会位于另外一台主机,需要通过网络来访问数据库:即使应用程序与MySQL数据库在同一个主机中,访问MySQL也涉及到磁盘IO操作(MySQL也有一些数据预读技术, ...
- MySQL数据库索引类型、MySQL索引的优化及MySQL索引案例
关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- js中a + 1 < a等于true,(a ==1 && a== 2 && a==3) 等于 true如何实现
先说a + 1 < a const a = { i: 1, valueOf: () => { if (a.i === 1) { return a.i++; } return a.i+2; ...
- Spring Cloud Greenwich.SR4 发布了,跟不上了……
前几天 Spring Cloud Greenwich.SR4 发布了: https://spring.io/blog/2019/11/19/spring-cloud-greenwich-sr4-rel ...
- Cut 命令截取不同空格的string
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:79:98 例如这一串中间空格数量不一样cut 是无法截取字段的.所以我们需要把他变成有规律的. 这 ...
- [记录]安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法
在安装Microsoft .NET Framework 4.6.2脱机包时提示 无法建立到信任根颁发机构的证书链 实际上是要安装一个根证书.解决方案如下(因无法贴链接,可百度搜索“mamicode.c ...
- CentOS7-Docker 安装 Gitlab详细篇
官方教程 https://docs.gitlab.com/omnibus/docker/ 建议虚拟机内存2G以上 搜索镜像 docker search gitlab 下载镜像文件 docker pul ...
- 045 用户登录功能01----JWT和后台代码
(1)有状态登录概述 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登录后,我们把登录者 ...