PjSip编译 for android

PjSip官网编译指导:https://trac.pjsip.org/repos/wiki/Getting-Started/Android
特别参考(做者分红了4篇,这是第1篇):http://blog.csdn.net/croop520/article/details/75332990
------
本文主要是参考上面两文和软件自带的ReadMe,再趟过一些坑,而成。
------html

操做步骤:java

    一、建立工做目录(/root/pjsipSpace),建立环境变量脚本(env.sh)linux

    二、安装JDK
        下载连接:https://pan.baidu.com/s/1bo5zmDh
        使用的版本是:jdk-8u77-linux-x64.tar.gz
        请自行安装,肯定可用。
    三、安装NDK
        下载连接:https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
        下载至工做目录,解压。(NDK目录:/root/pjsipSpace/android-ndk-r13b)
    四、安装SDK,更新须要的包
        下载连接:http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
        a.下载至工做目录,解压,并将下面脚本添加至env.sh中            android

export ANDROID_NDK_ROOT=/root/pjsipSpace/android-ndk-r13b
export ANDROID_SDK_ROOT=/root/pjsipSpace/android-sdk-linux
export PATH=$ANDROID_SDK_ROOT/tools:$PATH

        b.查看可安装或可更新的Package列表(经过序号更新对应包)git

android list sdk

        c.更新sdk(我手机是4.0.3版android,API为15,对应序号为17,为了方便编译其它版本,更新全部android API)            github

android update sdk -u -t 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

    五、安装swig
        下载连接:http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz
        下载至工做目录,解压,配置,安装,并确承认用。(PjSip官方要求swig版本最低为:2.0.5)app

    六、编译openh264(若是不须要视频通话功能,则忽略此步)
        下载连接:https://github.com/cisco/openh264/archive/v1.7.0.tar.gz
        a.下载至工做目录,解压。(openh264目录:/root/pjsipSpace/openh264-1.7.0)
        b.执行脚本ide

source /root/pjsipSpace/env.sh

         c.编译openh264oop

cd /root/pjsipSpace/openh264-1.7.0

