2009-10-25 00:01:12 +00:00
|
|
|
This document explains how to properly build an Android package of Orbot from
|
2009-10-25 06:38:14 +00:00
|
|
|
source. It covers building on Debian Lenny (5.0.3).
|
2009-10-25 00:01:12 +00:00
|
|
|
|
2009-10-25 02:47:27 +00:00
|
|
|
Please install the following prerequisites (instructions for each follows):
|
2009-10-25 04:49:06 +00:00
|
|
|
ant: http://ant.apache.org/
|
|
|
|
Android OS SDK: http://source.android.com/download
|
2009-10-25 00:01:12 +00:00
|
|
|
droid-wrapper: http://github.com/tmurakam/droid-wrapper
|
2009-10-25 04:49:06 +00:00
|
|
|
libevent source (1.4.12-stable from svn)
|
2009-10-25 00:01:12 +00:00
|
|
|
Tor source (most recent git master branch)
|
|
|
|
|
2009-10-25 00:47:19 +00:00
|
|
|
Install and prepare the Android OS SDK ( http://source.android.com/download )
|
|
|
|
on Debian Lenny:
|
|
|
|
|
|
|
|
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
|
|
|
|
libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
|
2009-10-27 04:20:30 +00:00
|
|
|
curl libncurses5-dev zlib1g-dev valgrind libtool automake \
|
|
|
|
ruby subversion
|
2009-10-25 01:06:59 +00:00
|
|
|
update-java-alternatives -s java-1.5.0-sun
|
2009-10-25 00:47:19 +00:00
|
|
|
|
|
|
|
curl http://android.git.kernel.org/repo >~/bin/repo
|
|
|
|
chmod a+x ~/bin/repo
|
|
|
|
|
|
|
|
mkdir ~/mydroid
|
|
|
|
cd ~/mydroid
|
|
|
|
|
|
|
|
repo init -u git://android.git.kernel.org/platform/manifest.git
|
|
|
|
repo sync
|
|
|
|
|
|
|
|
# Paste in key from http://source.android.com/download next...
|
|
|
|
gpg --import
|
|
|
|
|
|
|
|
cd ~/mydroid
|
2009-10-25 00:52:32 +00:00
|
|
|
|
|
|
|
# This takes a long while...
|
2009-10-25 00:47:19 +00:00
|
|
|
make
|
|
|
|
|
2009-10-25 00:52:32 +00:00
|
|
|
Install droid-wrapper:
|
|
|
|
|
|
|
|
cd /tmp
|
|
|
|
git clone git://github.com/tmurakam/droid-wrapper.git
|
|
|
|
cd droid-wrapper
|
|
|
|
sudo make install
|
|
|
|
|
2009-10-25 02:47:27 +00:00
|
|
|
zlib and OpenSSL are included with the Android OS SDK. You'll need to build
|
|
|
|
libevent and finally Tor. We'll create an externals directory for this code:
|
2009-10-25 01:06:59 +00:00
|
|
|
|
2009-10-25 02:47:27 +00:00
|
|
|
mkdir -p ~/mydroid/external/{libevent,tor}
|
2009-10-25 01:06:59 +00:00
|
|
|
|
2009-10-25 02:47:27 +00:00
|
|
|
We need to set to environment variables for droid-gcc:
|
|
|
|
export DROID_ROOT=~/mydroid/
|
|
|
|
export DROID_TARGET=generic
|
|
|
|
|
|
|
|
Fetch and build libevent:
|
|
|
|
|
|
|
|
cd ~/mydroid/external/libevent
|
2009-10-25 03:36:52 +00:00
|
|
|
svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
|
2009-10-25 02:47:27 +00:00
|
|
|
export LIBEVENTDIR=`pwd`
|
|
|
|
./autogen.sh
|
2009-10-25 04:49:06 +00:00
|
|
|
# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
|
2009-10-25 03:36:52 +00:00
|
|
|
patch < /tmp/libevent-patch
|
2009-10-25 02:47:27 +00:00
|
|
|
CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
|
|
|
|
make
|
|
|
|
|
2009-10-25 04:17:53 +00:00
|
|
|
Copy over the libevent library:
|
|
|
|
|
|
|
|
cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
|
|
|
|
|
2009-10-25 02:47:27 +00:00
|
|
|
Fetch and build Tor:
|
|
|
|
|
|
|
|
export OPENSSLDIR=`cd ~/mydroid/external/openssl/include/ && pwd`
|
|
|
|
export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
|
|
|
|
|
|
|
|
cd ~/mydroid/external/tor
|
|
|
|
git clone https://git.torproject.org/git/tor.git
|
|
|
|
cd tor/
|
2009-10-27 04:20:30 +00:00
|
|
|
./autogen.sh
|
2009-10-25 02:47:27 +00:00
|
|
|
CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
|
|
|
|
--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
|
|
|
|
--with-zlib-dir=$ZLIBDIR
|
|
|
|
make
|
|
|
|
|
|
|
|
At this point, you'll have a Tor binary that can be run on an Android handset.
|
|
|
|
This isn't enough though and we'll now sew up the binary into a small package
|
|
|
|
that will handle basic Tor controlling features.
|
2009-10-25 01:06:59 +00:00
|
|
|
|
2009-10-25 05:06:49 +00:00
|
|
|
We need to build our Java SOCKS library:
|
|
|
|
|
|
|
|
# If you're in Orbot's directory already...
|
|
|
|
cd ../asocks/
|
|
|
|
ant compile
|
|
|
|
ant jar
|
|
|
|
cp bin/jar/asocks.jar ../Orbot/libs
|
|
|
|
|
2009-10-25 04:33:05 +00:00
|
|
|
Finally, we'll make a proper Android package with ant and the Android App SDK:
|
|
|
|
|
2009-10-25 04:35:51 +00:00
|
|
|
export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
|
2009-10-25 05:06:49 +00:00
|
|
|
cd ../Orbot/
|
2009-10-25 04:33:05 +00:00
|
|
|
cp ~/mydroid/external/tor/tor/src/or/tor assets/tor
|
|
|
|
$APP_SDK/android update project --name Orbot --target 1 --path .
|
|
|
|
ant release
|
|
|
|
|
2009-10-25 05:11:16 +00:00
|
|
|
This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
|
2009-10-25 05:27:19 +00:00
|
|
|
|
|
|
|
To produce a usable package, you'll need to sign the .apk. The basics on
|
|
|
|
signing can be found on the Android developer site:
|
|
|
|
|
|
|
|
http://developer.android.com/guide/publishing/app-signing.html
|
|
|
|
|
|
|
|
The three steps are quite simple. First, you'll generate a key. Secondly,
|
|
|
|
you'll sign the application. Thirdly, you'll verify the the apk.
|
|
|
|
|
|
|
|
Generating a signing key:
|
|
|
|
|
|
|
|
keytool -genkey -v -keystore my-release-key.keystore \
|
|
|
|
-alias orbots_key -keyalg RSA -validity 10000
|
|
|
|
|
|
|
|
Sign the apk:
|
|
|
|
|
|
|
|
jarsigner -verbose -keystore my-release-key.keystore \
|
|
|
|
bin/Orbot-unsigned.apk orbots_key
|
|
|
|
|
|
|
|
Verify the signature for the apk:
|
|
|
|
|
|
|
|
jarsigner -verify bin/Orbot-unsigned.apk
|
|
|
|
mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
|
|
|
|
|
|
|
|
Now you should have a fully signed and production ready alpha release of Orbot!
|
|
|
|
Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
|