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


相关文章
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
854 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
316 0
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1093 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1011 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
1096 4
|
9月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
969 1
|
9月前
|
API 开发工具 Android开发
qq虚拟视频插件下载安装手机版, 安卓虚拟视频插件,替换摄像头工具
Xposed入口模块:拦截目标应用的相机调用‌23 Camera1 API处理:通过PreviewCallback替换视频流‌1 Camera2 API适
|
11月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
643 2
|
12月前
|
Ubuntu 编译器 开发工具
基于Ubuntu Server的YTM32 SDK工程编译
希望这个“烹饪”比喻能帮助你理解SDK工程编译的过程。记住,编程就像烹饪一样,需要耐心,实践,和不断的学习。祝你烹饪愉快!
216 21
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。