linphone android sdk 源码下载编译

news/2024/11/9 9:36:33/

前言

在这里插入图片描述

    前面的有写过Android 使用Linphone SDK开发SIP客户端相关的文章, 在后续的开发过程中, 为了更深入了解linphone, 便尝试下载SDK源码自行编译.

    关于linphone这里不作过多介绍, 可以参考前面的文章.

    Linphone-SDK 是一个将 Liblinphone 及其依赖项捆绑为 git 子模块的项目,目的是简化整个 Liblinphone 套件的编译和打包,包括 Mediastreamer2、Belle-sip、oRTP 等。
    它的编译生成一个 SDK,适合创建在这些组件之上运行的应用程序。非 Linphone 团队开发或维护的子模块分组在 external/ 目录中。

    当前支持的平台有 Android、iOS、Desktop(Linux、Windows、Mac OS X)和 UWP(Universal Windows Platform)。

clone 代码

GitLab linphone-sdk

git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git

注意: 为什么不使用GitHub上的仓库

# ********
# **注意**
# ********
#从GitHub上克隆下来的代码, 不能正常编译, 原因是有些模块找不到, 更新/下载不来.
https://github.com/BelledonneCommunications/linphone-sdk
git clone https://github.com/BelledonneCommunications/linphone-sdk.git

源码下载[2GB]

提取码: 4x4c 

环境及信赖

系统: Ubuntu 20.04
内存: 16GB
存储: 512GB

工具包:

  • Cmake >= 3.11
  • python >= 3.6
  • pip (or pip3 if the build machine has both python2 and python3)
  • yasm
  • nasm
  • doxygen
  • Pystache (use pip install pystache or pip3 install pystache)
  • six (use pip install six or pip3 install six)

编译

克隆下来解压出来后, 依赖的库代码基本为空, 通过下面的命令, 可以检索出所需要库代码.

检索依赖项
Linphone-SDK 的 git 存储库包含 git 子模块。 它必须使用 --recursive 选项进行克隆。 更新或切换分支后,永远不要忘记检查和更新子模块:

git submodule update --init --recursive

这个过程需要较长的时间, 具体看网络条件, 若出现失败建议检查下网络原因, 另外考虑下是否外网访问的问题.
完成后, 目录文件 列表:

linphone-sdk$ ll
total 248
drwxrwxr-x 35 android android  4096 1216 15:57 ./
drwxrwxr-x 21 android android  4096 1216 09:22 ../
drwxrwxr-x  6 android android  4096 1215 20:09 bcg729/
drwxrwxr-x 10 android android  4096 1215 20:09 bcmatroska2/
drwxrwxr-x  8 android android  4096 1215 20:09 bctoolbox/
drwxrwxr-x 11 android android  4096 1215 20:09 bcunit/
drwxrwxr-x  9 android android  4096 1215 20:09 belcard/
drwxrwxr-x  9 android android  4096 1215 20:09 belle-sip/
drwxrwxr-x  9 android android  4096 1215 20:09 belr/
drwxrwxr-x  7 android android  4096 1215 20:09 bzrtp/
-rw-rw-r--  1 android android  2069 1215 19:45 CHANGELOG.md
drwxrwxr-x  8 android android  4096 1216 11:00 cmake/
drwxrwxr-x 10 android android  4096 1215 20:09 cmake-builder/
-rw-rw-r--  1 android android  5602 1215 19:45 CMakeLists.txt
drwxrwxr-x  2 android android  4096 1215 19:45 docker-files/
-rw-rw-r--  1 android android    10 1215 19:45 .envrc
drwxrwxr-x 26 android android  4096 1215 19:45 external/
-rw-rw-r--  1 android android  7121 1215 19:45 flake.lock
-rw-rw-r--  1 android android  4274 1215 19:45 flake.nix
drwxrwxr-x  9 android android  4096 1215 19:46 .git/
drwxrwxr-x  3 android android  4096 1215 19:45 .github/
-rw-rw-r--  1 android android   302 1215 19:45 .gitignore
drwxrwxr-x  9 android android  4096 1215 19:45 .gitlab-ci-files/
-rw-rw-r--  1 android android  1598 1215 19:45 .gitlab-ci-tunnel.yml
-rw-rw-r--  1 android android  3439 1215 19:45 .gitlab-ci.yml
-rw-rw-r--  1 android android  4552 1215 19:45 .gitmodules
drwxrwxr-x 17 android android  4096 1215 20:09 liblinphone/
-rw-rw-r--  1 android android 34523 1215 19:45 LICENSE.txt
drwxrwxr-x  9 android android  4096 1215 20:09 lime/
drwxrwxr-x 14 android android  4096 1215 20:09 mediastreamer2/
drwxrwxr-x  3 android android  4096 1215 20:09 msaaudio/
drwxrwxr-x  6 android android  4096 1215 20:09 msamr/
drwxrwxr-x  2 android android  4096 1215 20:09 msandroidcamera2/
drwxrwxr-x  3 android android  4096 1215 20:09 mscodec2/
drwxrwxr-x  4 android android  4096 1215 20:09 msoboe/
drwxrwxr-x  5 android android  4096 1215 20:09 msopenh264/
drwxrwxr-x  5 android android  4096 1215 20:09 mssilk/
drwxrwxr-x  3 android android  4096 1215 20:09 mswasapi/
drwxrwxr-x  4 android android  4096 1215 20:09 mswebrtc/
drwxrwxr-x  4 android android  4096 1215 20:10 mswinrtvid/
drwxrwxr-x 10 android android  4096 1215 20:10 ortp/
drwxrwxr-x  7 android android  4096 1215 20:10 postquantumcryptoengine/
-rw-rw-r--  1 android android 13876 1215 19:45 README.md
drwxrwxr-x  5 android android  4096 1215 19:45 tester/

