android的android.mk,和application.mk文件编写(总结版)

android的android.mk,和application.mk文件编写(总结版)

1.简介

android.mk是用来描述要编译某个具体的模块,所需要的一些资源,包括要编译的源码、要链接的库等等

application.mk:描述你的程序所需要的模块,即静态库或者共享库

2.静态库和共享库的区别

静态库:在程序编译时连接到代码,一般体积比较大

共享库:在程序运行时动态加载,一般直接引用,体积比较小

3.动手编写简单的android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH:必须位于android.mk文件的开始,用来定位源文件的位置,$(call my-dir)返回当前路径,即android.mk所在的目录

include $(CLEAR_VARS):清除变量的值,不包括LOCAL_PATH

LOCAL_MODULE:描述的模块,名字唯一,不能有空格,编译系统会生成合适的前缀和后缀

LOCAL_SRC_FILES:参与编译的所有源代码文件

include $(BUILD_SHARED_LIBRARY):把当前模块编译为共享库,前缀为lib,后缀为.so

include$(BUILD_STATIC_LIBRARY):把当前模块编译为静态库,前缀为lib,后缀为.a

4.定义多个android.mk文件

有时候,编译的模块比较多,可以在每一个模块目录下定义一个andorid.mk文件,然后在模块的根目录下放置一个android.mk文件,内容如下:

include $(call all-subdir-makefiles)

5.动手编写简单的application.mk

APP_ABI := armeabi-v7a  
APP_MODULES=hellp-jni

APP_ABI:支持的ABI平台,上所示为armeabi-v7a,其他的如x86,多个用空格隔开,如armeabi-v7a x86

APP_MODULES:如果指定,那么ndk只会编译列出的模块列表,模块名用空格隔开,如果没有指定,那么ndk会编译所有的android.mk文件声明的所有LOCAL_MODULE模块

6.意见与建议

如果博友有任何问题或者建议,欢迎留言讨论


你可能感兴趣的:(ndk)