先贴一个样例,然后解释一下:

 LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mydjvuapi
SRC_FILE_OF_MINE :=\
classify.cpp \
cuts.cpp \ INCLUDES_FILE_OF_MINE:= \ 8 $(LOCAL_PATH)/../myjpeginterface\
9 $(LOCAL_PATH)/../mytiffinterface10 STATIC_LIBRARIES_OF_MINE:= mupdf djvudroid
11 LOCAL_CFLAGS := -DHAVE_CONFIG_H
12 LOCAL_C_INCLUDES := $(INCLUDES_FILE_OF_MINE)
13 LOCAL_CXX_INCLUDES := $(INCLUDES_FILE_OF_MINE)
14 LOCAL_SRC_FILES := $(SRC_FILE_OF_MINE)
15 LOCAL_STATIC_LIBRARIES :=$(STATIC_LIBRARIES_OF_MINE)
16 include $(BUILD_STATIC_LIBRARY)

先介绍两个小常识:$表示引用,比如上面写到的$(LOCAL_PATH)表示的意思就是使用LOCAL_PATH的值;../表示的是当前目录的上一级目录;字符\表示换行的意思;上面写到的后面有OF_MINE的那几个东西是自己定义的变量,这个变量定义是由编程人员决定,大多数人喜欢以MY_开头,这个看个人喜好

LOCAL_PATH:=$(call my-dir)这个是确定当前的目录。my-dir是系统定义的,获取的是当前你这个android.mk文件所在的路径,当然也可以自己指定;

include $(CLEAR_VARS):猜大概可以猜出他的意思clear variables,清楚变量,但是要注意的是,他清除的是除LOCAL_PATH以外的变量;

SRC_FILEOF_MINE:上面提到了,这个是自己定义的一个变量

LOCAL_CFLAGS:这个东西,如果只是自己写了个简单的程序要生成库,一般不用他。他的作用在于可以决定库在编译时编译代码里的那一部分,真正的实现代码在不同平台上选择正确的代码进行编译。举个例子,加入我有这样一段代码#ifdef USE #include"amethod.h" #endif,那么我只要在mk文件里写一句LOCAL_CFLAGS:=-DUSE 那么在生成库时就会执行#include"amethod.h"这段代码;

LOCA_C_CINCLUDE:这个指明你的编译时如果遇到不认识的头文件,应该在什么路径下面找

COCAL_CXX_INCLUDE:这个我不打清楚,好像也是来找头文件的,但是和上面的什么区别呢?个人感觉应该是上面那个找c的头文件,下面这个找c++的头文件。这个我不大清楚

LOCAL_SRC_FILES:这个致命要编译的源文件;

LOCAL_STATIC_LIBRARIES:这个指明要生成的库需要依赖的其他的静态库;把中间的STATIC换成SHARED就是动态库;

include(BUILD_STATIC_LIBRARY):生成静态库,把STATIC改成SHARED就是动态库。

接下来介绍一下如何使用第三方库:

首先卖弄一下:整个程序,或者库的生成顺序:

首先是编译,编译阶段程序执行语法检查,并不注意你代码这种功能的实现。比如你要用一个函数,名字叫fun(),如果你仅仅是是生命了一下,并没有给出这个函数的实现,接着就开始使用这个函数了,那么程序编译是没有问题的。那么什么时候有问题呢。连接时!连接时电脑会去找你各个函数的具体实现,如果找不到就会报错。找得到那么就可以顺利生成库或者可执行程序。接下来是重点,如何待用第三方库:

答案:使用prebuilt。比如我有一个库libopencv_java.so(这个是opencv中的一个动态库),我在我的程序中需要调用它,那么我可以这样做:

首先在jni目录下建立一个folder。命名为prebuilt。然后将libopencv_java.so复制到这个文件夹中,接着就是写mk文件了:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE:=opencv_java
LOCAL_SRC_FILES:=libopencv_java.so
include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE:=opencv_info
LOCAL_SRC_FILES:=libopencv_info.so
include $(PREBUILT_SHARED_LIBRARY)

就是这个样子,就成功的将他的so库转化成了你的动态库,如果要想用静态库的话只要将最后一句中的shared改成static就好了。然后,我们如何调用呢?我们需要把相应的头文件放进来,就放到prebuilt文件夹下面就好了,然后在其他地方指明头文件查找路径就可以只用了。

