操作系统:Ubuntu 12.04.4 LTS 32位
linphone-android版本:android:versionCode="2211"
准备工作:
1、首先安装git用于获取linphone-android源码
ykx@ykx:~$ sudo apt-get install git
获取linphone-android源码只须使用git的基本功能,所以使用apt-get安装就可以。
2、获取linphone-android源码
ykx@ykx:~/WorkSpace$ git clone git://git.linphone.org/linphone-android.git --recursive | tee git.log
注意需要加上“--recursive”参数,不然下不全,下载成功之后大概是360M不到,如果加上git的文件,大概是638M,各文件夹大小如下:
408K ./tests
1.0M ./sample
5.3M ./res
352K ./libs
248M ./submodules
20K ./patches
383M ./.git
860K ./src
204K ./liblinphone_tester
16K ./jni
638M .
tee git.log表示我把git下载时输出的信息存在了git.log文件中
3、依赖库的安装
linphone-android目录下的README文件对编译的环境和步骤有相关叙述,所以最好先阅读下该文件,对编译过程有个总体认识。下面是我的环境配置:
a、JDK 1.7.0_51
b、Android SDK r22.6-linux
c、Android NDK r9d-linux
以上三个google一下都有详细的安装教程,这里就不在赘述了。只说一下我的环境变量的配置:
安装完之后,我更改了/etc/environment和/etc/profile两个文件,将三者的路径都写进去了,注意/etc/environment中最好不要用$JAVA_HOME这样的引用变量,全部写详细的路径。/etc/profile就无所谓了
还有就是要更改三者安装路径的访问权限,不然编译过程无访问导致失败。
例如更改jdk权限,操作如下:
ykx@ykx:/usr/src/jdk1.7.0_51$ chmod 777 * -R
表示将当前目录下所有文件及文件夹极其子目录及子文件的权限改为777(读/写/运行)。
更改sdk和ndk的访问权限操作类似。
d、安装yasm, nasm, curl, ant和autotools(autoconf, automake, aclocal, libtoolize, pkgconfig)
这写依赖使用apt-get install自动就可以,注意autotools的安装:
root@ykx:/home/ykx# apt-get install autoconf
root@ykx:/home/ykx# apt-get install automake
root@ykx:/home/ykx# apt-get install libtool
root@ykx:/home/ykx# apt-get install pkg-config
aclocal会在安装automake时自动安装。
README文件中提到的依赖就是这些,可以使用which命令来查看是否安装成功。
e、做完上面这些之后,按照README的步骤,我就开始make了。和许多事情一样,life is a bitch,当你以为将要成功的时候,她总会给你开个玩笑。
我失败了。
查看make的输出,得到找不到LWP,安上LWP,然后执行make clean命令,再make,又是失败,这次提示找不到LWP::Protocol::https,在把它安上,重新clean和make,done!
说一下这个错误的解决过程,对熟悉linux和perl的人来说,这个问题就不叫问题,但我是小白,所以还是记录一下。
LWP是perl的一个模块,具体功能我也不清楚,有兴趣的人自行百度。
root@ykx:/home/ykx# perl -MCPAN -eshell
接下来需要配置一些东西,我都是一路回车下来的。之后进入cpan命令行模式
cpan> install Bundle::LWP ;安装LWP
cpan> install LWP::Protocol::https ;安装LWP::Protocol::https
完成后exit就可以了。
4、最后make就可以了,生成的.so文件会放在libs目录下。linphone-android是通过ant来管理和生成apk文件的,如果你需要在eclipse下开发,需要将源码、库文件和相应的配置文件取出,另建一个android工程。我就不详细说了,把我的classpath文件贴上。
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/> <classpathentry excluding="org/linphone/mediastream/MediastreamerActivity.java" kind="src" path="submodules/linphone/mediastreamer2/java/src"/> <classpathentry kind="src" path="submodules/externals/axmlrpc/src/main/java"/> <classpathentry kind="src" path="submodules/linphone/java/common"/> <classpathentry kind="src" path="submodules/linphone/java/impl"/> <classpathentry kind="src" path="submodules/linphone/java/j2se"/> <classpathentry kind="src" path="gen"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry kind="output" path="bin/classes"/> </classpath>
这是因为一开始我是在windows下的linphone源码,而且查看过一些文件,而windows和linux的换行符不同,相当于隐式地修改了文件,导致运行出错。