android prebuild第三方so库,Android NDK编译本地文件以及引用第三方so文件
在需要引入第三方的so文件的情况下,怎样使用NDK编译本地代码?
1.新建jni文件夹,将你要编译源码的文件以及需要引入的so文件复制到jni文件目录下
2.编写android.mk文件,首先将你的将你的本地代码文件的android.mk部分的代码写好,然后在这部分后面添加需要引入的so文件的代码
参考格式如下:
1.全部写在一个文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libyour_module_name
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := your_module_src.cpp
include $(BUILD_SHARED_LIBRARY)
#下面为第三方的库
include $(CLEAR_VARS)
LOCAL_MODULE := liblocSDK3
LOCAL_SRC_FILES := liblocSDK3.so
include $(PREBUILT_SHARED_LIBRARY)
2.单独引入
我们也可以为每一个第三方库,写一个.mk文件,然后在主的.mk文件中进行引入
Android_ffmpeg.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg_jni
LOCAL_SRC_FILES := ffmpeg_jni.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ $(LOCAL_PATH)/include/libavutil/ $(LOCAL_PATH)/include/libavcodec/ $(LOCAL_PATH)/include/libavformat/ $(LOCAL_PATH)/include/libavcodec/ $(LOCAL_PATH)/include/libswscale/
LOCAL_LDLIBS += -L$(LOCAL_PATH)/prebuilt/ -lffmpeg -llog
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/prebuilt/Android_ffmpeg.mk
以上部分就是百度定位sdk的so文件引入时的android.mk部分的编写,如果你还需要其他的so文件呢,你只需要在这部分的后面再加上这样的代码,然后将名字替换成那个so文件的名即可。
编写好了之后,我们编译工程,最后我们会在armeabi等文件夹中,看到两个so文件,libyour_module_name.so以及liblocSDK3.so文件,如果你是直接将需要引入的so文件导入到armeabi文件夹下,那么编译后你将只会看见libyour_module_name.so文件。
3.单独引用(推荐)
首先可以为每一个第三方库,写一个.mk文件,然后在主的.mk文件中进行调用
Android.mk (第三方库)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
Android.mk (自己写的jni wrapper)
#added by rx 150425
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := player
SDL_PATH := ../SDL2
FFMPEG_PATH := ../ffmpeg
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SDL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c
#LOCAL_SRC_FILES += SDLtest.c
#LOCAL_SRC_FILES += SDLTestAudio.c
LOCAL_SRC_FILES += sdl2Lesson.c
#添加本地共享库
LOCAL_SHARED_LIBRARIES := SDL2
LOCAL_SHARED_LIBRARIES += ffmpeg
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog
include $(BUILD_SHARED_LIBRARY)
Android.mk (最外层的mk文件调用当前所有子目录的mk文件)
include $(call all-subdir-makefiles)
目录结构示意图.png
android prebuild第三方so库,Android NDK编译本地文件以及引用第三方so文件相关推荐
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- Android 自带图标库 android.R.drawable
在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...
- 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...
ndk编译C++.提示找不到头文件(ndk-build error: string: No such file or directory) 被这个问题弄得愁眉苦脸啊.心想为啥一个string都找不到呢 ...
- 构建Android的交叉编译器、用NDK编译移植
在之前的文章中提到了用arm-none-linux-gnueabi-gcc交叉编译移植程序到Android平台上.也提到了,Android中没有glibc,所以arm-none-linux-gnuea ...
- android 第三方视频库,android视频播放库
因为要学习使用当前流行的视频播放库,下面介绍当前比较流行的四款视频播放库.(文章末有一些优秀的播放库) gsyvideoplayer ijkPlayer ExoPlayer jiaoziVideoPl ...
- android cpp做成so库,Android增量更新(二)—制作合成文件so库
###前言 在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程. 那么,今天就来讲讲增量更新合成流程的实现吧. ...
- android 6.0权限库,Android 6.0动态权限适配
前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...
- android 沉浸式开源库,Android沉浸式状态栏
关于Android沉浸式状态栏, 网上已经有很多开源库, 虽然开源库可以解决某些特定布局下的沉浸式状态栏问题, 但是遇到比较特殊的布局就无法解决了, 所以了解一下沉浸式状态栏如何实现是有必要的. 无论 ...
最新文章
- grub设置密码的方法
- 忍不了,又黑我运维攻城狮??| 每日趣闻
- 鲜为人知的C++ IO fstream流
- 【网络流】人员雇佣(luogu 1791)
- c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧
- 1.react生命周期详解(2020.12.05)
- 怎么把外部参照合并到图纸_怎么对两个图纸内容进行合并操作
- ubantu的二三事
- return的用法 java_Java中return用法.
- 【AppScan闪退】
- echart 中国地图 带effectScatter和lines
- 基于单片机的交通灯控制系统设计
- Windows下查看进程及结束进程命令
- ffmpeg翻译文档
- btb和oto,btc模式是什么意思
- Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...
- 2022年1月时事政治行业微信视频号企业认证排行榜:中央电视台运营的3个视频号上榜,央视新闻再度蝉联榜首(附月榜TOP20详单)
- 工信部敏感权限Android端排查快速检索
- 微信小程序和野狗数据库结合
- Linux工作计时提醒软件,计时纪念日软件-计时纪念日提醒app下载v1.0-Linux公社
热门文章
- Java,使用泛型构建自己的工具包——包装System.out
- 正则表达式---采集总结
- eclipse中git的配置、提交代码、从远程导入代码
- parrot linux iso下载,Parrot 4.7 发布,基于Debian的数字取证和隐私保护Linux发行版
- linux shell 解析文本文件,linux Shell 全解析
- mysql语言中修改表结构的命令_在T-SQL语言中,修改表结构时,应使用的命令是( )...
- jws webservice 跳过https认证_基于OAuth2的OIDC (OpenId Connect)身份认证
- php分页类smary,php新闻内容分页实例(smarty 模板)
- k8s ubuntu cni_K8S环境快速部署Kafka(K8S外部可访问)-WEB资讯专栏-DMOZ中文网站分类目录...
- mongodb objetcid_mongodb(1)