Ubuntu18.04编译Linphone Android最新版本4.4

本文详细介绍如何在Ubuntu环境下从源代码编译Linphone Android SDK,包括环境搭建、依赖库安装及编译选项配置,适用于希望深入了解并定制Linphone SDK的开发者。

从github上下载最新的代码

https://github.com/BelledonneCommunications/linphone-android.git

下载后可以看到有一个linphone-sdk-android目录,但是里面只有一个build文件,而且也没有之前3.X版本的submodules的库。

直接用Android Studio打开项目,也会自动下载Linphone自己编译好的SDK。

现在的版本的代码结构和之前的版本有很大不同,不会将原来底层的协议栈放到在代码,只有JAVA的代码,linphone的SDK需要另外编译。

linphone SDK的android编译必须要在Linux或者MacOS下面编译。我们就使用Ubuntu来编译。

使用虚拟机安装ubuntu-18.04.2,配置环境,并且安装Java和Android SDK/NDK,Java只能装Java8,太高版本会编译会失败,具体可参照我之前的文章《Ubuntu17.04编译Linphone Android最新版本3.2.8》

https://blog.youkuaiyun.com/liccon/article/details/78275899

最新的4.3版本用最新的NDK20也可以成功编译,推荐使用Android Studio的SDK管理界面下载NDK。下载完成后要在/etc/profile加入NDK的路径,在SDK下的./ndk/版本号 目录

我们下载linphone-sdk的代码

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

下载完成后,阅读linphone-sdk的README.md文件,cmake,python(2.7版本),pip(pip实际的安装包是python-pip),yasm,nasm,doxygen

,Pystache (使用pip install pystache安装), six (使用pip install six安装),除此之外,还需要安装pkg-config

PS:如提示无法定位python-pip,可以安装python3,安装之前需要将原来的python2移除

sudo apt-get install python3 python3-dev python3-pip

Pystache 和则需要pip3 install pystache指令安装

 

进入linphone-sdk的目录,创建build子目录

mkdir build

cd build 

cmake .. -DLINPHONESDK_PLATFORM=Android

cmake --build .

 

也可以加上编译选项

cmake .. -DENABLE_G729=YES -DENABLE_SILK=YES -DLINPHONESDK_PLATFORM=Android

cmake --build .

这是编译G729和SILK的选项,也可以增加其他选项。其他的选项有

ENABLE_VIDEO  是否启动视频,默认是允许

ENABLE_NON_FREE_CODECS 

ENABLE_GSM

ENABLE_OPUS

ENABLE_SPEEX

ENABLE_DEBUG_LOGS

ENABLE_UNIT_TESTS

ENABLE_FFMPEG

ENABLE_VPX

ENABLE_MKV

ENABLE_SRTP

ENABLE_ZRTP

如果编译顺利,将会在build/linphone-sdk/bin/output/aar下面生成linphone-sdk-android-release.aar,linphone-sdk-android-debug.aar两个文件,我们将文件复制到linphone-android的linphone-sdk-android子目录下,然后使用Android Studio打开linphone-androidbi编译即可。

Linphone-android默认会引用网络上的linphone-sdk版本,需要手工修改app下的gradle.build。

releaseImplementation project(path: ":linphone-sdk-android", configuration: 'release')
debugImplementation project(path: ":linphone-sdk-android", configuration: 'debug')

编译过程中可能会提示NDK版本不对的问题,这个时候在cmake/Android/gradle/build.gradle.cmake文件里面项android下面增加ndkVersion的配置。如

    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    ndkVersion "21.3.6528147"

 

具体代码在github上获取

https://github.com/zhanggx/linphone-android.git

也可以直接下载我编译好的linphone-sdk-android-release.aar,linphone-sdk-android-debug.aar再单独下载https://github.com/BelledonneCommunications/linphone-android.git 的代码自行构建工程编译。

链接: https://pan.baidu.com/s/1h10aKH1OsOmRtU6qkBIjKA 提取码: maju

### 关于Ubuntu 18.04编译Android 5.1时出现的链接器错误 在Ubuntu 18.04环境中尝试编译Android 5.1时遇到链接器错误“unsupported reloc 43”,这一问题通常与目标平台支持的重定位类型不匹配有关。具体来说,这可能是因为使用的工具链版本较新,而Android 5.1的目标架构或ABI并不完全兼容这些新的特性。 #### 错误分析 此错误的根本原因是链接器无法处理某些特定类型的重定位(relocation)。这种情况下,通常是由于以下原因之一引起的: 1. **工具链版本过高**:如果使用了较新的GCC或Clang版本来构建旧版Android系统,则可能会引入一些不受支持的功能[^2]。 2. **GLIBC版本冲突**:虽然您提到的操作系统基于Ubuntu 18.04,默认附带的GLIBC版本较高(例如GLIBC_2.27),但Android 5.1期望较低版本的GLIBC(如GLIBC_2.11)[^5]。 3. **预建工具链配置不当**:Android项目提供了针对不同平台优化过的预建工具链(prebuilt toolchains)。如果您未正确设置这些工具链路径或者选择了不适合当前系统的选项,也可能引发此类问题。 #### 解决方案 以下是几种可行的办法以解决上述问题: ##### 方法一:降级开发环境中的关键组件 可以考虑手动安装更老版本的相关依赖项,比如指定一个适合Android Lollipop (API Level 21) 的 GCC 编译器及其配套标准库。执行下面几步操作前,请确保备份好现有数据以防万一造成不可逆更改。 ```bash sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-4.8 g++-4.8 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10 update-alternatives --set gcc /usr/bin/gcc-4.8 ``` 同时调整相应的动态连接共享对象至符合需求的标准之上——即回滚到接近GLIBC_2.11的状态。不过鉴于直接修改核心运行时期件存在一定风险,推荐采用虚拟机隔离测试后再决定是否应用改动[^4]。 ##### 方法二:利用官方提供的Prebuilts Toolchain 另一种更为安全可靠的方式是从AOSP仓库获取专门定制用于各分支版本维护工作的交叉编译套件(prebuilts),它们已经过充分验证能够很好地满足对应层次框架的要求。按照惯例,在启动实际建造流程之前应当仔细阅读README文档了解必要的前置条件说明以及如何恰当地引用外部资源完成整个过程。 假设已克隆完整的android源码树结构,那么只需简单切换目录即可找到所需材料位置: ```plaintext ./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/ ``` 接着依据指示设定环境变量指向确切地址从而让后续脚本识别加载正确的实例参与运算活动之中。 ##### 方法三:修补Makefile定义规则 最后还有一种折衷办法就是通过编辑顶层Makefiles文件重新声明部分宏参数值试图绕开原生局限性约束达成目的。然而这种方法往往比较复杂而且容易带来意想不到副作用所以除非万不得已一般不会优先选用这种方式解决问题。 举例而言可以在适当处增加类似这样的片段内容试试看效果怎样: ```makefile LOCAL_CFLAGS += -fno-builtin-strncpy -U_FORTIFY_SOURCE TARGET_GLOBAL_LDFLAGS += -Wl,--hash-style=both,-Bsymbolic-functions ``` 以上三种途径各有优劣之处需根据实际情况灵活选取最合适的那一种实施补救措施直至彻底消除困扰为止。 ```python print("已完成解决方案描述") ```
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值