diff --git a/CMakeLists.txt b/CMakeLists.txt
index f0fd5bae5e574f703f9ea1373ec7e7cce0965983..796f7b3f8dc7e9b99448fbed164c10f25eb008c1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -475,14 +475,14 @@ endif(ENABLE_ONELAB)
 if(ENABLE_BUILD_IOS)
   find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake")
   if(NOT CMAKE_TOOLCHAIN_FILE)
-    message(SEND_ERROR "Cannot compile Gmsh for iOS without a toolchain")
+    message(FATAL_ERROR "Cannot compile Gmsh for iOS without a toolchain")
   endif(NOT CMAKE_TOOLCHAIN_FILE)
 endif(ENABLE_BUILD_IOS)
 
 if(ENABLE_BUILD_ANDROID)
   find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake")
   if(NOT CMAKE_TOOLCHAIN_FILE)
-    message(SEND_ERROR "Cannot compile Gmsh for android without android-cmake")
+    message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake")
   endif(NOT CMAKE_TOOLCHAIN_FILE)
   set(CMAKE_BUILD_TYPE Release)
   set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/contrib/mobile/CMakeLists.txt b/contrib/mobile/CMakeLists.txt
index 6359a8e411fab2419ccf729bc7ce3aed19d78b28..2115bbe21a8e162d6842633261d3754d701fe0fa 100644
--- a/contrib/mobile/CMakeLists.txt
+++ b/contrib/mobile/CMakeLists.txt
@@ -2,8 +2,6 @@
 
 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 
-set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options")
-
 if(APPLE)
  option(ENABLE_BUILD_IOS "Build XCode project for iOS (ARM)" OFF)
  option(ENABLE_BUILD_IOS_EMULATOR "Build XCode project for iOS emulator (x86)" ON)
@@ -79,8 +77,13 @@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS)
 endif(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS)
 
 if(ENABLE_BUILD_ANDROID)
-  append_src(drawGModel.cpp)
+  append_src(drawContext.cpp)
+  append_src(movePosition.h)
+  append_src(Trackball.cpp)
   append_src(androidGModel.cpp)
+  append_src(drawString.cpp)
+  append_src(drawGeom.cpp)
+  append_src(drawMesh.cpp)
   # user must specify the android-cmake toolchain
   find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake")
   if(NOT CMAKE_TOOLCHAIN_FILE)
@@ -116,4 +119,23 @@ if(ENABLE_BUILD_ANDROID)
   set( LIBRARY_DEPS GLESv1_CM log)
   set_target_properties(androidOnelab PROPERTIES OUTPUT_NAME Onelab)
   target_link_libraries(androidOnelab ${LIBRARY_DEPS}  ${EXTERNAL_LIBRARIES})
