背景
手上的Android项目有音视频通话功能,底层依赖doubango的libWRAP.so,将项目升级到targetSdkVersion大于23以后,编译时libWRAP.so出现text relocations错误。几经搜索,没有找到解决方案,在doubango的issue下发现,最新版本已经解决掉该问题,重新编译即可。
https://github.com/DoubangoTelecom/doubango/issues/486
准备工作
1.编译环境:Ubuntu16.04.7 (可以通过VM虚拟机安装)
可以从以下地址选择对应版本下载镜像:
http://mirrors.aliyun.com/ubuntu-releases/16.04.7/
2.doubango源码
下载地址:https://github.com/DoubangoTelecom/doubango
如果忍受不了github的下载速度,gitee上有对应的代码,下载地址如下:
https://gitee.com/OtherCopy/doubango
3.android-ndk-r9c和android-ndk-r10e
下载地址 http://developer.android.com/intl/ja/ndk/downloads/index.html(需翻墙)
从上面地址下载对应版本,r9c和r10e都需要,我放在了百度网盘,有需要的自取:
android-ndk-r9c-linux-x86.tar.bz2
链接:https://pan.baidu.com/s/1s2Zw8DzbgdOqnspjnHbKYA 提取码:4h6d
android-ndk-r10e-linux-x86_64.zip
链接:https://pan.baidu.com/s/1Pr40ZdhdrAEs-fUbSvNdYA 提取码:ruik
4.编译环境设置:
设置root密码 sudo passwd root
切换root用户 su root
更新/etc/apt/sources.list(推荐清华源https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/),更新后记得执行apt-get update
安装libtool apt-get install libtool libtool-bin
安装autoconf(automake) apt-get install autoconf
解决arm-linux-androideabi-gcc not found问题 apt-get install lsb-core
(虚拟机安装的ubuntu存在此问题,非虚拟机未测试,安装完最好重启下终端)
编译
上面都准备好后,将r9c和r10e解压到doubango所在目录,按照下面步骤执行编译即可。
1.设置$NDK
export NDK=/home/android-ndk-r10e
2.生成configure文件
cd /home/doubango
./autogen.sh
3.build代码
这一步有两种方法,自动编译和手动编译,推荐下面命令
./android_build.sh commercial
耐心等待编译完成即可,编译后的libWRAP.so所在目录为doubango/android-projects/output/commercial
终于不用再忍受恼人的text relocations错误了,targetSdkVersion可以升级到23及以上了。
成果我也放在了百度网盘,有需要的自取:
链接:https://pan.baidu.com/s/1gXCn7-419mQPLQnizW1B8w 提取码:verv
最后,附上参考链接:
https://github.com/DoubangoTelecom/imsdroid/blob/master/Building_Doubango.md