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


相关文章
|
3天前
|
JSON 编译器 开发工具
VS Code阅读Android源码
VS Code阅读Android源码
10 1
|
4天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
23天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
23天前
|
Java Android开发
Android反编译查看源码
Android反编译查看源码
25 0
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
32 0
|
3月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
280 0
|
3天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
6 0
|
23天前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
12 0
|
1月前
|
Shell 开发工具 Android开发
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
510 2
|
1月前
|
Android开发 对象存储
OSS对象储存android开发进行下载到本地文件时异步操作失效
android vivo80使用官方示例代码进行文件下载,但是使用oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>()时onSuccess和onFailure不执行