diff --git a/.gitignore b/.gitignore index 3dd83e34..9ea44594 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ gen_* *.class *.o local.sbt +.deps #Intellij IDEA *.iml @@ -27,7 +28,5 @@ out/ src/main/obj src/main/libs src/main/assets/armeabi-v7a/* -!src/main/assets/armeabi-v7a/kcptun src/main/assets/x86/* -!src/main/assets/x86/kcptun jni/Application.mk diff --git a/.gitmodules b/.gitmodules index 0d7fb324..0e932ce4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -24,3 +24,9 @@ path = src/main/jni/pdnsd url = https://github.com/shadowsocks/pdnsd.git branch = shadowsocks-android +[submodule "kcptun/kcptun"] + path = kcptun/kcptun + url = https://github.com/shadowsocks/kcptun +[submodule "kcptun/go"] + path = kcptun/go + url = https://github.com/shadowsocks/go diff --git a/.travis.yml b/.travis.yml index 94398a1d..1f05bad5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ install: - ./travis-ci/setup.sh - export NDK_CCACHE=ccache - export ARCH=`uname -m` + - export GOROOT_BOOTSTRAP=$HOME/.android/go - export ANDROID_NDK_HOME=$HOME/.android/android-ndk-r12b - export ANDROID_HOME=$HOME/.android/android-sdk-linux - export PATH=${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${PATH} diff --git a/README.md b/README.md index 26237309..d7a45d87 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala. * JDK 1.8 * SBT 0.13.0+ +* GO 1.4+ * Android SDK r25+ * Android NDK r12b+ @@ -19,6 +20,7 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala. * Set environment variable `ANDROID_HOME` to `/path/to/android-sdk` * Set environment variable `ANDROID_NDK_HOME` to `/path/to/android-ndk` +* Set environment variable `GOROOT_BOOTSTRAP` to `/path/to/go` * Create your key following the instructions at https://developer.android.com/studio/publish/app-signing.html * Put your key in ~/.keystore * Create `local.properties` from `local.properties.example` with your own key information @@ -26,33 +28,11 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala. ```bash git submodule update --init - + # Build the App sbt native-build clean android:package-release ``` -#### BUILD on Mac OS X (with HomeBrew) - -* Install Android SDK and NDK by run `brew install android-ndk android-sdk` -* Add `export ANDROID_HOME=/usr/local/Cellar/android-sdk/$version` to your .bashrc , then reopen the shell to load it. -* Add `export ANDROID_NDK_HOME=/usr/local/Cellar/android-ndk/$version` to your .bashrc , then reopen the shell to load it. -* echo "y" | android update sdk --filter tools,platform-tools,build-tools-23.0.2,android-23,extra-google-m2repository --no-ui -a -* echo "y" | android update sdk --filter extra-android-m2repository --no-ui --no-https -a -* Create your key following the instructions at http://developer.android.com/guide/publishing/app-signing.html#cert -* Put your key in ~/.keystore -* Create `local.properties` from `local.properties.example` with your own key information . -* Invoke the building like this - -```bash - git submodule update --init - - # Build native binaries - ./build.sh - - # Build the apk - sbt clean android:package-release -``` - ## OPEN SOURCE LICENSES * shadowsocks-libev: [GPLv3](https://github.com/shadowsocks/shadowsocks-libev/blob/master/LICENSE) diff --git a/build.sh b/build.sh index 7bd7c34f..9d901459 100755 --- a/build.sh +++ b/build.sh @@ -4,6 +4,10 @@ function try () { "$@" || exit -1 } +pushd kcptun +try ./make.bash +popd + try pushd src/main # Build diff --git a/kcptun/go b/kcptun/go new file mode 160000 index 00000000..3549a9d3 --- /dev/null +++ b/kcptun/go @@ -0,0 +1 @@ +Subproject commit 3549a9d3740b5cd9d284cdad1d101bd14888cc85 diff --git a/kcptun/kcptun b/kcptun/kcptun new file mode 160000 index 00000000..eced3949 --- /dev/null +++ b/kcptun/kcptun @@ -0,0 +1 @@ +Subproject commit eced3949b2f33e1801aec6124a01922482358f3e diff --git a/kcptun/make.bash b/kcptun/make.bash new file mode 100755 index 00000000..cfd057ce --- /dev/null +++ b/kcptun/make.bash @@ -0,0 +1,66 @@ +#!/bin/bash + +function try () { +"$@" || exit -1 +} + +[ -z "$ANDROID_NDK_HOME" ] && ANDROID_NDK_HOME=~/android-ndk-r12b + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +DEPS=$DIR/.deps +ANDROID_ARM_TOOLCHAIN=$DEPS/android-toolchain-16-arm +ANDROID_X86_TOOLCHAIN=$DEPS/android-toolchain-16-x86 + +ANDROID_ARM_CC=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-gcc +ANDROID_ARM_STRIP=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-strip + +ANDROID_X86_CC=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-gcc +ANDROID_X86_STRIP=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-strip + + +if [ ! -d "$DEPS" ]; then + mkdir -p $DEPS +fi + +if [ ! -d "$ANDROID_ARM_TOOLCHAIN" ]; then + echo "Make standalone toolchain for ARM arch" + $ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py --arch arm \ + --api 16 --install-dir $ANDROID_ARM_TOOLCHAIN +fi + +if [ ! -d "$ANDROID_X86_TOOLCHAIN" ]; then + echo "Make standalone toolchain for X86 arch" + $ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py --arch arm \ + $ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py --arch x86 \ + --api 16 --install-dir $ANDROID_X86_TOOLCHAIN +fi + +if [ ! -d "$DIR/go/bin" ]; then + echo "Build the custom go" + + pushd $DIR/go/src + try ./make.bash + popd +fi + +export GOROOT=$DIR/go +export GOPATH=$DIR/kcptun +export PATH=$GOROOT/bin:$PATH + +pushd kcptun/client + +echo "Get dependences for kcptun" +go get + +echo "Cross compile kcptun for arm" +try env CGO_ENABLED=1 CC=$ANDROID_ARM_CC GOOS=android GOARCH=arm GOARM=7 go build +try $ANDROID_ARM_STRIP client +try mv client $DIR/../src/main/assets/armeabi-v7a/kcptun + +echo "Cross compile kcptun for x86" +try env CGO_ENABLED=1 CC=$ANDROID_X86_CC GOOS=android GOARCH=386 go build +try $ANDROID_X86_STRIP client +try mv client $DIR/../src/main/assets/x86/kcptun +popd + +echo "Successfully build kcptun" diff --git a/src/main/assets/armeabi-v7a/kcptun b/src/main/assets/armeabi-v7a/kcptun deleted file mode 100755 index d1dbb555..00000000 Binary files a/src/main/assets/armeabi-v7a/kcptun and /dev/null differ diff --git a/src/main/assets/x86/kcptun b/src/main/assets/x86/kcptun deleted file mode 100755 index 842fc7bc..00000000 Binary files a/src/main/assets/x86/kcptun and /dev/null differ diff --git a/travis-ci/setup.sh b/travis-ci/setup.sh index 7511641d..0d92be09 100755 --- a/travis-ci/setup.sh +++ b/travis-ci/setup.sh @@ -1,10 +1,17 @@ #!/bin/bash export ARCH=`uname -m` +export GOROOT_BOOTSTRAP=.android/go export ANDROID_NDK_HOME=$HOME/.android/android-ndk-r12b export ANDROID_HOME=$HOME/.android/android-sdk-linux export PATH=${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${PATH} +if [ ! -d "$GOROOT_BOOTSTRAP" ]; then + wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz + tar xvf go1.6.3.linux-amd64.tar.gz + mv go .android/ +fi + if [ ! -d "$ANDROID_HOME" ]; then mkdir -p $ANDROID_HOME pushd $HOME/.android