From a44980e5dfdaaefc67ae6a56b3206ce892dc9599 Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Wed, 15 May 2013 11:49:58 +0000 Subject: [PATCH] Add script to build android APKs in CLI --- contrib/mobile/CMakeLists.txt | 2 +- contrib/mobile/utils/onelab_android.sh | 97 ++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 contrib/mobile/utils/onelab_android.sh diff --git a/contrib/mobile/CMakeLists.txt b/contrib/mobile/CMakeLists.txt index 54013e6fbd..9a6da0cee1 100644 --- a/contrib/mobile/CMakeLists.txt +++ b/contrib/mobile/CMakeLists.txt @@ -9,7 +9,7 @@ if(APPLE) option(ENABLE_BUILD_IOS_EMULATOR "Build library for iOS emulator (x86)" ON) option(ENABLE_BUILD_ANDROID "Build library for Android NDK (ARMv7)" OFF) else(APPLE) -option(ENABLE_BUILD_ANDROID "Build library for Android NDK (ARMv7)" ON) + option(ENABLE_BUILD_ANDROID "Build library for Android NDK (ARMv7)" ON) endif(APPLE) macro(set_config_option VARNAME STRING) diff --git a/contrib/mobile/utils/onelab_android.sh b/contrib/mobile/utils/onelab_android.sh new file mode 100644 index 0000000000..1798d333cd --- /dev/null +++ b/contrib/mobile/utils/onelab_android.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +function checkError { + if [ $# == 3 ]; then + if [$1 == 0]; then return; fi + echo -e "\033[31m[-] $2 \033[0m" + exit $1 + fi +} + +if [ -z "$ANDROID_NDK" ]; then + echo "ERROR: You must specify android NDK path: export ANDROID_NDK=/path/to/android-ndk/" + exit 1 +fi +if [ -z "$ANDROID_SDK" ]; then + echo "ERROR: You must specify android SDK path: export ANDROID_NDK=/path/to/android-sdk/" + exit 1 +fi +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 + +echo -e "\033[1m[+] Take the last version of Gmsh and GetDP from svn\033[0m" +if [ ! -d "gmsh" ]; then mkdir svn --username gmsh --password gmsh co https://geuz.org/svn/gmsh/trunk gmsh; else svn up gmsh; fi +if [ ! -d "getdp" ]; then mkdir svn --username gmsh --password gmsh co https://geuz.org/svn/getdp/trunk getdp; else svn up getdp; fi + +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/lib/libpetsc.so" ] || [ ! -f "petsc.android/libs/libf2clapack.so" ] || [ ! -f "petsc.android/libs/libf2cblas.so" ]; then + echo "ERROR: petsc.android/lib do not exist or is incomplete (need blas, lapack and petsc)" +fi + +cd gmsh.android +echo -e "\033[1m[+] Make Gmsh library\033[0m" +cmake -DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_ANDROID=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DCMAKE_BUILD_TYPE=Release -DBLAS_LIB=../petsc.android/libf2cblas.so -DLAPACK_LIB=../petsc.android/libf2clapack.so ../gmsh +checkError $? "CMake fail (Gmsh)" +make androidGmsh -j3 +checkError $? "make fail (Gmsh)" +make getHeaders +checkError $? "make getHeaders fail (Gmsh)" + +cd ../getdp.android +echo -e "\033[1m[+] Make GetDP library\033[0m" +cmake -DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN -DENABLE_FORTRAN=0 -DENABLE_BUILD_ANDROID=1 -DENABLE_GMSH=1 -DENABLE_LEGACY=1 -DENABLE_PETSC=1 -DCMAKE_BUILD_TYPE=Release -DGMSH_INC=..//gmsh.android/Headers -DGMSH_LIB=../gmsh.android/libs/libGmsh.so -DPETSC_INC=../petsc.android/include/ -DPETSC_LIBS=../petsc.android/libpetsc.so ../getdp +checkError $? "CMake fail (GetDP)" +make androidGetdp -j3 +checkError $? "make fail (GetDP)" +make getHeaders +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/ +checkError $? "CMake fail (Onelab)" +make androidOnelab -j3 +checkError $? "make fail (Onelab)" + +echo -e "\033[1m[+] Build Android application (java)\033[0m" +cd ../gmsh/contrib/mobile/Android +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/libs/libpetsc.so libs/armeabi-v7a/ +cp ../../../../petsc.android/libs/libf2clapack.so libs/armeabi-v7a/ +cp ../../../../petsc.android/libs/libf2cblas.so libs/armeabi-v7a/ +target=1 +count=0 +while read line; do + read line # Name + target_name=$(echo $line | awk '{print $2}') + target_version=$(echo $line | awk '{print $3}') + read line # Type + read line # API level + target_api=$(echo $line | awk '{print $3}') + read line # Revision + read line # Skins + if [ $target_api -ge 14 ]; then + echo -e "\n\nBuild $target_name $target_version (target id: $target)" + $ANDROID_SDK/tools/android update project --name Onelab --path . --target $target + ant -quiet release + checkError $? "ant fail ($(echo $target_name $target_version))" + cp bin/Onelab-release.apk ../../../../Onelab-$(echo $target_name)_$(echo $target_version).apk + if [ $? -ne 0 ]; then + cp bin/Onelab-release-unsigned.apk ../../../../Onelab-unsigned-$(echo $target_name)_$(echo $target_version).apk + fi + count=$(($count+1)) + fi + read line # HACK + target=$(($target+1)) +done < <($ANDROID_SDK/tools/android list target | grep -A 5 "id:") +echo -e "\033[1m[V] Build $count apk(s)\033[0m" +exit 0 -- GitLab