diff --git a/checkin_notes b/checkin_notes
index c657a4e28482485d4cffb803c4d1576457224d1a..bf2c18854bbe5e1cdc9d19b1ca6202542237a546 100644
--- a/checkin_notes
+++ b/checkin_notes
@@ -2715,3 +2715,18 @@ Rom    15 Mar 2012
     samples/vboxwrapper/
         vbox.cpp, .h
         vboxwrapper.cpp
+
+David  16 Mar 2012
+    - client: small changes to make client compile on Android,
+        and to report the platform as "arm-android".
+        From Carl Christensen.
+    - Add a script for building BOINC and library dependencies on Android
+        From Peter Hanappe.
+
+    lib/
+        mac_address.cpp
+    client/
+        android/
+            AndroidBuild.sh (new)
+        cs_platforms.cpp
+        hostinfo_unix.cpp
diff --git a/client/android/AndroidBuild.sh b/client/android/AndroidBuild.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a947e16c9d99f8f77e6b5497561370db1f44e056
--- /dev/null
+++ b/client/android/AndroidBuild.sh
@@ -0,0 +1,348 @@
+#!/bin/bash
+
+# Script to compile BOINC for Android.
+# Requires the BOINC source directory and the Android NDK.
+#
+# Date: December 12th, 2011
+# Author: Peter Hanappe (Sony Computer Science Laboratory)
+
+BOINCDIR=`pwd`
+NDK_SYSROOT=""
+NDK_PATH=""
+NDK_ARCH="arm"
+NDK_ROOT=""
+NDK_ABI="armeabi"
+NDK_VERSION="android-8"
+COMPILE_BOINC="yes"
+COMPILE_ZLIB="yes"
+COMPILE_OPENSSL="yes"
+COMPILE_CURL="yes"
+CONFIGURE="yes"
+MAKE_CLEAN="no"
+
+function print_usage()
+{
+    echo "Options:"
+    echo "  --help"
+    echo "  --boinc-dir <dir>       Root directory of BOINC source tree (default: current dir)."
+    echo "  --android-root <dir>    The root directory of the Android NDK."
+    echo "  --android-sysroot <dir> The target sysroot directory of the Android NDK."
+    echo "  --android-bin <dir>     The bin directory of the Android NDK compilers."
+    echo "  --android-arch <dir>    Compile for 'arm' or 'x86' architecture (default: arm)."
+    echo "  --android-version <val> Specify Android version (default: android-8)."
+    echo "  --skip-boinc            Don't compile BOINC."
+    echo "  --skip-zlib             Don't download and compile zlib."
+    echo "  --skip-openssl          Don't download and compile OpenSSL."
+    echo "  --skip-curl             Don't download and compile curl."
+    echo "  --skip-configure        Don't run configure script before compiling."
+    echo "  --make-clean            Run 'make clean' before compiling."
+    echo "Example: ./AndroidBuild.sh \\"
+    echo "           --android-root /opt/google/android-ndk-r6 \\"
+    echo "           --android-bin /opt/google/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin"
+    exit 0
+}
+
+while (($#)); do
+      option=$1
+      shift
+      case "$option" in
+          --help) 
+              print_usage
+              shift 
+              ;;
+          --boinc-dir) 
+              BOINCDIR=$1
+              shift 
+              ;;
+          --android-sysroot) 
+              NDK_SYSROOT=$1
+              shift 
+              ;;
+          --android-root) 
+              NDK_ROOT=$1
+              shift 
+              ;;
+          --android-bin) 
+              NDK_PATH=$1
+              shift 
+              ;;
+          --android-arch) 
+              NDK_ARCH=$1
+              shift 
+              ;;
+          --android-version) 
+              NDK_VERSION=$1
+              shift 
+              ;;
+          --skip-boinc) 
+              COMPILE_BOINC="no"
+              ;;
+          --skip-zlib) 
+              COMPILE_ZLIB="no"
+              ;;
+          --skip-openssl) 
+              COMPILE_OPENSSL="no"
+              ;;
+          --skip-curl) 
+              COMPILE_CURL="no"
+              ;;
+          --skip-configure) 
+              CONFIGURE="no"
+              ;;
+          --make-clean) 
+              MAKE_CLEAN="yes"
+              ;;
+          *) 
+              echo "Unknown option ${option}"
+              print_usage
+              ;;
+      esac      
+done
+
+###################################################
+# Test options and paths
+
+if [ ! -e "${BOINCDIR}/client/gui_rpc_server.h" ]; then
+   echo "Please launch this script in the boinc root directory, or use the --boinc-dir <dir> option."
+   print_usage
+fi
+
+if [ "x${NDK_ROOT}" == "x" ]; then
+   echo "Please specify the Android NDK root directory."
+   print_usage
+fi
+
+if [ ${NDK_ARCH} == "arm" ]; then
+    NDK_HOST=arm-linux-androideabi
+elif [ ${NDK_ARCH} == "x86" ]; then
+    NDK_HOST=i686-android-linux
+else
+    echo "Please specify the Android architecture."
+    print_usage
+fi
+
+NDK_CC=${NDK_HOST}-gcc
+
+if [ "x${NDK_SYSROOT}" == "x" ]; then
+    NDK_SYSROOT=${NDK_ROOT}/platforms/${NDK_VERSION}/arch-${NDK_ARCH}
+    if [ ! -d ${NDK_SYSROOT} ]; then
+        echo "Please specify the Android NDK sysroot."
+        echo "Tried, but failed: ${NDK_SYSROOT}"
+        print_usage
+    fi
+fi
+
+if [ "x${NDK_PATH}" == "x" ]; then
+   echo "Please specify the Android binary directory."
+   print_usage
+fi
+
+if [ ! -e "${NDK_SYSROOT}/usr/include/stdio.h" ]; then
+    echo "Could not find ${NDK_SYSROOT}/usr/include/stdio.h header. Please verify the sysroot."
+    print_usage
+fi
+
+if [ ! -e "${NDK_PATH}/${NDK_CC}" ]; then
+    echo "Could not find the ${NDK_CC} compiler. Please verify the binary path."
+    print_usage
+fi
+
+###################################################
+
+echo "================================================"
+echo "BOINCDIR        ${BOINCDIR}"
+echo "NDK_ROOT        ${NDK_ROOT}"
+echo "NDK_SYSROOT     ${NDK_SYSROOT}"
+echo "NDK_PATH        ${NDK_PATH}"
+echo "NDK_ARCH        ${NDK_ARCH}"
+echo "NDK_HOST        ${NDK_HOST}"
+echo "NDK_ABI         ${NDK_ABI}"
+echo "NDK_VERSION     ${NDK_VERSION}"
+echo "NDK_CC          ${NDK_CC}"
+echo "COMPILE_ZLIB    $COMPILE_ZLIB"
+echo "COMPILE_OPENSSL $COMPILE_OPENSSL"
+echo "COMPILE_CURL    $COMPILE_CURL"
+echo "CONFIGURE       $CONFIGURE"
+echo "MAKE_CLEAN      $MAKE_CLEAN"
+echo "================================================"
+
+###################################################
+
+function compile_zlib()
+{
+    echo "================================================"
+    echo "= Starting download and compilation of zlib    ="
+    echo "================================================"
+
+    cd ${BOINCDIR}/android
+
+    if [ ! -e zlib-1.2.5 ]; then
+        wget http://zlib.net/zlib-1.2.5.tar.gz
+        tar xzvf zlib-1.2.5.tar.gz 
+    fi
+
+    cd zlib-1.2.5
+
+    if [ $CONFIGURE == "yes" ]; then
+        CC="${NDK_PATH}/${NDK_CC} --sysroot=${NDK_SYSROOT}" \
+            ./configure --prefix=${BOINCDIR}/android/${NDK_ARCH} --static 
+    fi
+    if [ $MAKE_CLEAN == "yes" ]; then
+        make clean
+    fi
+    make
+# The 'make install' script fails
+    mkdir -p ${BOINCDIR}/android/${NDK_ARCH}/lib
+    mkdir -p ${BOINCDIR}/android/${NDK_ARCH}/include
+    cp libz.a ${BOINCDIR}/android/${NDK_ARCH}/lib
+    cp zlib.h ${BOINCDIR}/android/${NDK_ARCH}/lib
+    cp zconf.h ${BOINCDIR}/android/${NDK_ARCH}/lib
+}
+
+###################################################
+
+function compile_openssl()
+{
+    echo "================================================"
+    echo "= Starting download and compilation of openssl ="
+    echo "================================================"
+
+    cd ${BOINCDIR}/android
+
+    if [ ! -e openssl-1.0.0e ]; then
+        wget http://www.openssl.org/source/openssl-1.0.0e.tar.gz
+        tar xzvf openssl-1.0.0e.tar.gz 
+    fi
+
+    cd openssl-1.0.0e
+
+    if [ $CONFIGURE == "yes" ]; then
+        CC="${NDK_PATH}/${NDK_CC} --sysroot=${NDK_SYSROOT}" \
+            ./config --prefix=${BOINCDIR}/android/${NDK_ARCH} no-shared no-asm
+    fi
+
+    if [ $MAKE_CLEAN == "yes" ]; then
+        make clean
+    fi
+
+    make
+    make install
+}
+
+###################################################
+
+function compile_curl()
+{
+    echo "================================================"
+    echo "= Starting download and compilation of curl ="
+    echo "================================================"
+
+    cd ${BOINCDIR}/android
+
+    if [ ! -e curl-7.23.1 ]; then
+        wget http://curl.haxx.se/download/curl-7.23.1.tar.gz
+        tar xzvf curl-7.23.1.tar.gz 
+    fi
+
+    cd curl-7.23.1
+
+# Export binary path.
+    export PATH=${PATH}:${NDK_PATH}
+
+#
+# ./configure --with-sysroot=${NDK_SYSROOT} doesn't seem to work. Pass
+# the correct path using the CFLAGS environment variable.
+#
+# The ANDROID flag is used in curl-7.23.1/include/curl/curl.h
+#
+    if [ $CONFIGURE == "yes" ]; then
+        CFLAGS="--sysroot=${NDK_SYSROOT} -DANDROID" \
+            ./configure --host=${NDK_HOST} \
+            --with-sysroot=${NDK_SYSROOT} \
+            --prefix=${BOINCDIR}/android/${NDK_ARCH} --enable-debug \
+            --disable-shared --enable-static \
+            --enable-http --disable-ftp --disable-ldap --disable-ldaps \
+            --disable-rtsp --disable-proxy --disable-dict --disable-telnet \
+            --disable-tftp --disable-pop3 --disable-imap --disable-smtp \
+            --disable-gopher --disable-ipv6 --disable-sspi --disable-crypto-auth \
+            --disable-tls-srp --disable-ntlm-wb --disable-cookies --disable-manual \
+            --disable-threaded-resolver --without-ca-bundle
+    fi
+
+    if [ $MAKE_CLEAN == "yes" ]; then
+        make clean
+    fi
+
+    make
+    make install
+}
+
+###################################################
+# Problems: 
+# - problems in configure.ac with curl: --with-curl doesn't use the correct path
+# - config.sub too old to recognize --host=arm-linux-androideabi, used newer config.sub (2011-03-23)
+# - changed lib/network.cpp:298: !defined(__ANDROID__)
+# - changed lib/synch.cpp: #if defined(__ANDROID__) \ #define create_semaphore(_key) (-1), ...
+# - changed lib/mac_address.cpp:189: #elif (defined(SIOCGIFCONF) || defined(SIOCGLIFCONF)) && !defined(__ANDROID__)
+function compile_boinc()
+{
+    cd ${BOINCDIR}
+
+# Export binary path.
+    export PATH=${PATH}:${NDK_PATH}
+
+    if [ $CONFIGURE == "yes" ]; then
+
+        bash _autosetup
+
+        OPTIONS="--host=${NDK_HOST} \
+            --disable-server \
+            --enable-client \
+            --disable-manager \
+            --enable-libraries \
+            --enable-debug \
+            --with-ssl=${BOINCDIR}/android/arm/lib"
+
+        echo "================================================"
+        echo "Configuring BOINC with: $OPTIONS"
+        echo "================================================"
+
+        FLAGS="--sysroot=${NDK_SYSROOT} \
+            -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include \
+            -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/libs/${NDK_ABI}/include"
+        
+        CFLAGS="${FLAGS}" \
+        CXXFLAGS="${FLAGS}" \
+        LDFLAGS="-L${BOINCDIR}/android/arm/lib -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/libs/${NDK_ABI}" \
+        LIBS="-lstdc++" \
+            ./configure ${OPTIONS}
+    fi
+
+    if [ $MAKE_CLEAN == "yes" ]; then
+        make clean
+    fi
+
+    make
+}
+
+###################################################
+
+if [ ! -e "${BOINCDIR}/android" ]; then
+    echo "================================================"
+    echo "= Creating the android direcory                ="
+    echo "================================================"
+    mkdir ${BOINCDIR}/android
+fi
+if [ $COMPILE_ZLIB == "yes" ]; then
+    compile_zlib
+fi
+if [ $COMPILE_OPENSSL == "yes" ]; then
+    compile_openssl
+fi
+if [ $COMPILE_CURL == "yes" ]; then
+    compile_curl
+fi
+if [ $COMPILE_BOINC == "yes" ]; then
+    compile_boinc
+fi
+
diff --git a/client/cs_platforms.cpp b/client/cs_platforms.cpp
index fd92d5b52f4c9ab1211ff6411839859abee0750a..c4878a9e73d13c94c0f635104267dc7a340cc52e 100644
--- a/client/cs_platforms.cpp
+++ b/client/cs_platforms.cpp
@@ -96,6 +96,8 @@ void CLIENT_STATE::detect_platforms() {
     }
     add_platform("windows_intelx86");
 #endif
