NDK里有个例子: android-ndk-r10/samples/module-exports/jni
一看就懂了

———————————————————————————–

从r5版本开始,就支持预编译的库(共享和静态). 也就是说在你的应用中,可包含和使用 预先编译的库。

这个功能的用处
1. 你想分发你自己的库给第3方 NDK开发者,但不想把源码给他们
2. 你想使用自己的预编译的库 来加速项目的Build过程。

声明一个预编译的库模块
每个预编译的库,都必须声明为一个独立的模块 给ndk build系统。

目录结构

mylib
--Android.mk
--libfoo.so

Android.mk的内容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

注意事项
1. 每个预编译的模块都必须有一个名字, 比如上面取的名字是 foo-prebuilt
模块 名字 可以跟 预编译的库的名字 不一样(比如库的名字是 libfoo, 模块的名字是 foo-prebuild)
2. 设置 LOCAL_SRC_FILES 为你提供的预编译库的 路径。注意,这个路径 是相对于 LOCAL_PATH的。 据说也在 LOCAL_PATH/lib 目录里找源so.

另外: 如果你提供的库有多个ABI的版本,还要有点技巧,后面会提到。

3. 包含 PREBUILT_SHARED_LIBRARY (提供共享库) ; 或者 包含 PREBUILT_STATIC_LIBRARY(提供静态库)

在其他模块中 引用上面准备好的预编译模块
只需添加LOCAL_SHARED_LIBRARIES(或者 LOCAL_STATIC_LIBRARIES)声明 到你的 Android.mk中就行了

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
#LOCAL_LDLIBS := -lm -llog include $(BUILD_EXECUTABLE)

唯一要注意的是,引用 模块名(foo-prebuilt), 而不是库名(libfoo)

为预编译的库 输出头文件
在实际应用中, foo-user.c会依赖于 同库文件一起分发的头文件(foo.h)中声明的函数或变量
也就是说,在 foo-user.c 将会有如下代码

#include <foo.h>

构建你的foo-user模块时,必须提供 预编译模块的 头文件 以及 头文件的包含路径 给编译器。

假设头文件爱你 放在 预编译模块目录下的 include 目录, 我们可以在预编译模块的Android.mk中使用export

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

LOCAL_EXPORT_C_INCLUDES 可以让 别的引用模块 找到 适合的头文件
别的引用模块,将在 自己的 Android.mk里用 LOCAL_C_INCLUDE 来找(好像不用声明这个, LOCAL_LDFLAGS也不用)

多种ABI

armeabi   目标CPU是ARM v5 TE或者之后的架构
armeabi-v7a 目标CPU是 ARM v7或者之后的架构
x86
mips

需要修改 预编译模块里定义的 LOCAL_SRC_FILES

 LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libfoo.so

Android NDK引用预编译的动态链接库的更多相关文章

  1. 在eclipse中配置android ndk的自动编译环境builders

    无论linux还是mac在jni目录中直接运行  ndk-build 就可以生成 lib目录及所需要的 so文件: windows 装上lnx模拟器也是一样: 每次修改完 c++代码, 都要运行一下 ...

  2. android应用资源预编译,编译和打包全解析

    我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件.这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里面的. ...

  3. Android NDK工程的编译和链接以及使用gdb进行调试

    前提条件:已经安装了JDK 6.0.android SDK.NDK r9和eclipsele4.2开发环境. 推荐下载Android开发的综合套件adt-bundle-windows-x86,再下载A ...

  4. 〖Linux〗Android NDK调用已编译好的C/C++动态连接库(so文件)

    一.背景:假定已有应用程序zigbeeclient.cpp,内容如下: ... extern "C" { int getresult(int argc, char **argv); ...

  5. android ndk opencv jni 编译集成

    OpenCV (Open Source Computer Vision Library) https://docs.opencv.org/2.4/doc/tutorials/introduction/ ...

  6. 解决Android NDK 报jxxx编译找不到

    如题 解决: 引入NDK对应的arm或者x86库 如果你用的是GinyMotion模拟器,那就引入x86库 不多说了,见截图 1.选择Propertities->C/C++ General-&g ...

  7. windows android ndk的某些编译工具报错乱码0x5 或拒绝访问05

    在IDEA或者AndroidStudio的快捷方式上右键属性 > 兼容性 > 以管理员身份运行 解决问题.

  8. android ndk 编译 libevent

    1. 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/ ...

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

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

随机推荐

  1. minihttp http://www.acme.com/software/mini_httpd/

    1.安装mini_httpd 1.1把下载的mini_httpd-1.19.tar.gz拷贝到根目录   1.2 解压tar -xvfzmini_httpd-1.19.tar.gz ,会在根目录产生一 ...

  2. Spring Dynamic Modules - DMserver

    spring dm server 官网:http://static.springsource.com/projects/dm-server/1.0.x/programmer-guide/htmlsin ...

  3. Reverse String

    Write a function that takes a string as input and returns the string reversed. Example:Given s = &qu ...

  4. 【EF Code First】 一对一、一对多的多重关系配置

    这里使用相册Album和图片Picture的关系做示例 1,Album与Picture最基本的关系是1-n(一个相册可以有多张图片) 这时Album.Picture实体类可以这么定义 /// < ...

  5. Lua利用cjson读写json示例分享

    本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下 我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能 ...

  6. 使用cronolog切割tomcat catalina.out文件

    今天查看之前配置的tomcat发现catalina.out文件已经增大到接近5G,过不了多久就会将所在分区撑爆. 搜集了一下,大部分都使用cronolog切割catalina.out文件.按照这个方式 ...

  7. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  8. Visual Studio 2012 [ADO.NET 实体数据模型]丢失没有的解决方法

    首先打开控制面板,看是否已经安装EF,如果已经安装,先卸载,然后,首先打开安装包,找到/packages/EFTools目录下的EFTools.msi,将它们复制自己计算机的某一目录下,例如:C:\t ...

  9. Careercup - Google面试题 - 6407924087783424

    2014-05-07 15:17 题目链接 原题: Given an array of n elements (a1,a2,..ai,...,an). You are allow to chose a ...

  10. 【Merge Two Sorted Lists】cpp

    题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...