+  find_library(PETSC_LIB petsc PATH_SUFFIXES lib)
+  find_library(BLAS_LIB f2cblas PATH_SUFFIXES lib)
+  find_library(LAPACK_LIB f2clapack PATH_SUFFIXES lib)
+  set(ONELAB_LIB ${CMAKE_CURRENT_BINARY_DIR}/libs/libOnelab.so)
+  if(PETSC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
+    add_custom_target(androidProject
+      COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/Onelab/
+      COMMAND ${CMAKE_COMMAND} -E copy_directory  ${CMAKE_CURRENT_SOURCE_DIR}/Android/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/
+      COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${GMSH_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${GETDP_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${ONELAB_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${PETSC_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${LAPACK_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+      COMMAND ${CMAKE_COMMAND} -E copy ${BLAS_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
+  )
+  else(PETSC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
+    message(STATUS "Cannot make Android project without PETSc or without BLAS or without LAPACK or without \"Onelab library\"")
+  endif(PETSC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
 endif(ENABLE_BUILD_ANDROID)
diff --git a/contrib/mobile/drawContext.h b/contrib/mobile/drawContext.h
index 11a1570820d660b35b2fe622cc4f001ca6b15dbf..d3b860d4833ab789e855b5441bb5af45ce872ef6 100644
--- a/contrib/mobile/drawContext.h
+++ b/contrib/mobile/drawContext.h
@@ -19,6 +19,7 @@
 
 #include "movePosition.h"
 
+void drawArray(VertexArray *va, int type, bool colorArray=false);
 int onelab_cb(std::string);
 
 class drawContext{
diff --git a/contrib/mobile/drawGeom.cpp b/contrib/mobile/drawGeom.cpp
index f642a51d9e113c85d45bb9cc86acad49a3c7b0d1..38991bff33be0bdde8ffd2e40552d281844e5980 100644
--- a/contrib/mobile/drawGeom.cpp
+++ b/contrib/mobile/drawGeom.cpp
@@ -16,6 +16,8 @@
 
 #include <gmsh/Gmsh.h>
 #include <gmsh/GModel.h>
+#include <gmsh/PView.h>
+#include <gmsh/Context.h>
 #endif
 
 #include "drawContext.h"
diff --git a/contrib/mobile/drawMesh.cpp b/contrib/mobile/drawMesh.cpp
index 7257981a099002c86353d04b235dbb62952ab4c7..e9ea34e99f9d6853478a06455f403b346ce257e6 100644
--- a/contrib/mobile/drawMesh.cpp
+++ b/contrib/mobile/drawMesh.cpp
@@ -24,6 +24,7 @@
 #include <gmsh/GFaceCompound.h>
 #include <gmsh/PView.h>
 #include <gmsh/PViewData.h>
+#include <gmsh/Context.h>
 #endif
 
 #include "drawContext.h"
diff --git a/contrib/mobile/utils/onelab_android.sh b/contrib/mobile/utils/onelab_android.sh
index 7b242bb3b695eb73627c0bcd492ecef44d3ddf26..5a3684cb7d24f21c82040c52ea4e8d314ea2b6ac 100644
--- a/contrib/mobile/utils/onelab_android.sh
+++ b/contrib/mobile/utils/onelab_android.sh
@@ -13,10 +13,10 @@ if [ -z "$ANDROID_NDK" ]; then
         exit 1
 fi
 if [ -z "$ANDROID_SDK" ]; then
-        echo "ERROR: You must specify android SDK path: export ANDROID_NDK=/path/to/android-sdk/"
+        echo "ERROR: You must specify android SDK path: export ANDROID_SDK=/path/to/android-sdk/"
         exit 1
 fi
-if [ -z "$ANDROID_TOOLCHAIN" ] && [ -f "$ANDROID_TOOLCHAIN" ]; then
+if [ -z "$ANDROID_TOOLCHAIN" ] || [ ! -f "$ANDROID_TOOLCHAIN" ]; then
         echo "ERROR: You must specify a valid android toolchain: export ANDROID_TOOLCHAIN=/path/to/android.toolchain.cmake"
         exit 1
 fi
@@ -28,7 +28,7 @@ if [ ! -d "getdp" ]; then svn --username gmsh --password gmsh co https://geuz.or
 if [ ! -d "gmsh.android" ]; then mkdir gmsh.android; fi
 if [ ! -d "getdp.android" ]; then mkdir getdp.android; fi
 if [ ! -d "onelab.android" ]; then mkdir onelab.android; fi
-if [ ! -f "petsc.android/libpetsc.so" ] || [ ! -f "petsc.android/libf2clapack.so" ] || [ ! -f "petsc.android/libf2cblas.so" ] || [ ! -d "petsc.android/inclue/" ]; then 
+if [ ! -f "petsc.android/libpetsc.so" ] || [ ! -f "petsc.android/libf2clapack.so" ] || [ ! -f "petsc.android/libf2cblas.so" ] || [ ! -d "petsc.android/include/" ]; then 
 	echo "ERROR: petsc.android do not exist or is incomplete (need blas, lapack and petsc)"
 	exit 1
 fi
@@ -53,22 +53,18 @@ checkError $? "make getHeaders fail (GetDP)"
 
 cd ../onelab.android
 echo -e "\033[1m[+] Make Onelab interface library\033[0m"
-cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN -DENABLE_BUILD_ANDROID=1 -DGETDP_LIB=../getdp.android/libs/libGetDP.so -DGETDP_INC=../getdp.android/Headers/ -DGMSH_LIB=../gmsh.android/libs/libGmsh.so -DGMSH_INC=../gmsh.android/Headers/ ../gmsh/contrib/mobile/
+cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN -DENABLE_BUILD_ANDROID=1 -DGETDP_LIB=../getdp.android/libs/libGetDP.so -DGETDP_INC=../getdp.android/Headers/ -DGMSH_LIB=../gmsh.android/libs/libGmsh.so -DGMSH_INC=../gmsh.android/Headers/ -DPETSC_LIB=../petsc.android/libpetsc.so -DBLAS_LIB=../petsc.android/libf2cblas.so -DLAPACK_LIB=../petsc.android/libf2clapack.so ../gmsh/contrib/mobile/
 checkError $? "CMake fail (Onelab)"
 make androidOnelab -j3
 checkError $? "make fail (Onelab)"
+make androidProject
+checkError $? "make Android project fail (Onelab)"
 
 echo -e "\033[1m[+] Build Android application (java)\033[0m"
-cd ../gmsh/contrib/mobile/Android
+cd Onelab/
 if [ ! -d "libs/armeabi-v7a/" ]; then mkdir -p libs/armeabi-v7a/; fi
 cp $ANDROID_SDK/extras/android/support/v4/android-support-v4.jar libs/
 checkError $? "Copy android support v4 fail (Android)"
-cp ../../../../gmsh.android/libs/libGmsh.so libs/armeabi-v7a/
-cp ../../../../getdp.android/libs/libGetDP.so libs/armeabi-v7a/
-cp ../../../../onelab.android/libs/libOnelab.so libs/armeabi-v7a/
-cp ../../../../petsc.android/libpetsc.so libs/armeabi-v7a/
-cp ../../../../petsc.android/libf2clapack.so libs/armeabi-v7a/
-cp ../../../../petsc.android/libf2cblas.so libs/armeabi-v7a/
 target=1
 count=0
 while read line; do