Application.mk详解

#Application.mk详解

##一.Application.mk简介

要将C\C++代码编译为SO文件,光有Android.mk文件还不行,还需要一个Application.mk文件。

本文将对Application.mk进行非常详细介绍。

###1.作用

Application.mk是用来确定一些编译规则的,
它规定的不是某一个文件某一行代码,而是所有文件相关

###2.存放位置

Application.mk和Android.mk是放在同一个目录下的。

一般是放在src/main/jni/下

jni是新建的文件夹,用于存放C/C++相关的代码

jni文件夹和java文件夹是同级目录,
如果生成的.so也是在/main下创建文件夹jniLibs,把.so放在jniLibs文件夹下

##二.Application.mk写法用法

Application.mk的写法

key1 := value1
key2 := value2
key3 := value3

Application.mk文件中里面全都是标签key和值value来定义一些属性的,
所有我们只需要看懂里面标签的意义就知道整个Application.mk的用法了。
比如APP_ABI,是用来确定编译成什么样处理器平台下的so文件。

###1.最简单的文件格式:

#注释:注解*****
APP_ABI := arm64-v8a
APP_PLATFORM := android-21

####(1) 上面的#是用来注释的,//双斜杠在mk文件中是不能用作于注释的。
####(2) 0APP_ABI :=后面接的是需要生成的.so平台文件,正常手机使用arm64处理器的即可。
####(3) APP_PLATFORM :=后面接的是使用SDK的最低等级

###2.Application.mk的所有标签详解

标签书写的次序是不论的。

####(1)APP_PLATFORM(必选项)
作用:定义使用的ndk库函数版本号。

属性值可以是: android-,其中是ndk的版本。

一般和SDK的版本(minSdkVersion 21)相对应,NDK版本的各个版本在NDK目录(sdk\ndk-bundle\)下的platforms文件夹中

####(2)APP_ABI (必选项)

作用:编译成什么类型的cpu的so,
拥有三个属性值armeabi armeabi-v7a x86,可以只用一个,也可以可以全选,如果全选也可以使用all.

#####写法可以是:

中间要变成的多个so版本用空格间隔开即可
生成两种格式

APP_ABI := armeabi-v7a arm64-v8a

或者

#APP_ABI := all

#####关于三种cpu处理器的介绍:
目前主流的Android设备是armeabi-v7a架构的,然后就是x86和armeabi了。
如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。
x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

#####关于使用哪种cup的问题
如果功能简单,并且希望自己的apk小一点,编一个x86版本的so即可。
如果想为了适应所有机型可以添加一下armeabi-v7a的版本。

一般来说正常手机使用x86版本的即可,
对于模拟器的话,就要看创建模拟器设置的cpu类型了。如果不确定模拟器的cpu类型,就生成多个so库即可。

####(3)APP_STL (非必选项)
作用:如何连接c++标准库 。
属性值:
stlport_static 静态链接
stlport_shared 动态链接
system 系统默认

如果生成的so库包含静态.a文件,这个属性要写成stlport_static,否则可以不用写。

####(4)APP_OPTIM (非必选项)
编译版本,如果是DEBUG版本就会带上调试信息。可以使用gdb-server进行动态断点低调试。
debug 调试版本 so中带调试信息,
release(默认) 发布版本 so不带调试信息

正常情况不用写这个属性就可以了,如果需要进行断点调试的情况可以设置为debug。

##三.其他

对于Android系统框架的源码中,还会有Android.mk,但是Application.mk是没有的,
所以系统源码中的mk文件是会复制一点的,并且还有其他mk(makefile)文件

#共勉:少年回头望,笑我还不快跟上!

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值