开始编译:

# 设置Android SDK 路径
linphone-sdk$ export ANDROID_SDK_ROOT=/home/android/Android/Sdk
# 设置Android NDK 路径
linphone-sdk$ export PATH=$PATH:/home/android/Android/Sdk/ndk/20.0.5594570
linphone-sdk$ mkdir build
linphone-sdk$ cd build
# 参考官方
linphone-sdk/build$ cmake .. -DLINPHONESDK_PLATFORM=Android -DLINPHONESDK_ANDROID_ARCHS=arm64,x86,armv7 -DENABLE_SILK=YES -DENABLE_G729==YES
# 开始编译
linphone-sdk/build$ cmake --build . -j4

编译时间比较长, 耐心等待即可.

-DLINPHONESDK_ANDROID_ARCHS的值, 可以参考:

arm -> armeabi 已不受支持:

CMake Error at /home/android/Android/Sdk/ndk/20.0.5594570/build/cmake/android.toolchain.cmake:177 (message):armeabi is no longer supported.  Use armeabi-v7a.

在这里插入图片描述

linphone-sdk/cmake/Android/CopyLibs.cmake


编译完成

linphone-sdk/build$ ll linphone-sdk/bin/outputs/aar/
total 198508
drwxrwxr-x 2 android android      4096 1217 09:50 ./
drwxrwxr-x 4 android android      4096 1217 09:49 ../
-rw-rw-r-- 1 android android 167525201 1217 09:50 linphone-sdk-android-debug.aar
-rw-rw-r-- 1 android android  35736951 1217 09:49 linphone-sdk-android-release.aar

生成的linphone-sdk-android-release.aar, 便可以导入给APP开发用.

导入后, 出现找不到libc++_shared.so

Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/lib/arm, /data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]] couldn't find "libc++_shared.so"at java.lang.Runtime.loadLibrary0(Runtime.java:1011)at java.lang.System.loadLibrary(System.java:1657)at org.linphone.core.FactoryImpl.<clinit>(Factory.java:727)at org.linphone.core.Factory.instance(Factory.java:49) at com.saike.ocs.phone.SipPhone.loadSipLibs(SipPhone.java:51) at com.saike.ocs.phone.PhoneManager$1.run(PhoneManager.java:60) 

在这里插入图片描述
照着改, 增加一行即可

+ 	file(COPY "${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${_libarch}/libc++_shared.so" DESTINATION "linphone-sdk/android-${_arch}/lib/")

参考

linphone-sdk
集成第三so之dlopen failed: library “libc++_shared.so” not found
Fixed missing libc++_shared.so that happens sometimes


http://www.ppmy.cn/news/8970.html

相关文章

c++动态内存管理

1.回顾c语言中的动态内存管理 在c语言中&#xff0c;我们想要动态开辟一段空间&#xff0c;需要使用malloc&#xff0c;calloc&#xff0c;realloc几个函数 void* malloc (size_t size); //在堆上申请size个字节的空间void* calloc (size_t num, size_t size); //第一个参数是…

Qt常用快捷键汇总

文章目录Win&#xff1a;常规界面Ui设计界面Linux差异&#xff1a;Win&#xff1a; 常规界面 F1 打开帮助 F2 跳到声明/定义 F3 普通查找的查找下一个 Linux:Ctrl G F4 切换.h/.cpp文件 F5 调试运行程序 F6 高级查找的查找下一个 F9 设置/取消断点 F10 单步调试 F11 进入函数…

STK异常场景介绍

本文介绍两种STK异常场景。 SMSC不能通过STK refresh命令更新终端插入带有STK应用的SIM卡,进入STK应用,选择”refresh SMSC”,然后进入短信设置,查看短信中心号码并没有更新。 关键Log MSG_ID_SAT_FILE_CHANGE_IND Local_Parameter --> Len = 256, Addr = 0x62B8F66C sa…

高级IO-多路转接

高级IO 以前的都是拷贝接口。write什么的就是将字符串拷贝到发送缓冲区中。 应用层等待接收缓冲区填写数据的过程算是IO吗&#xff1f;算 IO等待拷贝数据&#xff1b; 真正的IO的过程就是拷贝的过程。比如等待鱼上钩的时候也算是钓鱼(adj)&#xff0c;当把鱼拿上来的时候也…

Vlan的原理与配置

传统以太网的问题 规模大了&#xff0c;之后导致性能也很差&#xff0c;广播会增加 解决&#xff1a;用Vlan&#xff0c;不受地域限制&#xff0c;同一Vlan内的设备才能直接进行二层通信 实验 首先配置以上vlan与电脑ip 配置IP之后可以进行ping命令测试刚开始是连通的&#x…

【C语言】你对动态内存分配有多少了解呢

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、什么是动态内存分配二、为什…

JVM垃圾回收器-ParNew回收器:并行回收

文章目录学习资料垃圾回收器ParNew回收器&#xff1a;并行回收学习资料 【尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟机&#xff09;】 【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java JDK 8 JVM官方手册 垃圾回收器 ParNew回收器&#xff1a;并行回…

网络编程概述

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 网络编程嵌套字 UDP DatagramSocket API DatagramPacket API InetSocketAddress API 基于UDP实现服务端 代码&#xff1a; 分析&#xff1a;…