diff --git a/build-ndk.sh b/build-ndk.sh index 170dfc7e..79427e1d 100755 --- a/build-ndk.sh +++ b/build-ndk.sh @@ -4,10 +4,13 @@ cp jni/Application.mk.9 jni/Application.mk ndk-build clean ndk-build +rm -rf src/main/assets/armeabi +rm -rf src/main/assets/armeabi-v7a +rm -rf src/main/assets/x86 mkdir -p src/main/assets/armeabi mkdir -p src/main/assets/armeabi-v7a mkdir -p src/main/assets/x86 -for app in ip6tables iptables pdnsd redsocks ss-tunnel +for app in pdnsd redsocks do mv libs/armeabi/$app src/main/assets/armeabi/ mv libs/armeabi-v7a/$app src/main/assets/armeabi-v7a/ @@ -20,10 +23,13 @@ mv libs src/main/jni cp jni/Application.mk.16 jni/Application.mk ndk-build clean ndk-build +rm -rf src/main/assets/api-16/armeabi +rm -rf src/main/assets/api-16/armeabi-v7a +rm -rf src/main/assets/api-16/x86 mkdir -p src/main/assets/api-16/armeabi mkdir -p src/main/assets/api-16/armeabi-v7a mkdir -p src/main/assets/api-16/x86 -for app in pdnsd redsocks ss-tunnel +for app in pdnsd redsocks do mv libs/armeabi/$app src/main/assets/api-16/armeabi/ mv libs/armeabi-v7a/$app src/main/assets/api-16/armeabi-v7a/ diff --git a/jni/Android.mk b/jni/Android.mk index 39af4ce1..0c4e5c1c 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -200,6 +200,27 @@ LOCAL_LDLIBS := -llog include $(BUILD_EXECUTABLE) +######################################################## +## shadowsocks tunnel library +######################################################## + +include $(CLEAR_VARS) + +SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c + +LOCAL_MODULE := ss-tunnel-jni +LOCAL_SRC_FILES := $(addprefix shadowsocks/src/, $(SHADOWSOCKS_SOURCES)) main-jni.cpp +LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL -DUDPRELAY_TUNNEL \ + -DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \ + -I$(LOCAL_PATH)/libev/ \ + -I$(LOCAL_PATH)/openssl/include + +LOCAL_STATIC_LIBRARIES := libev libcrypto + +LOCAL_LDLIBS := -llog + +include $(BUILD_SHARED_LIBRARY) + ######################################################## ## system ######################################################## @@ -314,13 +335,13 @@ openssl_subdirs := $(addprefix $(LOCAL_PATH)/openssl/,$(addsuffix /Android.mk, \ include $(openssl_subdirs) # Iptables -LOCAL_PATH := $(ROOT_PATH) -iptables_subdirs := $(addprefix $(LOCAL_PATH)/iptables/,$(addsuffix /Android.mk, \ - iptables \ - extensions \ - libiptc \ - )) -include $(iptables_subdirs) +# LOCAL_PATH := $(ROOT_PATH) +# iptables_subdirs := $(addprefix $(LOCAL_PATH)/iptables/,$(addsuffix /Android.mk, \ +# iptables \ +# extensions \ +# libiptc \ +# )) +# include $(iptables_subdirs) # Import cpufeatures $(call import-module,android/cpufeatures) diff --git a/src/main/java/com/github/shadowsocks/Core.java b/src/main/java/com/github/shadowsocks/Core.java index 7af88993..792638cd 100755 --- a/src/main/java/com/github/shadowsocks/Core.java +++ b/src/main/java/com/github/shadowsocks/Core.java @@ -41,11 +41,13 @@ package com.github.shadowsocks; public class Core { static { java.lang.System.loadLibrary("ss-local-jni"); + java.lang.System.loadLibrary("ss-tunnel-jni"); java.lang.System.loadLibrary("tun2socks-jni"); java.lang.System.loadLibrary("pdnsd-jni"); } public static native void sslocal(String[] cmd); + public static native void sstunnel(String[] cmd); public static native void tun2socks(String[] cmd); public static native void pdnsd(String[] cmd); } diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index e559a99f..fa60a21d 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -124,8 +124,7 @@ object Shadowsocks { val FEATRUE_PREFS = Array(Key.isGFWList, Key.isGlobalProxy, Key.proxyedApps, Key.isTrafficStat, Key.isUdpDns, Key.isAutoConnect) - val SYSTEM_EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS,Executable.SS_TUNNEL) - val EXECUTABLES = Array(Executable.IPTABLES) ++ SYSTEM_EXECUTABLES + val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS) // Helper functions def updateListPreference(pref: Preference, value: String) { @@ -329,8 +328,6 @@ class Shadowsocks ab.append("kill -9 `cat /data/data/com.github.shadowsocks/ss-tunnel.pid`") ab.append("kill -9 `cat /data/data/com.github.shadowsocks/tun2socks.pid`") ab.append("killall -9 pdnsd") - ab.append("killall -9 ss-local") - ab.append("killall -9 ss-tunnel") ab.append("killall -9 tun2socks") ab.append("rm /data/data/com.github.shadowsocks/pdnsd.conf") ab.append("rm /data/data/com.github.shadowsocks/pdnsd.cache") @@ -802,7 +799,7 @@ class Shadowsocks def copyToSystem() { val ab = new ArrayBuffer[String] ab.append("mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system") - for (executable <- Shadowsocks.SYSTEM_EXECUTABLES) { + for (executable <- Shadowsocks.EXECUTABLES) { ab.append("cp %s%s /system/bin/".format(Path.BASE, executable)) } ab.append("mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system") diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 3e350478..530300cc 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -134,7 +134,7 @@ class ShadowsocksNatService extends Service with BaseService { def startDnsDaemon() { val args = if (config.isUdpDns) { - ("ss-tunnel -b 127.0.0.1 -s '%s' -p '%d' -l '%d' -k '%s' -m '%s' -L 8.8.8.8:53 -u -f " + + ("ss-tunnel -b 127.0.0.1 -s %s -p %d -l %d -k %s -m %s -L 8.8.8.8:53 -u -f " + Path.BASE + "ss-tunnel.pid") .format(config.proxy, config.remotePort, 8153, config.sitekey, config.encMethod) } else { @@ -155,8 +155,14 @@ class ShadowsocksNatService extends Service with BaseService { } else { Path.BASE + args } + if (BuildConfig.DEBUG) Log.d(TAG, cmd) - Console.runRootCommand(cmd) + + if (config.isUdpDns) { + Core.sstunnel(cmd.split(" ")) + } else { + Console.runRootCommand(cmd) + } } def getVersionName: String = { @@ -308,10 +314,11 @@ class ShadowsocksNatService extends Service with BaseService { val ab = new ArrayBuffer[String] + ab.append("kill -9 `cat " + Path.BASE + "ss-tunnel.pid`") + ab.append("kill -9 `cat " + Path.BASE +"redsocks.pid`") ab.append("killall -9 redsocks") - ab.append("kill -9 `cat " + Path.BASE + "ss-tunnel.pid`") - ab.append("killall -9 ss-tunnel") + ab.append("kill -15 `cat " + Path.BASE + "pdnsd.pid`") ab.append("killall -15 pdnsd") @@ -319,7 +326,6 @@ class ShadowsocksNatService extends Service with BaseService { ab.clear() ab.append("kill -9 `cat " + Path.BASE + "ss-local.pid`") - ab.append("killall -9 ss-local") Console.runCommand(ab.toArray) }