= aria2 for Android devices =

aria2 is a lightweight multi-protocol & multi-source download utility
operated in command-line. It supports HTTP/HTTPS, FTP, BitTorrent and
Metalink.

== Install ==

aria2 is not an ordinary Android Java application. It is a C++ native
application and operates in command-line.  You don't have to 'root'
your device to use aria2.  Because aria2 is a command-line program,
you need a terminal emulator. First install Android Terminal Emulator
from Android Market (or build it from source and install. See
https://github.com/jackpal/Android-Terminal-Emulator/).

1. Copy aria2c executable to /mnt/sdcard on your device.
2. Run Android Terminal Emulator.
3. mkdir /data/data/jackpal.androidterm/aria2
4. cat /mnt/sdcard/aria2c > /data/data/jackpal.androidterm/aria2/aria2c
5. chmod 744 /data/data/jackpal.androidterm/aria2/aria2c
6. Add the following commands to the initial command of Android
   Terminal Emulator:

  export HOME=/data/data/jackpal.androidterm/aria2; cd $HOME

7. Exit Android Terminal Emulator.
8. Run Android Terminal Emulator again.
9. See whether aria2c actually works by invoking ./aria2c -v

== Notes ==

aria2c executable was generated using android-ndk-r5b.

The following libraries were statically linked.

 * openssl 0.9.8q
 * expat 2.0.1
 * c-ares 1.7.4

Since Android does not have /etc/resolv.conf, c-ares(asynchronous DNS
resolver) is disabled by default. But name resolution is sometimes a
little bit slow, so I recommend to enable c-ares. You can enable it
using --async-dns and specify DNS servers using --async-dns-server
option, like this:

  --async-dns --async-dns-server=`getprop net.dns1`,`getprop net.dns2`

Because it is tedious to type these long parameters every time you use
aria2c, the following wrapper shell script would be handy:

-------------------------------------------------------------
#!/system/bin/sh
/data/data/jackpal.androidterm/aria2c \
  --async-dns \
  --async-dns-server=`getprop net.dns1`,`getprop net.dns2` \
  "$@"
-------------------------------------------------------------

Please note that you need to add executable file mode bit to this
wrapper script too, e.g. chmod 744 /PATH/TO/SCRIPT.

== Known Issues ==

 * Since Android does not have /dev/stdout, "--log -" does not work.

 * Android Terminal Emulator sometimes stops updating console. It
   looks like aria2c hangs, but aria2c continues to run.

== Reference ==

 TBD
