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 -lloginclude $(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)/includeinclude $(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

转载于:https://www.cnblogs.com/GoAhead/p/4186638.html

Android NDK引用预编译的动态链接库相关推荐

  1. android 静态编译链接,Android NDK:使用预编译的静态库链接

    我正在尝试将Jnetpcap移植到Android,以便将其用于解析.pcap文件.Jnetpcap是libpcap的java包装器,它使用JNI.我已经使用android的源代码树将libpcap编译 ...

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

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

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

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

  4. android ndk: aborting . stop,编译时出现android ndk aborting stop怎么破

    编译时出现android ndk aborting stop怎么破 更新时间:2019-10-26 10:26 最满意答案 在报错行前加入: $(call import-add-path, cocos ...

  5. Go编译android,在Android中引用golang编译的aar包

    gomobile是在安卓中使用golang的工程,既可以全部代码用golang,也可以引用部分golang的代码,但是现在还不成熟,还是试验阶段. 配置gomobile的环境 $ go get gol ...

  6. android NDK 二、编译方法

    1.NDK 一中已经提到,使用eclipse中的配置 ,自动编译 2.手动编译(推荐) 打开bash.exe(即启动cygwin) 使用cd $NDK 进入/cygdrive/e/android-nd ...

  7. android c 11 编译,Android NDK r9b和编译C 11

    对不起,以下应该是评论,而不是回答 – 因为我不知道你的代码有什么问题,但是你可以做些什么来弄清楚自己: 这是我最小的Android.mk: LOCAL_PATH := $(call my-dir) ...

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

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

  9. android+ndk+libevent,android ndk 编译 libevent

    1. 下载 libevent 2.1.8 版本 2. 先在 win10 上用 wsl ubuntu 编译 libevent 3. 在 wsl 上,准备需要的编译环境sudo apt-get insta ...

最新文章

  1. 土地一分用计算机怎么算,一分地等于多少平方米怎么算
  2. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 2 Residual Networks
  3. python怎么创建文件夹视频_python怎么创建文件夹
  4. c++ vector学习
  5. jq之$(“p:first“)
  6. linux 负载命令,通过Linux命令查看系统平均负载的方法
  7. ios 画线平滑_iOS 画贝塞尔曲线 连续曲线 平滑曲线 曲线图表
  8. centos rpm
  9. java ee笔试题_【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(六)
  10. python禁用键盘鼠标_在Python中禁用或锁定鼠标和键盘?
  11. C++实践參考——二进制文件浏览器
  12. 图文讲解:iOS App提交流程
  13. 极客大学产品经理训练营:数据分析 第八章作业
  14. 揭晓:为什么建议每个开发人员都学Python?
  15. 小米wifi驱动 linux驱动,小米wifi驱动程序
  16. 小程序怎样链接上服务器,微信小程序http连接访问解决方案
  17. 第二人生的源码分析(2)第二人生的基本功能
  18. python selenium 跳转网页_selenium关于页面跳转
  19. Git Bash 默认界面配色分析
  20. 使用HTML5+调用手机摄像头和相册

热门文章

  1. JavaScript 变量提升
  2. VB之修改机器码达到WG
  3. 算法题---最长公共前缀
  4. [网络流24题] 最长递增子序列
  5. limit offset
  6. IIS 之 未能加载文件或程序集“IBM.Data.DB2”或它的某一个依赖项。试图加载格式不正确的程序。...
  7. Python——文件操作
  8. IOS中NSUserDefaults的用法(轻量级本地数据存储)
  9. KMP算法的next数组通俗解释
  10. Mac OS X 程序员利器 – Homebrew安装与使用