summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/install/Android.mdwn20
-rwxr-xr-xstandalone/android/buildchroot19
-rwxr-xr-xstandalone/android/buildchroot-inchroot20
-rwxr-xr-xstandalone/android/buildchroot-inchroot-asuser13
4 files changed, 64 insertions, 8 deletions
diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn
index da5f6a645..0b7fa25c7 100644
--- a/doc/install/Android.mdwn
+++ b/doc/install/Android.mdwn
@@ -19,14 +19,18 @@ of Bath CS department.
## building it yourself
-git-annex can be built for Android, with `make android`. It's not an easy
-process:
-
-* First, install <https://github.com/joeyh/ghc-android>.
- The easiest way is to follow the instructions at the end of its README.md
- to install in a Debian stable chroot.
-* In git-annex's `standalone/android/` directory, run
- `./install-haskell-packages native && ./install-haskell-packages cross`
+git-annex can be built from source for Android.
+
+1. Run `standalone/android/buildchroot` as root (requires debootstrap).
+ This builds a chroot with an `androidbuilder` user.
+ The rest of the build will run in this chroot as that user.
+2. Then run `standalone/android/install-haskell-packages`
+ Note that this will break from time to time as new versions of packages
+ are released, and the patches it applies have to be updated when
+ this happens.
+3. Finally, once the chroot is set up, you can build an Android binary
+ with `make android`, and `make androidapp` will build the complete APK.
+
* You will need to have the Android SDK and NDK installed; see
`standalone/android/Makefile` to configure the paths to them. You'll also
need ant, and the JDK.
diff --git a/standalone/android/buildchroot b/standalone/android/buildchroot
new file mode 100755
index 000000000..3f4c8eaa9
--- /dev/null
+++ b/standalone/android/buildchroot
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+if [ "$(whoami)" != root ]; then
+ echo "Must run this as root!" >&2
+ exit 1
+fi
+
+debootstrap --arch=i386 stable debian-stable-android
+cp $0-inchroot debian-stable-android/tmp
+cp $0-inchroot-asuser debian-stable-android/tmp
+chroot debian-stable-android "tmp/$(basename $0)-inchroot"
+
+echo
+echo
+echo "debian-stable-android is set up, with a user androidbuilder"
+echo "your next step is probably to check out git-annex in this chroot"
+echo "and run standalone/android/install-haskell-packages"
+echo
+echo
diff --git a/standalone/android/buildchroot-inchroot b/standalone/android/buildchroot-inchroot
new file mode 100755
index 000000000..2de76fb86
--- /dev/null
+++ b/standalone/android/buildchroot-inchroot
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Runs inside the chroot set up by buildchroot
+set -e
+if [ "$(whoami)" != root ]; then
+ echo "Must run this as root!" >&2
+ exit 1
+fi
+
+mount -t proc proc /proc
+echo "deb-src http://ftp.us.debian.org/debian stable main" >> /etc/apt/sources.list
+apt-get update
+apt-get -y install build-essential ghc git libncurses5-dev cabal-install
+apt-get -y install llvm-3.0 # not 3.1; buggy on arm. 3.2 is ok too
+apt-get -y install ca-certificates curl file m4 autoconf zlib1g-dev
+apt-get -y install libgnutls-dev libxml2-dev libgsasl7-dev pkg-config c2hs
+wget http://snapshot.debian.org/archive/debian/20130903T155330Z/pool/main/a/automake-1.14/automake_1.14-1_all.deb
+dpkg -i automake*.deb
+rm *.deb
+useradd androidbuilder
+su androidbuilder -c $0-asuser
diff --git a/standalone/android/buildchroot-inchroot-asuser b/standalone/android/buildchroot-inchroot-asuser
new file mode 100755
index 000000000..a4467e66b
--- /dev/null
+++ b/standalone/android/buildchroot-inchroot-asuser
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Runs inside the chroot set up by buildchroot, as the user it creates
+set -e
+
+rm -rf .ghc .cabal
+cabal update
+cabal install happy alex --bindir=$HOME/bin
+PATH=$HOME/bin:$PATH
+export PATH
+git clone https://github.com/joeyh/ghc-android
+cd ghc-android
+git checkout stable-ghc-snapshot
+./build