PJSIP2.6版本 CentOS6.4编译Android库及其demo工程
官方编译过程:点击打开链接
1、准备材料:
android-ndk-r10e:这个版本编译比较适合,更高级的版本在PJ2.6中有问题,需要对比更新Make文件,或者直接用最新版本。链接:点击打开链接
openh264:源码编译安装android库,注意用1.6版本,新版本不确定API是否改动,链接:点击打开链接
2、准备工作
创建用户配置文件config_site.h,路径:pjlib/include/pj/,可参考config_site_sample.h文件android部分。
如果程序从windows拷贝过来的,把根目录下所有config配置文件添加执行权限:
chmod +x config*
chmod +x aconfig*
3、开始编译
(1)导出NDK路径,示例
# export ANDROID_NDK_ROOT=/exdisk/Android/android-ndk-r10e
(2)配置cpu架构类型及SDK版本,示例
# TARGET_ABI=armeabi-v7a APP_PLATFORM=android-19 ./configure-android --use-ndk-cflags --with-openh264=/exdisk/Android/openh264-1.6.0-new/openh264-1.6.0/android/armeabi-v7a
注意红框内是重点,上一个表示openh264配置正确(视频功能可用)
(3)开始编译
# make dep && make
正常结果
(4)swig编译so库及java封装代码
# cd pjsip-apps/src/swig/ # make
完毕!
so库路径:java/android/app/src/main/jniLibs/armeabi/libpjsua2.so
java封装代码:java/android/app/src/main/java/org/pjsip/
此android示例工程可用android studio进行编译运行。
问题及解决办法:
1、在尝试多个ndk配置后,编译一直出现莫名其妙的错误,提示找不到依赖项
原因:每次config后生成依赖隐藏文件.depend.XXX,当文件存在时,不会覆盖新的
解决:尝试清空依赖配置make distclean 、make realclean
2、Android studio编译提示错误找不到srand及rand定义
原因:ndkr10配合指定android-21会出现,应该是ndk的bug
解决:换成android-19即可
3、config出现C编译器check失败(自己遇到的),查看config.log发现提示sodium库找不到
原因:之前为其他项目编译了zeromq,其中用到新版本的libsodium,源码安装后在/usr/local/lib下生成了so库及.a静态库,config检验编译脚本在检查到so库后发现不兼容,忽略掉了导致失败。
4、多次倒腾(新老版本来回编译)后提示莫名其妙的错误,比如宏定义找不到,但是代码头文件中确实存在
原因:编译检索路径中包含/usr/local/下的include和lib,会优先找到这里的头文件及静态库进行编译,如果此目录下生成的文件与当前编译的版本有冲突,则出现各种莫名错误。
解决办法:删除/usr/local/include目录下所有与pj相关的文件,及/usr/local/lib中的pj相关库文件
5、看官来补充一些踩坑经验?