This repository is meant for the porting of SFLphone to Android.


To build SFLphone and all its dependencies, make sure that Android's NDK and SDK
are properly installed on your system. 

You have also to make sure that the following environment variables are defined:

export ANDROID_NDK=$HOME/path/to/android-ndk-r*b
export ANDROID_SDK=$HOME/path/to/android-sdk-linux

The path to the required Android's build executable must be also specified:

export PATH=$PATH:$ANDROID_NDK

BUILD
-----
install swig-2.0.6 or later and python-2.7 or later on your system

$ cd sflphone-android

Check that following files are executable:
  jni/sflphone/daemon/src/JavaJNI2CJNI_Load.py
  make-swig.sh

Compile pjsip-android
$ pushd jni/pjproject-android/
$ ./configure-android --disable-sound --disable-oss --disable-video --enable-ext-sound --disable-speex-aec --disable-g711-codec --disable-l16-codec --disable-gsm-codec --disable-g722-codec --disable-g7221-codec --disable-speex-codec --disable-ilbc-codec --disable-sdl --disable-ffmpeg --disable-v4l2

$ make dep && make
$ popd


Generate dbus interface
$ ./make-swig.sh

Compile libsndfile-1.0.25
$ pushd jni/libsndfile-1.0.25/
$ ./configure --disable-alsa --disable-external-libs
$ popd


$ ndk-build -j4

Check that no errors occurred. In particular, following files should have been generated by make-swig.sh:
  sflphoneservice_loader.c
  callmanager_wrap.cpp
  sflphoneservice.java
  sflphoneserviceJNI.java
  ManagerImpl.java


Add compatibility library to libs folder
$ cp $ANDROID_SDK/extras/android/support/v13/android-support-v13.jar ./libs/


Then build android project with your favorite JDK: eclipse or ant.
