linphone android sdk 源码下载编译

简介: linphone android sdk 源码下载编译

前言


image.png


   前面的有写过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 12月 16 15:57 ./
drwxrwxr-x 21 android android  4096 12月 16 09:22 ../
drwxrwxr-x  6 android android  4096 12月 15 20:09 bcg729/
drwxrwxr-x 10 android android  4096 12月 15 20:09 bcmatroska2/
drwxrwxr-x  8 android android  4096 12月 15 20:09 bctoolbox/
drwxrwxr-x 11 android android  4096 12月 15 20:09 bcunit/
drwxrwxr-x  9 android android  4096 12月 15 20:09 belcard/
drwxrwxr-x  9 android android  4096 12月 15 20:09 belle-sip/
drwxrwxr-x  9 android android  4096 12月 15 20:09 belr/
drwxrwxr-x  7 android android  4096 12月 15 20:09 bzrtp/
-rw-rw-r--  1 android android  2069 12月 15 19:45 CHANGELOG.md
drwxrwxr-x  8 android android  4096 12月 16 11:00 cmake/
drwxrwxr-x 10 android android  4096 12月 15 20:09 cmake-builder/
-rw-rw-r--  1 android android  5602 12月 15 19:45 CMakeLists.txt
drwxrwxr-x  2 android android  4096 12月 15 19:45 docker-files/
-rw-rw-r--  1 android android    10 12月 15 19:45 .envrc
drwxrwxr-x 26 android android  4096 12月 15 19:45 external/
-rw-rw-r--  1 android android  7121 12月 15 19:45 flake.lock
-rw-rw-r--  1 android android  4274 12月 15 19:45 flake.nix
drwxrwxr-x  9 android android  4096 12月 15 19:46 .git/
drwxrwxr-x  3 android android  4096 12月 15 19:45 .github/
-rw-rw-r--  1 android android   302 12月 15 19:45 .gitignore
drwxrwxr-x  9 android android  4096 12月 15 19:45 .gitlab-ci-files/
-rw-rw-r--  1 android android  1598 12月 15 19:45 .gitlab-ci-tunnel.yml
-rw-rw-r--  1 android android  3439 12月 15 19:45 .gitlab-ci.yml
-rw-rw-r--  1 android android  4552 12月 15 19:45 .gitmodules
drwxrwxr-x 17 android android  4096 12月 15 20:09 liblinphone/
-rw-rw-r--  1 android android 34523 12月 15 19:45 LICENSE.txt
drwxrwxr-x  9 android android  4096 12月 15 20:09 lime/
drwxrwxr-x 14 android android  4096 12月 15 20:09 mediastreamer2/
drwxrwxr-x  3 android android  4096 12月 15 20:09 msaaudio/
drwxrwxr-x  6 android android  4096 12月 15 20:09 msamr/
drwxrwxr-x  2 android android  4096 12月 15 20:09 msandroidcamera2/
drwxrwxr-x  3 android android  4096 12月 15 20:09 mscodec2/
drwxrwxr-x  4 android android  4096 12月 15 20:09 msoboe/
drwxrwxr-x  5 android android  4096 12月 15 20:09 msopenh264/
drwxrwxr-x  5 android android  4096 12月 15 20:09 mssilk/
drwxrwxr-x  3 android android  4096 12月 15 20:09 mswasapi/
drwxrwxr-x  4 android android  4096 12月 15 20:09 mswebrtc/
drwxrwxr-x  4 android android  4096 12月 15 20:10 mswinrtvid/
drwxrwxr-x 10 android android  4096 12月 15 20:10 ortp/
drwxrwxr-x  7 android android  4096 12月 15 20:10 postquantumcryptoengine/
-rw-rw-r--  1 android android 13876 12月 15 19:45 README.md
drwxrwxr-x  5 android android  4096 12月 15 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.

image.png


linphone-sdk/cmake/Android/CopyLibs.cmake


编译完成


linphone-sdk/build$ ll linphone-sdk/bin/outputs/aar/
total 198508
drwxrwxr-x 2 android android      4096 12月 17 09:50 ./
drwxrwxr-x 4 android android      4096 12月 17 09:49 ../
-rw-rw-r-- 1 android android 167525201 12月 17 09:50 linphone-sdk-android-debug.aar
-rw-rw-r-- 1 android android  35736951 12月 17 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)

image.png

照着改, 增加一行即可


+  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


相关文章
|
2月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
115 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
2月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
43 0
|
2月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
165 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
2月前
|
API 开发工具 Android开发
Android源码下载
Android源码下载
150 0
|
2月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
35 0
|
2月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
54 0
|
2月前
|
API 网络安全 开发工具
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)
|
2月前
|
存储 Java 开发工具
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
|
2月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
21 0
|
2月前
|
Java API 开发工具
Android项目架构设计问题之为SDK添加新的回调支持如何解决
Android项目架构设计问题之为SDK添加新的回调支持如何解决
18 0
下一篇
无影云桌面