+#elif defined(ANDROID)
+    add_platform("arm-android");
 
 #elif defined(__APPLE__)
 
diff --git a/client/hostinfo_unix.cpp b/client/hostinfo_unix.cpp
index 2e667b32ef4afb86996ab30e21fe48df3c3ee373..1b2cb914833f6006db5eb01beda972358854a4c2 100644
--- a/client/hostinfo_unix.cpp
+++ b/client/hostinfo_unix.cpp
@@ -62,9 +62,15 @@
 #endif
 
 #include <sys/stat.h>
+
 #if HAVE_SYS_SWAP_H
+#ifdef ANDROID
+#include <linux/swap.h>
+#else
 #include <sys/swap.h>
 #endif
+#endif
+
 #if HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
 #endif
diff --git a/lib/mac_address.cpp b/lib/mac_address.cpp
index 9115061372041f6f0bbfeada4ed13eda723fe279..c2ca9b2c9879909615038f063c392e8ba0e20e77 100644
--- a/lib/mac_address.cpp
+++ b/lib/mac_address.cpp
@@ -267,7 +267,11 @@ get_mac_addresses(char* addresses) {
         strcat(addresses, delimiter);
         delimiter[0] = ':';
         delimiter[1] = '\0';
+#ifdef ANDROID
+        strcat(addresses, "00");
+#else
         strcat(addresses, ether_ntoa(hw_addr));
+#endif
     }
 
     return true;