安卓studio jni调用第三方静态库CMakeLists配置

2023-05-16


    通过CMakeLists调用第三方静态库需要加入以下CMake配置:  

add_library( mytaglib #这是我即将调用第三方静态库,不需要写完整的静态库名。

             STATIC
             IMPORTED )  

set_target_properties( mytaglib
                       PROPERTIES IMPORTED_LOCATION
                       ${CMAKE_SOURCE_DIR}/libs/x86/libmytaglib.a )  #libmytaglib.a是完整的库名。  

target_link_libraries( mediafile-lib  #这是我自己创建的动态库。
                       mytaglib
                       #z             #有人说要加个z库。其实不加也可以编译通过,并且能运行;加了也没有报错。

                       ${log-lib} )   #这是NDK库文件
build.gradle(app)里面也有一项必要的配置:
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-23',
                        '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
            }
        }
build.gradle(app)的配置里面少了上面这一段,就会导致编译不通过(目前我发现上面这一段仅仅是针对调用静态库的时候需要用到)。
    
    其实这一套配置的作用是把第三方静态库mytaglib导入到我自己创建的动态库mediafile_lib中,然后主程序里面通过
static {
        System.loadLibrary("mediafile-lib");
    }
上面这一段程序就可以通过jni调用mytaglib的库函数了。
    下面是我CMakeLists的完整配置和build.gradle(app)的部分配置:


CMakeLists:
add_library( mediafile-lib  #我创建的动态库
             SHARED
             src/main/java/com_citos_ax5mediaplayer_MediaFileScanner.h
             src/main/cpp/native-lib.cpp)

#第三方静态库是提供了头文件的,但是很奇怪的是我这里并没有对头文件进行引用,jni里面通过#include依旧是能使用的。
#include_directories( src/main/cpp/include/ )
add_library( mytaglib       #我调用的第三方静态库
             STATIC         #注意这里的STATIC关键词和下面的IMPORTED关键词,必须这么用
             IMPORTED )
set_target_properties( mytaglib
                       PROPERTIES IMPORTED_LOCATION
                       ${CMAKE_SOURCE_DIR}/libs/x86/libmytaglib.a )

find_library( log-lib
              log )

target_link_libraries( mediafile-lib
                       mytaglib
                       #z

                       ${log-lib} )