make OS=android NDKROOT=/root/pjsipSpace/android-ndk-r13b \
     TARGET=android-15 NDKLEVEL=15 ARCH=arm APP_ABI=armeabi-v7a \
     PREFIX=/root/pjsipSpace/libopenh264_15_armeabi-v7a \
     install-shared

            ---参数说明---
            OS:系统名称
            NDKROOT:指定NDK目录,请根据本身的NDK路径,设置成本身的绝对路径。
           TARGET:指定android的对应API版本,参照/root/pjsipSpace/android-sdk-linux/platforms/下目录名,设置的是android-15
            NDKLEVEL:NDK级别,默认值为12
           ARCH:指定Android设备的体系结构,默认值arm(arm、arm6四、x8六、x86_6四、mips、mips64)
          APP_ABI:指定Android的ABI,ARCH=arm时,APP_ABI默认值=armeabi-v7a(取值可参照https://developer.android.google.cn/ndk/guides/abis.html)
          PREFIX:设置openh264编译成功后的安装目录。这个在编译PjSip时,须要使用到,里面包含include头文件夹目录和lib库目录。
        d.问题处理
            q1:针对x86编译,出现“error: symbol `xxx` redefined”这种错误时,是nasm太旧所致,可更新到当前最新稳定版2.13.02,            下载连接:http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.gz
           q2:出现“collect2: error: ld returned 1 exit status”,能够尝试先make clean,再make,还不行,删除openh264-1.6.0目录,从新解压,重来一遍
    七、PjSip
        下载连接:http://www.pjsip.org/release/2.7.1/pjproject-2.7.1.tar.bz2
         a.下载至工做目录,并解压。
       b.新建config_site.h文件(内容以下),并把它复制到PjSip工程目录:/root/pjsipSpace/pjproject-2.7.1/pjlib/include/pj/config_site.hui

/* Activate Android specific settings in the 'config_site_sample.h' */  
#define PJ_CONFIG_ANDROID 1  
//To enable video  
#define PJMEDIA_HAS_VIDEO 1  
//To enable libyuv  
#define PJMEDIA_HAS_LIBYUV  1  
//To enable TCP transport  
#define PJ_HAS_TCP 1  
#include <pj/config_site_sample.h> 


        c.配置PjSip

NDK_TOOLCHAIN_VERSION=4.9 TARGET_ABI=arm64-v8a APP_PLATFORM=android-15 ./configure-android --use-ndk-cflags --with-openh264=/root/pjsipSpace/androidlib15arm64

            ---参数说明---
            NDK_TOOLCHAIN_VERSION=4.9 这个必须设置,PjSip 2.6编译若是没有设置这个,configure-android没法配置成功
           TARGET_ABI根据本身的android机器CPU,设置相应的ABI,目前支持的ABI有: armeabi、armeabi-v7a、arm64-v8a、x86
             APP_PLATFORM=android-22设置成本身须要运行的android版本,个人是android5.1因此设置成android-22
             --use-ndk-cflags 为系统选项,必须跟上
             --with-openh264=/home/xxx/PJSIP/androidlib/ 设置成openh264编译成功后,生成的androidlib目录路径,设置成绝对路径,androidlib目录名称参考openh264编译中PREFIX的目录名称。

        f.编译PjSip

make dep && make clean && make

        g.使用swig编译生成so文件和java文件,到样例应用中(/root/pjsipSpace/pjproject-2.7.1/pjsip-apps/src/swig/java/android/app)

cd /root/pjsipSpace/pjproject-2.7.1/pjsip-apps/src/swig
make

            ---文件说明---
            libpjsua2.so文件,是给apk使用的,在/root/pjsipSpace/pjproject-2.7.1/pjsip-apps/src/swig/java/android/app/src/main/jniLibs目录下
            java文件,是给apk开发使用的,在/root/pjsipSpace/pjproject-2.7.1/pjsip-apps/src/swig/java/android/app/src/main目录下

===============================================================
至此,一个版本的PjSip编译完成。
===============================================================
在完成上述操做后,无脑编译其它版本,请直接复制下面的脚本运行
===============================================================
 

##版本参数,【根据实际状况修改】
export API=15 
export ARCH=arm 
export ABI=armeabi-v7a 
##工做目录及原件路径,【根据实际状况修改】
export WORK_DIR=/root/pjsipSpace 
export PJSIP_NAME=pjproject-2.7.1 
export PJSIP_FILE=$WORK_DIR/$PJSIP_NAME.tar.bz2 
export PJSIP_DIR=$WORK_DIR/$PJSIP_NAME 
export ANDROID_NDK_ROOT=$WORK_DIR/android-ndk-r13b 
export ANDROID_SDK_ROOT=$WORK_DIR/android-sdk-linux 
export OPENH264_FILE=$WORK_DIR/v1.7.0.tar.gz 
export OPENH264_DIR=$WORK_DIR/openh264-1.7.0 
export SWIG_COMPILE_DIR=$PJSIP_DIR/pjsip-apps/src/swig 
##【在这以后的,都不用改】
##openh264对于64位ABI的支持要求,android API>=21
if [[ $ARCH =~ "64" ]] 
then
  if [[ $API -lt 21 ]]
  then
    echo "openh264 : To build for 64-bit ABI, such as 'arm64', explicitly set 'NDKLEVEL' to 21 or higher."
    export API=21
    echo "API=${API}, ARCH=${ARCH}, ABI=${ABI}"
  fi
fi
export APP_PLATFORM=android-$API 
export PREFIX=$WORK_DIR/libopenh264_${API}_${ABI}  
export NDK_TOOLCHAIN_VERSION=4.9 
export TARGET_ABI=$ABI 
echo "------------------------------------------------------"
echo "-----------------config_site.h------------------------"
rm -rf /root/pjsipSpace/config_site.h
touch /root/pjsipSpace/config_site.h
echo -e "
#define PJ_CONFIG_ANDROID 1  
//To enable video  
#define PJMEDIA_HAS_VIDEO 1  
//To enable libyuv  
#define PJMEDIA_HAS_LIBYUV  1  
//To enable TCP transport  
#define PJ_HAS_TCP 1  
#include <pj/config_site_sample.h> 
" > /root/pjsipSpace/config_site.h
chmod 775 /root/pjsipSpace/config_site.h
echo "------------------------------------------------------"
echo "--------------/root/pjsipSpace/sh_openh264_a.sh----------"
rm -rf /root/pjsipSpace/sh_openh264_a.sh
touch /root/pjsipSpace/sh_openh264_a.sh
echo -e "
rm -rf $PREFIX && rm -rf $OPENH264_DIR && tar -zvxf $OPENH264_FILE > /dev/null \n
" > /root/pjsipSpace/sh_openh264_a.sh
chmod 775 /root/pjsipSpace/sh_openh264_a.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_openh264_compile.sh---------------"
rm -rf /root/pjsipSpace/sh_openh264_compile.sh
touch /root/pjsipSpace/sh_openh264_compile.sh
echo "
cd $OPENH264_DIR 
echo "-------start---------sh_openh264_compile"
make OS=android NDKROOT=$ANDROID_NDK_ROOT TARGET=$APP_PLATFORM NDKLEVEL=$API ARCH=$ARCH APP_ABI=$ABI PREFIX=$PREFIX install-shared > /dev/null
echo "-------end---------sh_openh264_compile"
" > /root/pjsipSpace/sh_openh264_compile.sh
chmod 775 /root/pjsipSpace/sh_openh264_compile.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_pjsip_a.sh------------------------"
rm -rf /root/pjsipSpace/sh_pjsip_a.sh
touch /root/pjsipSpace/sh_pjsip_a.sh
echo "
rm -rf $PJSIP_DIR && tar -xjvf $PJSIP_FILE > /dev/null && cp $WORK_DIR/config_site.h $PJSIP_DIR/pjlib/include/pj/ > /dev/null 
" > /root/pjsipSpace/sh_pjsip_a.sh
chmod 775 /root/pjsipSpace/sh_pjsip_a.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_pjsip_configure.sh----------------"
rm -rf /root/pjsipSpace/sh_pjsip_configure.sh
touch /root/pjsipSpace/sh_pjsip_configure.sh
echo "
cd $PJSIP_DIR 
echo "-------start---------sh_pjsip_configure"
NDK_TOOLCHAIN_VERSION=$NDK_TOOLCHAIN_VERSION TARGET_ABI=$TARGET_ABI APP_PLATFORM=$APP_PLATFORM ./configure-android --use-ndk-cflags --with-openh264=$PREFIX > /dev/null
echo "-------end---------sh_pjsip_configure"
" > /root/pjsipSpace/sh_pjsip_configure.sh
chmod 775 /root/pjsipSpace/sh_pjsip_configure.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_pjsip_compile.sh------------------"
rm -rf /root/pjsipSpace/sh_pjsip_compile.sh
touch /root/pjsipSpace/sh_pjsip_compile.sh
echo "
cd $PJSIP_DIR
echo "-------start---------sh_pjsip_compile"
make dep > /dev/null && make clean > /dev/null && make > /dev/null
echo "-------end---------sh_pjsip_compile"
" > /root/pjsipSpace/sh_pjsip_compile.sh
chmod 775 /root/pjsipSpace/sh_pjsip_compile.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_swig_compile.sh-------------------"
rm -rf /root/pjsipSpace/sh_swig_compile.sh
touch /root/pjsipSpace/sh_swig_compile.sh
echo "
cd $SWIG_COMPILE_DIR 
echo "-------start---------sh_swig_compile"
make > /dev/null
echo "-------end---------sh_swig_compile"
" > /root/pjsipSpace/sh_swig_compile.sh
chmod 775 /root/pjsipSpace/sh_swig_compile.sh
echo "------------------------------------------------------"
echo "---/root/pjsipSpace/sh_tar_app_simple.sh-----------------"
rm -rf /root/pjsipSpace/sh_tar_app_simple.sh
touch /root/pjsipSpace/sh_tar_app_simple.sh
echo "
cp $PREFIX/lib/libopenh264.so $SWIG_COMPILE_DIR/java/android/app/src/main/jniLibs/ > /dev/null
cd $SWIG_COMPILE_DIR 
tar -cvjPf $WORK_DIR/java_${TARGET_ABI}_$APP_PLATFORM.tar.bz2 $SWIG_COMPILE_DIR/java > /dev/null
echo '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<end'
" > /root/pjsipSpace/sh_tar_app_simple.sh
chmod 775 /root/pjsipSpace/sh_tar_app_simple.sh
echo "------------------------------------------------------"
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start"
./sh_openh264_a.sh && ./sh_openh264_compile.sh && ./sh_pjsip_a.sh && ./sh_pjsip_configure.sh && ./sh_pjsip_compile.sh && ./sh_swig_compile.sh && ./sh_tar_app_simple.sh &

 

转载于:https://my.oschina.net/wxsword/blog/1618587