======================================================

===== 初学者,未深入研究,个人理解,如有错误,望指正,莫见怪!=============

======================================================

NDK中android.mk文件的简单介绍和第三方库的调用的更多相关文章

  1. Android NDK开发之Android.mk文件

    Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南   Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...

  2. Android.mk文件语法规范及使用模板

    Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...

  3. Android.mk文件c++头文件包含问题

    Eclipse 中 Android.mk文件c++头文件包含问题 jni中的目录结构如下: 编译找不到头文件 LOCAL_PATH := $(call my-dir)LOCAL_C_INCLUDES ...

  4. Android NDK开发指南---Application.mk文件和android.mk文件

    https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https:// ...

  5. 在Android.mk文件中输出打印消息

    http://www.xuebuyuan.com/1947880.html 在进行Android NDK的开发当中有时想看看Android.mk文件当中某个变量的值,可以再Android.mk文件当中 ...

  6. Android.mk文件简单分析

    Android.mk文件简单分析 一个Android.mk文件用来向编译系统描写叙述须要编译的源码.详细来说:该文件是GNUMakefile的一小部分.会被编译系统解析一次或多次. 能够在每个Andr ...

  7. Android NDK开发指南(二)Android.mk文件

    http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1.  概述 Android.mk文件是用来描述build sy ...

  8. ndk编译时的通用Android.mk文件

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 MY_SRC_PATH := $(LOCAL_PA ...

  9. 在Android.mk文件中输出打印消息 (转载)

    转自:http://blog.csdn.net/xiaibiancheng/article/details/8479694 在进行Android NDK的开发当中有时想看看Android.mk文件当中 ...

随机推荐

  1. HTML+CSS画一朵向日葵

    前几天看到一张图片,倔强的向日葵.(BGM,<倔强>) 看着挺有感触,就想用CSS做一个向日葵. 最终效果图如下: 主要的难点就在花瓣的处理上,css暂时没有做到这样的尖角圆弧. 我想到的 ...

  2. 自己动手写fullPage插件

    仿造fullPage.js https://alvarotrigo.com/fullPage/#firstPage 自己参照网上教程写了一个,加了注释.主要是练习造轮子的能力,需求是不断变化的只拿来用 ...

  3. 通过官网找到spring的jar包

    1.官网为:https://spring.io/ 2.打开之后,点击:PROJECTS,如图所示: 3.点击第三个:SPRING FRAMEWORK,如图所示: 4.进入之后,找到features,点 ...

  4. Fast Paxos 和 Paxos的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt373 自从Lamport在1998年发表Paxos算法后,对Paxos的各种 ...

  5. 十类经典office实用技巧

    IT工程师不得不会的职场office软件(不是金山WPS),其中ppt最重要也最难学的.之前已经另作文分享,本文是word与excel的十个隐藏技能.一.Excel表格计算公式1.求所有数值和:SUM ...

  6. 九度OJ 1014 排名

    #include <iostream> #include <string.h> #include <sstream> #include <math.h> ...

  7. 集美大学网络1413第八次作业(团队四)-- 第一次项目冲刺(Alpha版本)成绩

    首先非常抱歉,刚休完假,凌晨才回来,导致这么晚发布成绩,以后旅行可以考虑带点轻便点的笔记本~ O(∩_∩)O 第一次项目冲刺结束了,可以看出来,有的团队做的很棒,也有的团队组合不是很理想,导致进度一直 ...

  8. SNS团队第二次站立会议(2017.04.23)

    一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 梳理清楚数据的每个类型和数据项  具体落实把相关数据 ...

  9. 测试与发布(Alpha版本)

    [Alpha阶段]测试报告 1.测试找出的BUG (1).这种情况刷新就好 (2).文件必须10个才行,多余10个的部分不会进入查重的部分,少于会出错: (3).文件保存在d:\files,由于有些原 ...

  10. 201521123013 《Java程序设计》第2周学习总结

    1. 本章学习总结 1.final声明,一旦赋值不能被改变.移位运算符的应用,负数右移高位补"1",正数右移高位补"1".利用移位运算,按位与运算可以方便得出整 ...