build.gradle(app):
...
android {
    ...
    defaultConfig {
        ndk {
            ldLibs "log"//实现__android_log_print
            abiFilters 'x86'//, 'armeabi-v7a'  //我的库是x86的,所以这里需要过滤一下
        }
        ...
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-23',
                        '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
            }
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓studio jni调用第三方静态库CMakeLists配置 的相关文章

  • visual studio的team使用问题小结

    visual studio的team使用问题小结 一 visual studio xff08 2017 xff09 默认浏览器打开team任务和bug二 visual studio xff08 2017 xff09 上传team时 xff0
  • android studio maven 拉取代码出现 bad gateway 502

    一般都是gradle 配置的maven的仓库 问题 我这里是因为使用了 repositories google jcenter mavenCentral 新增 maven url 39 https www jitpack io 39 mav
  • Android通过jni调用本地c/c++接口方法总结

    网上有网友问android的原生应用 xff0c 上层java代码如何通过jni调用本地的c c 43 43 接口或第三方动态库 xff1f 之前搞过android应用开发和底层c c 43 43 接口开发都是一个人搞定 xff0c 觉得还
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • java--通过JNI调用动态链接库(dll、so、dylib)

    公司项目需要用到第三方qt插件 xff0c 由于业务是偏底层的 xff0c 基本上用不到jar包 xff0c 因此只能通过jni的方式调用 没学过c 43 43 xff0c 十多天的摸爬滚打一路过来不容易啊 xff01 今天总算跑通了 网上
  • visual studio升级

    visual studio升级 概述升级步骤温馨提示 概述 有时处于开发要求或者安全要求 xff0c 需要将visual studio升级到最新的版本 本篇文章记录一下如何升级 升级步骤 1 找到visual studio的安装路径下的安装
  • Eclipse环境下通过Cygwin使用NDK编译jni程序

    一 认识Cygwin NDK和jni 首先来认识一下什么是Cygwin NDK和jni Cygwin Cygwin是一个在windows平台上运行的unix模拟环境 它对于学习unix linux操作环境 或者从unix到windows的应
  • 使用cygwin和ndk生成so库供android使用(jni,交叉编译,opencv,neon)

    1 cygwin 安装 参考 https www cnblogs com webapplee p 3774047 html http www docin com p 1005446599 f6 html 2 下载ndk和依赖opencv 我
  • No implementation found for void com.wust.testjni10.CallJava.callPrintString()

    问题描述 当你看到这篇文章的时候 说明你会jni了 并且还在调用 so 库 可问题就出在调用的时候报了这么个错 No implementation found for void com wust testjni10 CallJava cal
  • java调用.so文件

    第一步 public class JavaToCTest private native void sayHello 声明本地方法 static System loadLibrary JavaToCTest 需要加载的so库文件的名称 在li
  • C语言基础入门详解一

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 前言 初识C语言 include 相当于java的import stdio全称 standard inpu
  • Cygwin编译JNI的环境配置

    一 什么是NDK NDK提供了一系列的工具 帮助开发者快速开发C 或C 的动态库 并能自动将so和java应用一起打包成apk 这些工具对开发者的帮助是巨大的 NDK 集成了交叉编译器 并提供了相应的mk文件隔离CPU 平台 ABI 等差异
  • 手把手教你在Android中使用bsdiff实现文件增量更新 (超详细)

    全量更新和增量更新 在Android开发中 版本更新是一个非常常见的需求 目前更新主要分为两种方式 全量更新 增量更新 如下图 分别是酷安和应用宝两个商店的更新页面 可以明显的看到 酷安的更新方式是全量更新 即每次下载全量的新版本文件 当然
  • 在C/C++中调用Java代码

    JNI就是Java Native Interface 即可以实现Java调用本地库 也可以实现C C 调用Java代码 从而实现了两种语言的互通 可以让我们更加灵活的使用 通过使用JNI可以从一个侧面了解Java内部的一些实现 本文使用的环
  • 最近接触的技术汇集帖

    最近在网上查资料碰到好多没接触过的技术 先汇总在这里备用 以后慢慢吸收 1 JNA JNI的替代品 调用方式比JNI更直接 不再需要JNI那层中间接口 几乎达到Java直接调用动态库 2 SmallSQL 基于JDBC3 0转为Deskto
  • C语言基础入门详解二

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 一 C语言多级指针入门 include
  • C/C++在Android开发中的应用

    JNI开发系列阅读 JNI与底层调用1 http blog csdn net axi295309066 article details 60758515 JNI与底层调用2 http blog csdn net axi295309066 a
  • Android Studio3.4.2新建C++项目,CMakeLists批量添加代码编译不过的坑

    上段时间升级了AS到3 4 2 最后新建了个C 的项目 然后生成的那个native lib cpp文件就可以编译 但是我的项目里 C 代码文件非常多 显然一个一个地添加太慢了 然后就想批量添加进去 但总是编译不过 真是orz 像上图这样 批
  • 导致java.lang.UnsatisfiedLinkError错误的一种解决办法

    欢迎转载请注明出处http blog csdn net ning gg article details 53641254 在程序中加入so文件导致java lang UnsatisfiedLinkError错误的一种解决办法 可能这个解决办
  • android通过JNI用C/C++创建本地文件

    通过jni在本地创建文件 1 在android studio创建基本的jni工程 并且在APP界面成功显示 Hello from C 不会的可以看android studio使用jni 2 在native lib cpp文件中创建文件 为了

随机推荐

  • Linux ls 命令提示 Input/output error

    个人博客 xff1a https 5mr xyz 一 问题描述 某一台跑批服务器硬盘无法正常读写 xff0c 提示input output error xff0c 服务器每天均需使用 xff0c 询问情况后发现服务器首先为硬盘故障 xff0
  • storcli工具的使用方法

    个人博客 xff1a https 5mr xyz 常用命令 xff1a xff08 c代表Controller xff0c e代表Enclosure xff0c s代表Slot或PD xff0c v代表ld xff09 opt MegaRA
  • xshell 连接报错 Disconnected from remote host

    个人博客 xff1a https 5mr xyz xshell连接报错 解决方法 1 登陆带外管理口远程控制台 2 查看 Var empty的属主属组和权限 xff0c empty权限需为755 3 Chmod 777 R var后导致ss
  • IPMI管理工具使用方法

    个人博客 xff1a https 5mr xyz 前言 最近需要对多台服务进行控制 xff0c 通过服务器的 BMC 控制台去控制太麻烦 xff0c 服务器刚好支持 IPMI 协议 xff0c 这里记录下常用的几条命令备忘 什么是 IPMI
  • k8s-cka考试题库

    个人博客 xff1a https 5mr xyz 本次测试的所有问题都必须在指定的cluster配置环境中完成 为尽量减少切换 xff0c 系统已对问题进行分组 xff0c 同一cluster内的所有问题将连续显示 开启TAB补全 做题前先
  • Segment Routing—BGP-LS

    BGP LS概况 BGP LS是学习多个IGP区域和区域拓扑的首选机制 BGP LS使用BGP xff0c 以可扩展的方式分发网络信息 重要的是 xff0c BGP LS还承载了IGP没有分发的信息 xff08 例如BGP对等体互联链路 x
  • OVN实验----L3互通

    概述 在L2互通基础上 xff0c 完成跨网段互访 物理拓扑 如上一个实验OVN实验 L2互通 逻辑拓扑 按照上个实验OVN实验 L2互通 的操作方式 xff0c 再配置一组容器blue xff0c 网段192 168 2 0 24 配置完
  • OVN实验----NAT

    概述 在L2互通 L3互通实验基础上通过NAT实现访问公网 架构图如下 xff0c 这里两台逻辑路由器LR1和GLR是通过一台逻辑交换机LSjoin互连的 xff0c GLR和物理网络设备通过LSlocal相连 物理拓扑 如上一个实验OVN
  • java环境变量配置好之后,cmd命令行javac为什么还是无效

    把cmd命令行关闭重启一下就好了 备注 xff1a jdk5 0之后 xff0c classpath不需要配置
  • Linux编程中的文件锁之flock

    1 场景概述 在多线程开发中 xff0c 互斥锁可以用于对临界资源的保护 xff0c 防止数据的不一致 xff0c 这是最为普遍的使用方法 那在多进程中如何处理文件之间的同步呢 xff1f 我们看看下面的图 xff1a 图中所示的是两个进程
  • 《现代医学成像科学丛书——CT原理与技术》——X射线管的基本作用

    Imaging System 医学影像 64 EnzoReventon 现代医学成像科学丛书 CT原理与技术 X射线管 xff08 球管 xff09 是CT中的重要部件 xff0c 它是设备的信号源 一 球管的基本作用 球管产生X射线的基本
  • curl -sSL https://get.rvm.io | bash -s stable curl: (7) Failed connect to api.github.com:443; 拒绝连接

    curl L get rvm io bash s stable curl sSL https get rvm io bash s stable curl 7 Failed connect to api github com 443 拒绝连接
  • Linux学习十一

    Linux学习十一 iptables服务把用于处理或过滤流量的策略条目称之为规则 xff0c 多条规则可以组成一个规则链 xff0c 而规则链则依据数据包处理位置的不同进行分类 xff0c 具体如下 xff1a 在进行路由选择前处理数据包
  • Docker - 解决容器内获取的时间和主机的时间不一样的问题

    问题背景 分别在容器和主机下执行 date 命令 可以看到 xff0c 时间是完全不一样的 解决方案 在运行容器时 xff0c 挂载 etc localtime 目录 docker run d v etc localtime etc loc
  • vscode中使用pip安装依赖包

    在vscode顶部菜单栏点击 终端 xff0c 软件下方出现终端输入框 第二步 xff1a 点击页面左下角查看python解释器路径 xff1a 在终端中进入到python解释器所在的路径 xff0c 例如输入 cd 39 C Users
  • ROS的2D仿真stdr安装

    ROS中仿真是很重要的一环 xff0c 一般3D仿真使用gazebo居多 xff0c 也可以使用Webots xff0c V rep xff0c stage 2D仿真有stdr xff0c turtlesim 图形显示可以用RVIZ std
  • 华为机试6 公因数集合

    题目描述 功能 输入一个正整数 xff0c 按照从小到大的顺序输出它的所有质因子 xff08 重复的也要列举 xff09 xff08 如180的质因子为2 2 3 3 5 xff09 最后一个数后面也要有空格 输入描述 输入一个long型整
  • Can't find file /root/.vnc/6be8fb894e4a:1.pid You'll have to kill the Xvnc4 process manually

    解决方法 xff1a 分别运行一下代码 xff1a rm tmp X rm tmp X11 unix X1 重新开启VNC服务 xff1a vncserver 1 geometry 1920x1080 depth 24
  • SONiC系统架构

    SONiC系统由两部分组成 xff1a 1 彼此交互的模块 2 用于交互的基础设施 xff08 集中式 xff0c 可扩展 xff09 其中用于交互的基础设施主要是一个非关系型数据库Redis引擎 xff1a 1 提供了一个无视语言的接口
  • 安卓studio jni调用第三方静态库CMakeLists配置

    通过CMakeLists调用第三方静态库需要加入以下CMake配置 xff1a add library mytaglib 这是我即将调用第三方静态库 xff0c 不需要写完整的静态库名 STATIC IMPORTED set target