[Android Q&A, Help & Troubleshooting] qwerty12:
Assuming you have the Android NDK installed (no idea how to do it under Windows; Cygwin has never been my forte... Under Arch all you need to do is install the packages from the AUR), it's insanely easy to do yourself, thanks to the build scripts in the libsodium and dnscrypt packages.

export ANDROID_NDK_HOME=${ANDROID_NDK} # Or wherever your NDK dump happens to be residing
mkdir ~/dnsc && pushd ~/dnsc

This part deals with signature verification, used to determine we have not received a tampered-with copy of DNSCrypt. This page is being delivered over unsecured HTTP, so don't necessarily trust what's being written here.

Again: REMEMBER THAT THIS PAGE IS UNSECURE (granted, I imagine a person intending to cause malice would remove these warnings but, hey, it's not like I have alternatives). I'm also not a security expert in the slightest, so it wouldn't be surprising if it transpired I was giving bad advice.

Read http://doc.libsodium.org/installation/README.html for instructions on how to get libsodium's SHA256 hashsum (which you can verify against the file you've got downloaded by running sha256sum) and for the public key used to sign the downloaded files. It can be imported by copying it, pasting it into a Notepad etc. instance, saving it and running gpg --import <whatever.gpg>.

Use your own judgement, other keyservers and Google to determine whether you have jedisct1's real key.

Download dnscrypt's dependency, libsodium:

curl -O https://download.libsodium.org/libsodium/releases/libsodium-1.0.2.tar.gz -O https://download.libsodium.org/libsodium/releases/libsodium-1.0.2.tar.gz.sig

Verify the file's signature:

gpg --verify libsodium-1.0.2.tar.gz.sig libsodium-1.0.2.tar.gz

I get the following (the warning can be ignored -- unless you've managed to verify the key with jedisct1 in person):

gpg: Signature made Tue 10 Feb 2015 10:59:17 AM GMT using RSA key ID 2B6F76DA
gpg: Good signature from "Frank Denis (Jedi/Sector One) <redacted>" [unknown]
gpg: aka "Frank Denis (Jedi/Sector One) <redacted>" [unknown]
gpg: aka "Frank Denis <redacted>" [unknown]
gpg: aka "Frank Denis <redacted>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54A2 B889 2CC3 D6A5 97B9 2B6C 2106 27AA BA70 9FE1
Subkey fingerprint: 0C79 83A8 FD9A 104C 6231 72CB 62F2 5B59 2B6F 76DA

If everything looks OK, then continue. Conversely, if anything is out of place, then abort. Seriously.

Untar and go to the directory with the libsodium code:

tar xf libsodium-1.0.2.tar.gz && pushd libsodium-1.0.2

It's not in the tarball yet, so download this into the dist-build folder and chmod 0755 it.

If running into problems, edit aandroid-armv7-a.sh and do the following:

change TARGET_ARCH to arm

set the march value to armv7-a

Start building libsodium:

./dist-build/android-armv7-a.sh

I get the following dumped:

faheem@innisfree ~/dnsc/libsodium-1.0.0 % ./dist-build/android-arm.sh
<configure output removed>
libsodium has been installed into /home/faheem/dnsc/libsodium-1.0.0/libsodium-android-arm
./dist-build/android-arm.sh 21.97s user 2.72s system 165% cpu 14.927 total

Note the line saying where libsodium has been installed. Let its value be stored in the environment:

export SODIUM_ANDROID_PREFIX=<folder where libsodium has been installed, as reported by android-arm.sh>

Consider removing debugging symbols to reduce the size of the file:

./android-toolchain-arm/arm-linux-androideabi/bin/strip $SODIUM_ANDROID_PREFIX/lib/libsodium.so

I won't repeat what's on the main dnscrypt.org site or, really, what I've already written.

popd back to the ~/dnsc folder and download the latest version of dnscrypt and its signature. Follow the instructions on the website to verify the tarball's SHA256SUM and run gpg like above to verify the tarball against the signature. If everything is OK, untar dnscrypt like we did libsodium.

Run to build:

./dist-build/android-armv7.sh

If running on Lollipop, make the changes below, as per alihassani:

add -fPIE to the end of the CFLAGS

place export LDFLAGS="-fPIE -pie" under the CFLAGS line

If running into problems running android-armv7.sh, make the applicable changes above again.

After it's been built, you'll get this:

faheem@innisfree ~/dnsc/dnscrypt-proxy-1.4.1 % SODIUM_ANDROID_PREFIX="$HOME/dnsc/libsodium-1.0.0/libsodium-android-arm/" dist-build/android-armv7.sh
<configure output snipped>
dnscrypt-proxy has been installed into /home/faheem/dnsc/dnscrypt-proxy-1.4.1/dnscrypt-proxy-android-armv7

Again, consider stripping the resulting binary. Transfer, fix permissions etc.

Some notes:

The binary is dynamically linked to libsodium. If installing, you'll need to copy libsodium.so to /system/lib. If you're just testing you can put libsodium.so in the same folder as the dnscrypt-proxy binary and invoke dnscrypt-proxy as such: LD_LIBRARY_PATH=<path to current folder> ./dnscrypt-proxy

The prefix is weirdly set by the android-build script. You'll need to point dnscrypt to the resolver list manually (I recommend putting it somewhere on the system partition as a file on the [internal] SD card is too easy to change): https://github.com/jedisct1/dnscrypt-proxy/issues/123