sipdroid的编译以及导入Eclipse环境
sipdroid是一款Android平台上开源的voip,当前版本已经更新到3.0了,支持视频通话。sipdroid的源码和apk可在该项目的主页下载到。
项目主页:
http://code.google.com/p/sipdroid/
代码地址:
svn checkout http://sipdroid.googlecode.com/svn/trunk/sipdroid-read-only
源码下载下来之后,如果直接将sipdroid导入eclipse环境中,工程会直接报错。看console窗口中的错误提示,可发现工程缺少project.properties,也因此导致工程里的java文件一片红(都是错误)。
解决办法有两个.
方法一:从其它工程拷贝一个project.properties过来,根据实际情况修改下project.properties中的target变量的设置,这个是API版本号。然后刷新下工程。
方法二:通过command line参照工程目录下的BUILT.txt文件对工程进行update。
如:android update project -p . -t 2(这里 -p指的是 --path -t指的是 --target)
具体执行步骤为:在命令行模式中进入sipdroid上级目录,执行以下命令:
android update project -p sipdroid_build -t android-15
之后再导入Eclipse环境即可。
接下来使用NDK编译sipdroid的jni,无论是Windows或者Ubuntu,需要下载好Android NDK,并配置好环境变量。若是Window环境还需要下载安装Cygwin或者MingGW+MSYS仿Unix编译环境。需要注意的是同时安装了Cygwin和MingGw+MSYS环境的系统,需要保证只让一个仿Unix环境起作用,否则有可能出现不必要的编译错误。
jni编译环境搭配完整后,可切换到sipdroid工程的jni目录下执行:ndk-build(ndk-build的路径已经添加到系统路径了,如果没有添加,需要指定完整路径)
备注:我的系统是Windows XP,NDK版本是android-ndk-r9c-windows-x86,使用的仿Unix环境是Cygwin(2013年12月20日从官网下载安装)。
在ndk-build过程中可能出现的错误及解决办法:
错误一:
sipdroid_build/jni/speex_jni.cpp:26:25: fatal error: speex/speex.h: No such file or directory compilation terminated. /cygdrive/f/android-ndk-r9c-windows-x86/android-ndk-r9c/build/core/build-binary.mk:388: recipe for target '/cygdrive/f/videoapp/sipdroid_build/obj/local/armeabi/objs/speex_jni/speex_jni.o' failed make: *** [/cygdrive/f/videoapp/sipdroid_build/obj/local/armeabi/objs/speex_jni/speex_jni.o] Error 1解决办法:把jni文件夹中的speex-1.2rc1/include/speex文件夹拷贝到jni目录下
错误二:
Android NDK: WARNING: APP_PLATFORM android-15 is larger than android:minSdkVersion 5 in /cygdrive/f/videoapp/sipdroid_build/AndroidManifest.xml Android NDK: /cygdrive/f/videoapp/sipdroid_build/jni/Android.mk:silkcommon: LOCAL_MODULE_FILENAME must not contain a file extension /cygdrive/f/android-ndk-r9c-windows-x86/android-ndk-r9c/build/core/build-static-library.mk:29: *** Android NDK: Aborting 。 停止。
SILK := silk LOCAL_MODULE := silkcommon LOCAL_SRC_FILES := $(SILK)/src/SKP_Silk_A2NLSF.c \ $(SILK)/src/SKP_Silk_CNG.c \ $(SILK)/src/SKP_Silk_HP_variable_cutoff_FIX.c \ $(SILK)/src/SKP_Silk_LBRR_reset.c \ $(SILK)/src/SKP_Silk_LPC_inv_pred_gain.c \ $(SILK)/src/SKP_Silk_LPC_stabilize.c \ $(SILK)/src/SKP_Silk_LPC_synthesis_filter.c \ $(SILK)/src/SKP_Silk_LPC_synthesis_order16.c \
修改后代码如下:
include $(CLEAR_VARS) SILK := silk LOCAL_MODULE := silkcommon LOCAL_SRC_FILES := $(SILK)/src/SKP_Silk_A2NLSF.c \ $(SILK)/src/SKP_Silk_CNG.c \ $(SILK)/src/SKP_Silk_HP_variable_cutoff_FIX.c \ $(SILK)/src/SKP_Silk_LBRR_reset.c \ $(SILK)/src/SKP_Silk_LPC_inv_pred_gain.c \ $(SILK)/src/SKP_Silk_LPC_stabilize.c \ $(SILK)/src/SKP_Silk_LPC_synthesis_filter.c \ $(SILK)/src/SKP_Silk_LPC_synthesis_order16.c \ $(SILK)/src/SKP_Silk_LP_variable_cutoff.c \
---------------------------
编译过程中我就遇到过这两个错误,网上还看到有人遇到的一个错误,但是我没有遇到,如下:
Android NDK: There is no Android.mk under /home/helei/workspace/raydroid/jni/jni Android NDK: If this is intentional please define APP_BUILD_SCRIPT to point Android NDK: to a valid NDK build script. /home/helei/android_toolchain/android-ndk-r7b/build/core/add-application.mk:143: *** Android NDK: Aborting... . Stop.解决办法:
修改jni目录下的Application.mk文件中:
1、解决办法来源:http://blog.csdn.net/harry_helei/article/details/7400338
APP_PROJECT_PATH := $(call my-dir)这一行,
将其修改为:APP_PROJECT_PATH := $(call my-dir)/..
2、解决办法来源:http://hi.baidu.com/justtmiss/item/d5d16b354c725b25b2c0c5a6
修改Application.mk
#APP_PROJECT_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir)