Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3018fc090 | ||
|
|
f1f585b4d9 | ||
|
|
3653f73e0b | ||
|
|
d648910aac | ||
|
|
1e2f8c3bd3 | ||
|
|
b94c16c725 | ||
|
|
a03a6af5ba | ||
|
|
b9414c6b0a | ||
|
|
0d54d9cd9b | ||
|
|
8611a66cdc | ||
|
|
740dcc3ca9 | ||
|
|
730efbafc0 | ||
|
|
8b05476823 | ||
|
|
50b890423a | ||
|
|
fb63268895 | ||
|
|
41934f8909 | ||
|
|
bedc7a0443 | ||
|
|
537f790386 | ||
|
|
62afcf51d7 | ||
|
|
6c1ae68931 | ||
|
|
2703e91bbe | ||
|
|
8fba319db2 | ||
|
|
3e04734b9b | ||
|
|
fe33997494 | ||
|
|
86cd49d3e1 | ||
|
|
ff13792192 | ||
|
|
f36a8c784d | ||
|
|
57f8c0f307 | ||
|
|
601c227644 | ||
|
|
220143aee1 | ||
|
|
81a19c4a81 |
+17
-12
@@ -1,21 +1,26 @@
|
||||
language: scala
|
||||
scala:
|
||||
- 2.10.4
|
||||
language: android
|
||||
android:
|
||||
components:
|
||||
- tools
|
||||
- platform-tools
|
||||
- build-tools-21.1.1
|
||||
- android-21
|
||||
- extra-google-m2repository
|
||||
- extra-android-m2repository
|
||||
cache:
|
||||
- apt
|
||||
before_install:
|
||||
- echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
|
||||
- sudo apt-get update
|
||||
install:
|
||||
- sudo apt-get install -y libc6-dev-i386 lib32ncurses5-dev libx11-dev g++-multilib lib32z1-dev ccache
|
||||
- sudo apt-get install -y --force-yes sbt libc6-dev-i386 lib32ncurses5-dev libx11-dev g++-multilib lib32z1-dev ccache
|
||||
- export NDK_CCACHE=ccache
|
||||
- export ARCH=`uname -m`
|
||||
- wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
|
||||
- tar xf android-sdk_r23.0.2-linux.tgz
|
||||
- wget http://dl.google.com/android/ndk/android-ndk-r9d-linux-${ARCH}.tar.bz2
|
||||
- tar xf android-ndk-r9d-linux-${ARCH}.tar.bz2
|
||||
- export ANDROID_NDK_HOME=`pwd`/android-ndk-r9d
|
||||
- export ANDROID_HOME=`pwd`/android-sdk-linux
|
||||
- wget http://dl.google.com/android/ndk/android-ndk-r10d-linux-${ARCH}.bin
|
||||
- chmod +x android-ndk-r10d-linux-${ARCH}.bin
|
||||
- ./android-ndk-r10d-linux-${ARCH}.bin -y | grep gcc
|
||||
- export ANDROID_NDK_HOME=`pwd`/android-ndk-r10d
|
||||
- export PATH=${PATH}:${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
|
||||
- echo "y" | android update sdk --filter tools,platform-tools,build-tools-21.0.1,android-21,extra-google-m2repository --no-ui --no-https -a
|
||||
- echo "y" | android update sdk --filter extra-android-m2repository --no-ui --no-https -a
|
||||
script:
|
||||
- cp local.properties.travis local.properties
|
||||
- ./build.sh
|
||||
|
||||
@@ -40,6 +40,7 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite
|
||||
|
||||
* 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-21.0.1,android-21,extra-google-m2repository --no-ui --no-https -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
-4488
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.shadowsocks"
|
||||
android:versionCode="100"
|
||||
android:versionName="2.6.2">
|
||||
android:versionCode="103"
|
||||
android:versionName="2.6.5">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
@@ -65,7 +65,8 @@
|
||||
<activity
|
||||
android:name=".AppManager"
|
||||
android:theme="@style/Theme.AppManager"
|
||||
android:label="@string/app_name">
|
||||
android:label="@string/app_name"
|
||||
android:parentActivityName=".Shadowsocks">
|
||||
<intent-filter>
|
||||
<action android:name="com.github.shadowsocks.AppManager"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
|
||||
+26
-4
@@ -160,6 +160,25 @@ LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libcork/,$(CORK_SOURCE))
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
########################################################
|
||||
## libudns
|
||||
########################################################
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
UDNS_SOURCES := udns_dn.c udns_dntosp.c udns_parse.c udns_resolver.c udns_init.c \
|
||||
udns_misc.c udns_XtoX.c \
|
||||
udns_rr_a.c udns_rr_ptr.c udns_rr_mx.c udns_rr_txt.c udns_bl.c \
|
||||
udns_rr_srv.c udns_rr_naptr.c udns_codes.c udns_jran.c
|
||||
|
||||
LOCAL_MODULE := libudns
|
||||
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||
-DHAVE_DECL_INET_NTOP
|
||||
|
||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libudns/,$(UDNS_SOURCES))
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
########################################################
|
||||
## libev
|
||||
########################################################
|
||||
@@ -215,7 +234,7 @@ include $(BUILD_EXECUTABLE)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c acl.c
|
||||
SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c acl.c
|
||||
|
||||
LOCAL_MODULE := ss-local
|
||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||
@@ -223,12 +242,13 @@ LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL \
|
||||
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
|
||||
-I$(LOCAL_PATH)/libev/ \
|
||||
-I$(LOCAL_PATH)/openssl/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libipset/include
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libipset libcork libsodium
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libipset libcork libudns libsodium
|
||||
|
||||
LOCAL_LDLIBS := -llog
|
||||
|
||||
@@ -240,18 +260,20 @@ include $(BUILD_EXECUTABLE)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c
|
||||
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c
|
||||
|
||||
LOCAL_MODULE := ss-tunnel
|
||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||
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)/shadowsocks-libev/libudns \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
|
||||
-I$(LOCAL_PATH)/openssl/include
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium libcork libudns
|
||||
|
||||
LOCAL_LDLIBS := -llog
|
||||
|
||||
|
||||
Submodule src/main/jni/shadowsocks-libev updated: a772aba1f4...02050e49e7
@@ -10,13 +10,13 @@
|
||||
<string name="profile">配置文件</string>
|
||||
<string name="profile_summary">配置文件名称</string>
|
||||
<string name="proxy">服务器</string>
|
||||
<string name="proxy_summary">您的影梭服务器的地址</string>
|
||||
<string name="proxy_summary">远程服务器的地址</string>
|
||||
<string name="remote_port">远程端口</string>
|
||||
<string name="remote_port_summary">您的影梭服务器的端口号</string>
|
||||
<string name="remote_port_summary">远程服务器的端口号</string>
|
||||
<string name="port">本地端口</string>
|
||||
<string name="port_summary">您的影梭客户端的端口号</string>
|
||||
<string name="port_summary">本地客户端的端口号</string>
|
||||
<string name="sitekey">密码</string>
|
||||
<string name="sitekey_summary">您的影梭服务器的密码</string>
|
||||
<string name="sitekey_summary">远程服务器的密码</string>
|
||||
<string name="enc_method">加密方法</string>
|
||||
<string name="feature_cat">功能设置</string>
|
||||
<string name="http_proxy">HTTP 代理服务器</string>
|
||||
|
||||
+187
-9686
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Executable → Regular
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Executable → Regular
+4
-4
@@ -14,13 +14,13 @@
|
||||
<string name="profile">Profile</string>
|
||||
<string name="profile_summary">Profile name</string>
|
||||
<string name="proxy">Server</string>
|
||||
<string name="proxy_summary">Hostname or IP Address of your Shadowsocks server</string>
|
||||
<string name="proxy_summary">Hostname or IP of the remote server</string>
|
||||
<string name="remote_port">Remote Port</string>
|
||||
<string name="remote_port_summary">Port number of your Shadowsocks server</string>
|
||||
<string name="remote_port_summary">Port number of the remote server</string>
|
||||
<string name="port">Local Port</string>
|
||||
<string name="port_summary">Port number of your Shadowsocks client</string>
|
||||
<string name="port_summary">Port number of the local server</string>
|
||||
<string name="sitekey">Password</string>
|
||||
<string name="sitekey_summary">Password of your Shadowsocks server</string>
|
||||
<string name="sitekey_summary">Password of the remote server</string>
|
||||
<string name="enc_method">Encrypt Method</string>
|
||||
|
||||
<!-- feature category -->
|
||||
|
||||
Executable → Regular
@@ -259,6 +259,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
||||
}
|
||||
Toast.makeText(this, R.string.action_import_err, Toast.LENGTH_SHORT).show()
|
||||
return false
|
||||
case android.R.id.home =>
|
||||
navigateUpTo(getParentActivityIntent)
|
||||
return true
|
||||
}
|
||||
super.onOptionsItemSelected(item)
|
||||
}
|
||||
@@ -274,7 +277,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
||||
|
||||
handler = new Handler()
|
||||
|
||||
getActionBar.setTitle(R.string.proxied_help)
|
||||
val actionBar = getActionBar()
|
||||
actionBar.setTitle(R.string.proxied_help)
|
||||
actionBar.setDisplayHomeAsUpEnabled(true)
|
||||
this.setContentView(R.layout.layout_apps)
|
||||
this.overlay = View.inflate(this, R.layout.overlay, null).asInstanceOf[TextView]
|
||||
getWindowManager.addView(overlay, new
|
||||
|
||||
@@ -321,7 +321,7 @@ class Shadowsocks
|
||||
}
|
||||
}
|
||||
|
||||
private def crash_recovery() {
|
||||
private def crashRecovery() {
|
||||
val cmd = new ArrayBuffer[String]()
|
||||
|
||||
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) {
|
||||
@@ -849,7 +849,7 @@ class Shadowsocks
|
||||
|
||||
def reset() {
|
||||
|
||||
crash_recovery()
|
||||
crashRecovery()
|
||||
|
||||
copyAssets(System.getABI)
|
||||
|
||||
|
||||
@@ -348,7 +348,7 @@ class ShadowsocksNatService extends Service with BaseService {
|
||||
actionIntent)
|
||||
|
||||
if (visible)
|
||||
builder.setPriority(NotificationCompat.PRIORITY_MAX)
|
||||
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
else
|
||||
builder.setPriority(NotificationCompat.PRIORITY_MIN)
|
||||
|
||||
@@ -513,31 +513,33 @@ class ShadowsocksNatService extends Service with BaseService {
|
||||
}
|
||||
registerReceiver(closeReceiver, filter)
|
||||
|
||||
val screenFilter = new IntentFilter()
|
||||
screenFilter.addAction(Intent.ACTION_SCREEN_ON)
|
||||
screenFilter.addAction(Intent.ACTION_SCREEN_OFF)
|
||||
screenFilter.addAction(Intent.ACTION_USER_PRESENT)
|
||||
lockReceiver = new BroadcastReceiver() {
|
||||
def onReceive(context: Context, intent: Intent) {
|
||||
if (getState == State.CONNECTED) {
|
||||
val action = intent.getAction
|
||||
if (action == Intent.ACTION_SCREEN_OFF) {
|
||||
notifyForegroundAlert(getString(R.string.forward_success),
|
||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), false)
|
||||
} else if (action == Intent.ACTION_SCREEN_ON) {
|
||||
val keyGuard = getSystemService(Context.KEYGUARD_SERVICE).asInstanceOf[KeyguardManager]
|
||||
if (!keyGuard.inKeyguardRestrictedInputMode) {
|
||||
if (Utils.isLollipopOrAbove) {
|
||||
val screenFilter = new IntentFilter()
|
||||
screenFilter.addAction(Intent.ACTION_SCREEN_ON)
|
||||
screenFilter.addAction(Intent.ACTION_SCREEN_OFF)
|
||||
screenFilter.addAction(Intent.ACTION_USER_PRESENT)
|
||||
lockReceiver = new BroadcastReceiver() {
|
||||
def onReceive(context: Context, intent: Intent) {
|
||||
if (getState == State.CONNECTED) {
|
||||
val action = intent.getAction
|
||||
if (action == Intent.ACTION_SCREEN_OFF) {
|
||||
notifyForegroundAlert(getString(R.string.forward_success),
|
||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), false)
|
||||
} else if (action == Intent.ACTION_SCREEN_ON) {
|
||||
val keyGuard = getSystemService(Context.KEYGUARD_SERVICE).asInstanceOf[KeyguardManager]
|
||||
if (!keyGuard.inKeyguardRestrictedInputMode) {
|
||||
notifyForegroundAlert(getString(R.string.forward_success),
|
||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
||||
}
|
||||
} else if (action == Intent.ACTION_USER_PRESENT) {
|
||||
notifyForegroundAlert(getString(R.string.forward_success),
|
||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
||||
}
|
||||
} else if (action == Intent.ACTION_USER_PRESENT) {
|
||||
notifyForegroundAlert(getString(R.string.forward_success),
|
||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
registerReceiver(lockReceiver, screenFilter)
|
||||
}
|
||||
registerReceiver(lockReceiver, screenFilter)
|
||||
|
||||
// send event
|
||||
application.tracker.send(new HitBuilders.EventBuilder()
|
||||
@@ -606,9 +608,12 @@ class ShadowsocksNatService extends Service with BaseService {
|
||||
unregisterReceiver(closeReceiver)
|
||||
closeReceiver = null
|
||||
}
|
||||
if (lockReceiver != null) {
|
||||
unregisterReceiver(lockReceiver)
|
||||
lockReceiver = null
|
||||
|
||||
if (Utils.isLollipopOrAbove) {
|
||||
if (lockReceiver != null) {
|
||||
unregisterReceiver(lockReceiver)
|
||||
lockReceiver = null
|
||||
}
|
||||
}
|
||||
|
||||
// send event
|
||||
|
||||
@@ -58,7 +58,9 @@ class ShadowsocksRunnerActivity extends Activity {
|
||||
override def onServiceConnected(name: ComponentName, service: IBinder) {
|
||||
bgService = IShadowsocksService.Stub.asInterface(service)
|
||||
handler.postDelayed(new Runnable() {
|
||||
override def run() = startBackgroundService()
|
||||
override def run() {
|
||||
if (bgService != null) startBackgroundService()
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
override def onServiceDisconnected(name: ComponentName) {
|
||||
|
||||
@@ -52,17 +52,21 @@ object Parser {
|
||||
if (uri.getScheme == Scheme.SS) {
|
||||
val encoded = data.replace(Scheme.SS + "://", "")
|
||||
val content = new String(Base64.decode(encoded, Base64.NO_PADDING), "UTF-8")
|
||||
val info = content.split('@')
|
||||
val encinfo = info(0).split(':')
|
||||
val serverinfo = info(1).split(':')
|
||||
val methodIdx = content.indexOf(':')
|
||||
val passwordIdx = content.lastIndexOf('@')
|
||||
val hostIdx = content.lastIndexOf(':')
|
||||
val method = content.substring(0, methodIdx)
|
||||
val password = content.substring(methodIdx + 1, passwordIdx)
|
||||
val host = content.substring(passwordIdx + 1, hostIdx)
|
||||
val port = content.substring(hostIdx + 1)
|
||||
|
||||
val profile = new Profile
|
||||
profile.name = serverinfo(0)
|
||||
profile.host = serverinfo(0)
|
||||
profile.remotePort = serverinfo(1).toInt
|
||||
profile.name = host
|
||||
profile.host = host
|
||||
profile.remotePort = port.toInt
|
||||
profile.localPort = 1080
|
||||
profile.method = encinfo(0)
|
||||
profile.password = encinfo(1)
|
||||
profile.method = method.toLowerCase
|
||||
profile.password = password
|
||||
return Some(profile)
|
||||
}
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user