Android上安装第三方库
在Android sdk中安装预安装第三方的(动态,静态)库,到系统中,方便模块无差别的使用。
Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS := lib/libAirFlyWfd.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_MULTI_PREBUILT)
编译安装后系统会拷贝创建如下三个文件
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver_intermediates\export_includes
其中
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
是用来打包到arm板子上的。
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
是用来供其他模块编译的时候链接调用的。
需要使用时只需要想连接其他系统库一样加入
LOCAL_SHARED_LIBRARIES := \
libAirFlyWfd \
-----------------------------------以下是采坑的过程---------------------------
按照将所网上的信息,还有以下两种方式,但是经过测试在android4.4.2上都不能正常使用
方法一 使用include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libAirFlyWfd
LOCAL_MODULE_CLASS :=SHARED_LIBRARIES
LOCAL_SRC_FILES := lib/libAirFlyWfd.so
include $(BUILD_PREBUILT)
这个方法最后的结果是如下,
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver_intermediates\export_includes
打包到两个lib目录下的文件没有.so后缀,这样导致其他模块调用libAirFlyWfd这个库的候在
out\target\product\dolphin-fvd-p1\obj\lib\目录下找不到libAirFlyWfd.so而报错
make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/lib/libAirFlyWfd.so'
同时打包到板子上的
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd这个文件也没有法识别成动态库
如果改成
LOCAL_MODULE := libAirFlyWfd.so
安装完后如下
out\target\product\dolphin-fvd-p1\system\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\lib\libAirFlyWfd.so
out\target\product\dolphin-fvd-p1\obj\SHARED_LIBRARIES\libAirFlyReceiver.so_intermediates\export_includes
库文件名称是ok的,但是
libAirFlyReceiver.so_intermediates目录名称不对,多了.so导致其他模块调用时找不到export_includes
make: *** No rule to make target 'out/target/product/dolphin-fvd-p1/obj/SHARED_LIBRARIES/libAirFlyWfd_intermediates/export_includes'
方法二 使用include $(PREBUILT_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE :=libAirFlyWfd.so
LOCAL_SRC_FILES := lib/libAirFlyWfd.so
include $(PREBUILT_SHARED_LIBRARY)
按照以上方法执行Android.mk后没有任何反应,android 4.4.2上应该没有定义
include $(PREBUILT_SHARED_LIBRARY) 对应的操作方法,貌似是NDK r5以后才支持这个操作,具体没测试过。
最后参考
https://blog.csdn.net/lizhiguo0532/article/details/7219349
使用include $(BUILD_MULTI_PREBUILT)方法才ok。
------------------------------------------------------------
以上是安装成系统的共享库,方便所有模块使用。
如果只是某个模块单独使用,可以在对应的Android.mk中直接使用
LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libAirFlyWfd.so
来指定库的路径。
同时别忘了将该库拷贝(PRODUCT_COPY_FILES)到/system/lib/下,才能烧录到板子,否则依赖此库的应用在板子上都无法正常启动。
Android上安装第三方库的更多相关文章
- 使用PyCharm安装第三方库
使用PyCharm安装第三方库是一种十分简单的做法,接下来我来演示一下在PyCharm上安装第三方库requess的操作流程. 首先,先看一下当第三方库未安装时的提示内容,在pycharm中新建pyt ...
- pip安装第三方库以及版本
这篇blog只是写给自己看看的. 今天突然遇到sqlalchemy映射到数据库时,一个字段类型是datetime(6),我这边死活访问不上,之前一直没有问题,最后查明原因,原来是第三方库的版本问题,真 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- Android中集成第三方库的方法和问题
Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...
- Dev-C++安装第三方库boost
Dev-C++安装第三方库boost 转 https://www.jianshu.com/p/111571e4d6f5?utm_source=oschina-app 之前鉴于codeblocks界面 ...
- 关于pycharm中安装第三方库时报错的解决办法(一)
记录自己的生活! 一.事发背景 在pycharm中直接安装第三方库时因为版本问题总是无法安装成功,事情不大,但是很重要. 二.经过 最开始我自己电脑上安装了Python3.6和Python2. ...
- 田螺便利店—PyCharm安装第三方库
PyCharm安装第三方库是十分方便的,无需pip或其他工具,平台就自带了这个功能而且操作十分简便.如下: 1. 打开软件,点击左上角“文件(File)”—>“设置(setting)”: 2. ...
- npm安装第三方库找不到“cl.exe”问题
1.安装第三方库时找不到"cl.exe"的解决方法 安装 本地 remix时 出现错误(npm install remix-ide -g) 原因:remix 依赖的 python库 ...
- PyCharm安装第三方库如Requests
转载: https://blog.csdn.net/fx677588/article/details/56830929 PyCharm安装第三方库是十分方便的,无需pip或其他工具,平台就自带了这个功 ...
随机推荐
- WPF 过渡效果
http://blog.csdn.net/lhx527099095/article/details/8005095 先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我 废话 ...
- ❤️❤️用最简单的方法在Webstorm中打开已存在项目 和 新建Vue项目 (亲测实用)❤️❤️
目录 一:打开已存在项目时 二:新建一个vue项目 使用webstorm创建vue项目创建vue项目各个公司用的工具都不一样 最常见的有HBuilder X,WebStorm,Visual Stu ...
- JAVA语言程序设计课程评价
紧张的又短暂的一个学期结束了,这个学期也许将成为我人生中一个重要的转折点,作为一名半路出家的选手,在初次了解Java语言时我感到非常的迷茫与不知所措.因为之前很多同学都是通过假期时间在家自学,刚转入新 ...
- PHP中类的自动加载
在之前,我们已经学习过Composer自动加载的原理,其实就是利用了PHP中的类自动加载的特性.在文末有该系列文章的链接. PHP中类的自动加载主要依靠的是__autoload()和spl_autol ...
- 启动Jenkins后无法访问,如何排错
做IT工作,使用各种工具的时候,遇到错误都是一堆英文,对于英语不好的人,看到报错可能就会心烦,我刚开始就是这种状态.后来,遇到问题,首先复制报错信息到百度上搜索,没有人请教的时候,你不能坐等问题自己解 ...
- python读取ini文件
import configparser import os config=configparser.ConfigParser()#创建config对象 file_path=os.path.dirnam ...
- Docker小白到实战之Docker网络简单了解一下
前言 现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配.容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下 ...
- Python日常Bug集
1.TypeError: 'int' object is not iterable: 场景示例: data = 7 for i in data: print(i) # 原因:直接对int数据进行迭代造 ...
- IO之字符流
什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...
- 理解hashMap
首先需要理解几个基本概念: 什么是数据结构?(摘自 java数据结构系列--什么是数据结构 (baidu.com)) 数据结构是计算机组织.存储数据的方式.简单来说就是,数据按指定的规则进行存储,从而 ...