wiki:AndroidBuildApp

Version 14 (modified by Joachim, 11 years ago) (diff)

adapted to multi architecture support

How To Build BOINC Apps for Android

This document describes how to build BOINC apps for Android devices.

Requirements

Used versions

Development target:

  • ARM architecture featuring ABI v5
  • NDK-level 4 (Android 1.6)

Tested with:

  • ARM ABI v7 device (Samsung Galaxy SII)
  • Android platform 2.3.4

Compatibility with BOINC on Android

BOINC on Android runs on all Android devices, regardless of its CPU architecture. Possible architectures are ARM, x86 and MIPS. ARM is the predominant platform on Android.

Even within ARM, higher ABIs or specific CPU capabilities might only be available on a subset of volunteer's devices.

The client reports CPU architecture and capabilities, i.e. VFP and NEON support, to the project server.

BOINC platform name

BOINC on Android uses the following BOINC platform identifier: "arm-android-linux-gnu" "x86-android-linux-gnu" "mipsel-android-linux-gnu"

Setup NDK toolchain

To set up a custom cross compilation toolchain, see article at AndroidBuildClient

Build script

Take a look at the build scripts in the BOINC software repository. They give you an idea of what steps are required and which cross compilation tools to use.

There are also scripts available, which build required software components, i.e. curl and openSSL, or BOINC libs.

Building FPU versions

To build a version for VFP:

-O3 -mhard-float -mfpu=vfp -mfloat-abi=softfp -fomit-frame-pointer

To build a version for neon:

-O3 -mhard-float -mfpu=neon -mfloat-abi=softfp -fomit-frame-pointer

It's often useful to build a single executable that can support the vfp or neon libraries & instructions, and then use the BOINC APP_INIT_DATA and HOST_INFO structures to find the capabilities of the host and call the appropriate optimized routines (member variable 'p_features' e.g. strstr(aid.host_info.p_features, " neon ").

You can do this by selectively compiling using the above options, into separate small libraries that you link into the single executable, and use C++ namespaces to separate similar function calls. Refer to the boinc/client/Makefile.am and client/whetstone.cpp, and client/cs_benchmark.cpp files for an example of how to do this.

Fortran on Android NDK (optional build)

Note that the Android NDK currently does not have a fortran compiler distributed with it. But it is possible to build GNU Fortran (gfortran) libraries for ARM/Android using the information at http://danilogiulianelli.blogspot.co.uk/2013/02/how-to-build-gcc-fortran-cross-compiler.html

Example

Setup the environment: http://boinc.berkeley.edu/trac/browser/boinc-v2/samples/example_app/build_android.sh

Android Makefile: http://boinc.berkeley.edu/trac/browser/boinc-v2/samples/example_app/Makefile_android

An example of how to adapt a BOINC app's Makefile to compile it for Android can be found in the BOINC sources at: https://github.com/novarow/AndroidBOINC/blob/master/native/diffs_android/uppercase/Makefile_android

Note that the AndroidBOINC build script sets up the required environment variables for the standard c++ library as well as the Android SYSROOT.

-llog refers to the library required to use Logcat from native code. Logcat is used for debugging purposes and is not required for the app's functionality.