业务需求需要定制sdk,首先声明我们需要的是在Android4.4上跑的sdk,因此本次编译的sdk最低支持为19(不同版本需要的环境不一致),编译过程较容易,难点在于环境配置
环境准备
- Ubuntu 18.04.6
- android-sdk_r24.2
- android-ndk-r17c
- - 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`)
这些东西使用 sudo apt-get install 安装即可
1、配置sdk
下载sdk到本地
wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
解压
tar -zxvf android-sdk_r24.2-linux.tgz
配置环境变量
vi /etc/profile
协议授予
yes | sdkmanager --licenses && sdkmanager --update
export ANDROID_SDK_ROOT=~/lichang/android/android-sdk-linux
export PATH=$ANDROID_SDK_ROOT/tools:$PATH
export PATH=$ANDROID_SDK_ROOT/cmdline-tools:$PATH
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/bin:$PATH
export PATH=$ANDROID_SDK_ROOT/emulator:$PATH
export PATH=$ANDROID_SDK_ROOT/tools/bin:$PATH
2、配置ndk
解压后配置环境变量
export ANDROID_NDK_HOME=~/lichang/android/android-ndk-r17c
export PATH=$ANDROID_NDK_HOME:$PATH
配置后 source /etc/profile 一下
3、安装Java
apt install openjdk-8-jdk
apt install openjdk-17-jdk
为什么下载两个?遇到版本不匹配的问题,切换Java版本方法如下
sudo update-alternatives --config java
:~/lichang/linphone/linphone-sdk# sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
* 3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual modePress <enter> to keep the current choice[*], or type selection number:
下载地址
- Unsupported Downloads · android/ndk Wiki · GitHub
- http://dl.google.com/android/android-sdk_r24.2-linux.tgz
- https://cmake.org/files/v3.22/cmake-3.22.0_64.tar.gz
编译流程
1、下载源码
git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git
git checkout release/5.0
git submodule update --init --recursive
全部下载后文件如下,注意不要缺少文件,会导致编译失败(build是自己创建的,后面有步骤):
2、开始编译
- mkdir build
- cd build
- cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Android -DLINPHONESDK_ANDROID_ARCHS=armv7 -DENABLE_G729==YES -DENABLE_VIDEO=NO
- cmake --build . --parallel 8
编译产物路径如下:
build/linphone-sdk/bin/outputs/aar/linphone-sdk-android-release.aar
遇到问题
1、failed: dlopen failed: cannot locate symbol "__read_chk" referenced by "libbctoolbox.so"...
这个问题折腾的时间比较久,尝试在Android10设备上是可以正常运行的,但是安装在Android4.4上就提示这个错误,后来在GitHub上找到了解决方法,使用NDK 17c or older.
链接如下:Android 4.4 arr Error · Issue #56 · BelledonneCommunications/linphone-sdk · GitHub
2、定制codec顺序
这个是在app实现的,源码部分没太看明白,也找到了相关的 Issue,如下:
How to set order for audio codec with latest source? · Issue #62 · BelledonneCommunications/linphone-iphone · GitHub [Linphone-users] Linphone Android Codec priority
按顺序设置参数即可
其实按照README步骤基本都能实现,主要还是网络环境得支持才行