在需要引入第三方的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文件相关推荐

  1. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  2. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  3. Android 自带图标库 android.R.drawable

    在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...

  4. 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都找不到呢 ...

  5. 构建Android的交叉编译器、用NDK编译移植

    在之前的文章中提到了用arm-none-linux-gnueabi-gcc交叉编译移植程序到Android平台上.也提到了,Android中没有glibc,所以arm-none-linux-gnuea ...

  6. android 第三方视频库,android视频播放库

    因为要学习使用当前流行的视频播放库,下面介绍当前比较流行的四款视频播放库.(文章末有一些优秀的播放库) gsyvideoplayer ijkPlayer ExoPlayer jiaoziVideoPl ...

  7. android cpp做成so库,Android增量更新(二)—制作合成文件so库

    ###前言 在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程. 那么,今天就来讲讲增量更新合成流程的实现吧. ...

  8. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  9. android 沉浸式开源库,Android沉浸式状态栏

    关于Android沉浸式状态栏, 网上已经有很多开源库, 虽然开源库可以解决某些特定布局下的沉浸式状态栏问题, 但是遇到比较特殊的布局就无法解决了, 所以了解一下沉浸式状态栏如何实现是有必要的. 无论 ...

最新文章

  1. grub设置密码的方法
  2. 忍不了,又黑我运维攻城狮??| 每日趣闻
  3. 鲜为人知的C++ IO fstream流
  4. 【网络流】人员雇佣(luogu 1791)
  5. c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧
  6. 1.react生命周期详解(2020.12.05)
  7. 怎么把外部参照合并到图纸_怎么对两个图纸内容进行合并操作
  8. ubantu的二三事
  9. return的用法 java_Java中return用法.
  10. 【AppScan闪退】
  11. echart 中国地图 带effectScatter和lines
  12. 基于单片机的交通灯控制系统设计
  13. Windows下查看进程及结束进程命令
  14. ffmpeg翻译文档
  15. btb和oto,btc模式是什么意思
  16. Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...
  17. 2022年1月时事政治行业微信视频号企业认证排行榜:中央电视台运营的3个视频号上榜,央视新闻再度蝉联榜首(附月榜TOP20详单)
  18. 工信部敏感权限Android端排查快速检索
  19. 微信小程序和野狗数据库结合
  20. Linux工作计时提醒软件,计时纪念日软件-计时纪念日提醒app下载v1.0-Linux公社

热门文章

  1. Java,使用泛型构建自己的工具包——包装System.out
  2. 正则表达式---采集总结
  3. eclipse中git的配置、提交代码、从远程导入代码
  4. parrot linux iso下载,Parrot 4.7 发布,基于Debian的数字取证和隐私保护Linux发行版
  5. linux shell 解析文本文件,linux Shell 全解析
  6. mysql语言中修改表结构的命令_在T-SQL语言中,修改表结构时,应使用的命令是( )...
  7. jws webservice 跳过https认证_基于OAuth2的OIDC (OpenId Connect)身份认证
  8. php分页类smary,php新闻内容分页实例(smarty 模板)
  9. k8s ubuntu cni_K8S环境快速部署Kafka(K8S外部可访问)-WEB资讯专栏-DMOZ中文网站分类目录...
  10. mongodb objetcid_mongodb(1)