Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63713b1eea | ||
|
|
dd6cd3977d | ||
|
|
a671ae98b8 | ||
|
|
7531eb5f5f | ||
|
|
dca3be8eff | ||
|
|
a5d620ab02 | ||
|
|
0e7dbde4d9 | ||
|
|
7d0277324c | ||
|
|
08d99caf1c | ||
|
|
0a400ef5f9 | ||
|
|
cda3650c43 | ||
|
|
b1c19f8f03 | ||
|
|
f7d422da2b | ||
|
|
10725c39cb | ||
|
|
4b5c94022b | ||
|
|
6afc3f80be | ||
|
|
a02d19bba0 | ||
|
|
984e75ae99 | ||
|
|
3cc1a1602e | ||
|
|
72305c5f60 | ||
|
|
4303c1cd0c | ||
|
|
5dad89b71e | ||
|
|
109d4728f4 | ||
|
|
53b9c1f4af | ||
|
|
23fc7e9134 | ||
|
|
e73fc9f881 | ||
|
|
941393cab4 | ||
|
|
a6e87cf666 | ||
|
|
4817539ca2 | ||
|
|
03c857536d | ||
|
|
14038cd152 | ||
|
|
935314a1c5 | ||
|
|
7263bf11a4 | ||
|
|
81295e4a51 |
+3
-3
@@ -9,9 +9,6 @@
|
||||
path = src/main/jni/libancillary
|
||||
url = https://github.com/shadowsocks/libancillary.git
|
||||
branch = shadowsocks-android
|
||||
[submodule "src/main/jni/openssl"]
|
||||
path = src/main/jni/openssl
|
||||
url = https://github.com/shadowsocks/openssl-android.git
|
||||
[submodule "src/main/jni/libevent"]
|
||||
path = src/main/jni/libevent
|
||||
url = https://github.com/shadowsocks/libevent.git
|
||||
@@ -30,3 +27,6 @@
|
||||
[submodule "kcptun/go"]
|
||||
path = kcptun/go
|
||||
url = https://github.com/shadowsocks/go
|
||||
[submodule "src/main/jni/mbedtls"]
|
||||
path = src/main/jni/mbedtls
|
||||
url = https://github.com/ARMmbed/mbedtls
|
||||
|
||||
+34
-23
@@ -1,19 +1,16 @@
|
||||
language: scala
|
||||
language: android
|
||||
|
||||
jdk:
|
||||
- oraclejdk8
|
||||
|
||||
sudo: false
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-multilib
|
||||
- g++-multilib
|
||||
- libstdc++6:i386
|
||||
- libgcc1:i386
|
||||
- zlib1g:i386
|
||||
- libncurses5:i386
|
||||
env:
|
||||
global:
|
||||
- NDK_VERSION=r12b
|
||||
- NDK_CCACHE=ccache
|
||||
- GOROOT_BOOTSTRAP=$GOROOT
|
||||
- ANDROID_NDK_HOME=$HOME/.android/android-ndk-${NDK_VERSION}
|
||||
- SBTPATH=$HOME/.sbt
|
||||
- PATH=${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${PATH}
|
||||
|
||||
scala:
|
||||
- 2.11.8
|
||||
@@ -24,18 +21,32 @@ before_cache:
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.ivy2/cache
|
||||
- $HOME/.sbt/boot
|
||||
- $HOME/.ivy2
|
||||
- $HOME/.sbt
|
||||
|
||||
android:
|
||||
components:
|
||||
- tools
|
||||
- build-tools-24.0.1
|
||||
- extra-google-m2repository
|
||||
|
||||
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}
|
||||
- cp local.properties.travis local.properties
|
||||
- >
|
||||
if [ ! -d "$ANDROID_NDK_HOME" ]; then
|
||||
mkdir -p $ANDROID_NDK_HOME;
|
||||
pushd $HOME/.android;
|
||||
export ARCH=`uname -m`;
|
||||
wget -q http://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-${ARCH}.zip;
|
||||
unzip -q android-ndk-${NDK_VERSION}-linux-${ARCH}.zip;
|
||||
popd;
|
||||
fi
|
||||
- >
|
||||
if [ ! -f "$SBTPATH/sbt" ]; then
|
||||
pushd $SBTPATH;
|
||||
wget -q https://raw.githubusercontent.com/paulp/sbt-extras/master/sbt;
|
||||
chmod a+x sbt;
|
||||
popd;
|
||||
fi
|
||||
|
||||
script:
|
||||
- sbt native-build android:package-release
|
||||
- $SBTPATH/sbt native-build android:package-debug
|
||||
|
||||
@@ -12,8 +12,10 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala.
|
||||
|
||||
* JDK 1.8
|
||||
* SBT 0.13.0+
|
||||
* GO 1.4+
|
||||
* Android SDK r25+
|
||||
* Go 1.4+
|
||||
* Android SDK
|
||||
- Build Tools 24+ (as required by [`sbt-android`](https://github.com/scala-android/sbt-android))
|
||||
- Google Repository (see `build.sbt` for version)
|
||||
* Android NDK r12b+
|
||||
|
||||
### BUILD
|
||||
@@ -42,10 +44,11 @@ A [shadowsocks](http://shadowsocks.org) client for Android, written in Scala.
|
||||
* pdnsd: [GPLv3](https://github.com/shadowsocks/shadowsocks-android/blob/master/src/main/jni/pdnsd/COPYING)
|
||||
* libev: [GPLv2](https://github.com/shadowsocks/shadowsocks-android/blob/master/src/main/jni/libev/LICENSE)
|
||||
* libevent: [BSD](https://github.com/shadowsocks/libevent/blob/master/LICENSE)
|
||||
* kcptun: [MIT](https://github.com/xtaci/kcptun)
|
||||
|
||||
### LICENSE
|
||||
|
||||
Copyright (C) 2016 by Max Lv <<max.c.lv@gmail.com>> <br/>
|
||||
Copyright (C) 2016 by Max Lv <<max.c.lv@gmail.com>>
|
||||
Copyright (C) 2016 by Mygod Studio <<mygodstudio@gmail.com>>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
||||
@@ -28,8 +28,6 @@ dexMaxHeap in Android := "4g"
|
||||
|
||||
resolvers += Resolver.jcenterRepo
|
||||
|
||||
resolvers += "JRAF" at "http://JRAF.org/static/maven/2"
|
||||
|
||||
useSupportVectors
|
||||
|
||||
libraryDependencies ++= Seq(
|
||||
@@ -37,16 +35,16 @@ libraryDependencies ++= Seq(
|
||||
"com.github.kevinsawicki" % "http-request" % "6.0",
|
||||
"eu.chainfire" % "libsuperuser" % "1.0.0.201607041850",
|
||||
"net.glxn.qrgen" % "android" % "2.0",
|
||||
"com.google.android.gms" % "play-services-ads" % "9.2.1",
|
||||
"com.google.android.gms" % "play-services-analytics" % "9.2.1",
|
||||
"com.android.support" % "design" % "24.1.0",
|
||||
"com.android.support" % "gridlayout-v7" % "24.1.0",
|
||||
"com.android.support" % "cardview-v7" % "24.1.0",
|
||||
"com.google.android.gms" % "play-services-ads" % "9.4.0",
|
||||
"com.google.android.gms" % "play-services-analytics" % "9.4.0",
|
||||
"com.android.support" % "design" % "24.1.1",
|
||||
"com.android.support" % "gridlayout-v7" % "24.1.1",
|
||||
"com.android.support" % "cardview-v7" % "24.1.1",
|
||||
"com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01",
|
||||
"com.j256.ormlite" % "ormlite-android" % "4.48",
|
||||
"com.j256.ormlite" % "ormlite-android" % "5.0",
|
||||
"com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2",
|
||||
"com.github.clans" % "fab" % "1.6.4",
|
||||
"me.dm7.barcodescanner" % "zxing" % "1.8.4"
|
||||
"me.dm7.barcodescanner" % "zxing" % "1.9"
|
||||
)
|
||||
|
||||
proguardVersion in Android := "5.2.1"
|
||||
@@ -55,12 +53,8 @@ proguardCache in Android := Seq()
|
||||
|
||||
proguardOptions in Android ++= Seq(
|
||||
"-keep class com.github.shadowsocks.System { *; }",
|
||||
"-dontwarn com.google.android.gms.**",
|
||||
"-keep class com.google.android.gms.**",
|
||||
"-dontnote com.google.android.gms.internal.**",
|
||||
"-dontnote com.j256.ormlite.**",
|
||||
"-dontnote me.dm7.barcodescannerview.**",
|
||||
"-dontnote org.xbill.**",
|
||||
"-dontwarn com.google.android.gms.internal.**",
|
||||
"-dontwarn com.j256.ormlite.**",
|
||||
"-dontwarn org.xbill.**")
|
||||
|
||||
lazy val nativeBuild = TaskKey[Unit]("native-build", "Build native executables")
|
||||
|
||||
@@ -7,13 +7,16 @@ function try () {
|
||||
# Build native binaries
|
||||
pushd src/main
|
||||
try $ANDROID_NDK_HOME/ndk-build -j8
|
||||
# copy executables
|
||||
|
||||
rm -rf assets/armeabi-v7a
|
||||
rm -rf assets/x86
|
||||
mkdir -p assets/armeabi-v7a
|
||||
mkdir -p assets/x86
|
||||
|
||||
#copy executables
|
||||
for app in pdnsd redsocks ss-local ss-tunnel tun2socks
|
||||
do
|
||||
rm -f assets/armeabi-v7a
|
||||
rm -f assets/x86
|
||||
mkdir -p assets/armeabi-v7a
|
||||
mkdir -p assets/x86
|
||||
echo $app
|
||||
try mv libs/armeabi-v7a/$app assets/armeabi-v7a/
|
||||
try mv libs/x86/$app assets/x86/
|
||||
done
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
cd ${1}
|
||||
travis-artifacts upload --path ${2} --target-path nightly
|
||||
+1
-1
Submodule kcptun/go updated: 3549a9d374...70f0438db8
+1
-1
Submodule kcptun/kcptun updated: eced3949b2...e8349a3063
+6
-3
@@ -43,21 +43,24 @@ if [ ! -d "$DIR/go/bin" ]; then
|
||||
fi
|
||||
|
||||
export GOROOT=$DIR/go
|
||||
export GOPATH=$DEPS
|
||||
export GOPATH=$DEPS/gopath
|
||||
export GOBIN=$GOPATH/bin
|
||||
mkdir -p $GOBIN
|
||||
export PATH=$GOROOT/bin:$PATH
|
||||
|
||||
pushd kcptun/client
|
||||
|
||||
echo "Get dependences for kcptun"
|
||||
go get -u github.com/xtaci/kcp-go
|
||||
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 env CGO_ENABLED=1 CC=$ANDROID_ARM_CC GOOS=android GOARCH=arm GOARM=7 go build -ldflags="-s -w"
|
||||
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 env CGO_ENABLED=1 CC=$ANDROID_X86_CC GOOS=android GOARCH=386 go build -ldflags="-s -w"
|
||||
try $ANDROID_X86_STRIP client
|
||||
try mv client $DIR/../src/main/assets/x86/kcptun
|
||||
popd
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
key.alias: travis
|
||||
key.store: travis.keystore
|
||||
key.store.password: travis
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.10")
|
||||
addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.12")
|
||||
|
||||
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.10")
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools" package="com.github.shadowsocks"
|
||||
android:versionCode="143"
|
||||
android:versionName="3.0.1">
|
||||
android:versionCode="146"
|
||||
android:versionName="3.0.4">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
||||
@@ -296,6 +296,7 @@ along with this program. If not, see <a href="http://www.gnu.org/licenses/">http
|
||||
<li>pdnsd: <a href="https://github.com/shadowsocks/shadowsocks-android/blob/master/src/main/jni/pdnsd/COPYING">GPLv3</a></li>
|
||||
<li>libev: <a href="https://github.com/shadowsocks/libevent/blob/shadowsocks-android/LICENSE">GPLv2</a></li>
|
||||
<li>libevent: <a href="https://github.com/shadowsocks/shadowsocks-android/blob/master/src/main/jni/libevent/LICENSE">BSD</a></li>
|
||||
<li>kcptun: <a href="https://github.com/xtaci/kcptun/commits/master/LICENSE.md">MIT</a></li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
|
||||
+24
-14
@@ -222,7 +222,7 @@ include $(CLEAR_VARS)
|
||||
LIBEVENT_SOURCES := \
|
||||
buffer.c \
|
||||
bufferevent.c bufferevent_filter.c \
|
||||
bufferevent_openssl.c bufferevent_pair.c bufferevent_ratelim.c \
|
||||
bufferevent_pair.c bufferevent_ratelim.c \
|
||||
bufferevent_sock.c epoll.c \
|
||||
epoll_sub.c evdns.c event.c \
|
||||
event_tagging.c evmap.c \
|
||||
@@ -236,7 +236,6 @@ LOCAL_MODULE := event
|
||||
LOCAL_SRC_FILES := $(addprefix libevent/, $(LIBEVENT_SOURCES))
|
||||
LOCAL_CFLAGS := -O2 -I$(LOCAL_PATH)/libevent \
|
||||
-I$(LOCAL_PATH)/libevent/include \
|
||||
-I$(LOCAL_PATH)/openssl/include
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
@@ -387,11 +386,11 @@ SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c netutils.c j
|
||||
LOCAL_MODULE := ss-local
|
||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_LOCAL \
|
||||
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
|
||||
-DUSE_CRYPTO_MBEDTLS -DANDROID -DHAVE_CONFIG_H \
|
||||
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
||||
-I$(LOCAL_PATH)/include \
|
||||
-I$(LOCAL_PATH)/libancillary \
|
||||
-I$(LOCAL_PATH)/openssl/include \
|
||||
-I$(LOCAL_PATH)/mbedtls/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||
@@ -400,7 +399,7 @@ LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_LOCAL \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libev \
|
||||
-I$(LOCAL_PATH)/include/shadowsocks-libev
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libipset libcork libudns libsodium libancillary
|
||||
LOCAL_STATIC_LIBRARIES := libev libmbedtls libipset libcork libudns libsodium libancillary
|
||||
|
||||
LOCAL_LDLIBS := -llog
|
||||
|
||||
@@ -417,7 +416,7 @@ SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.c
|
||||
LOCAL_MODULE := ss-tunnel
|
||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_TUNNEL \
|
||||
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
||||
-DUSE_CRYPTO_MBEDTLS -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
||||
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
||||
-I$(LOCAL_PATH)/libancillary \
|
||||
-I$(LOCAL_PATH)/include \
|
||||
@@ -425,11 +424,11 @@ LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_TUNNEL \
|
||||
-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 \
|
||||
-I$(LOCAL_PATH)/mbedtls/include \
|
||||
-I$(LOCAL_PATH)/shadowsocks-libev/libev \
|
||||
-I$(LOCAL_PATH)/include/shadowsocks-libev
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium libcork libudns libancillary
|
||||
LOCAL_STATIC_LIBRARIES := libev libmbedtls libsodium libcork libudns libancillary
|
||||
|
||||
LOCAL_LDLIBS := -llog
|
||||
|
||||
@@ -546,12 +545,23 @@ LOCAL_SRC_FILES := $(addprefix badvpn/, $(TUN2SOCKS_SOURCES))
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
# OpenSSL
|
||||
openssl_subdirs := $(addprefix $(LOCAL_PATH)/openssl/,$(addsuffix /Android.mk, \
|
||||
crypto \
|
||||
ssl \
|
||||
))
|
||||
include $(openssl_subdirs)
|
||||
########################################################
|
||||
## mbed TLS
|
||||
########################################################
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE:= mbedtls
|
||||
|
||||
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/mbedtls/include
|
||||
|
||||
MBEDTLS_SOURCES := $(wildcard $(LOCAL_PATH)/mbedtls/library/*.c)
|
||||
|
||||
LOCAL_SRC_FILES := $(MBEDTLS_SOURCES:$(LOCAL_PATH)/%=%)
|
||||
|
||||
LOCAL_LDLIBS := -ldl -llog
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
# Import cpufeatures
|
||||
$(call import-module,android/cpufeatures)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_ABI := armeabi-v7a x86
|
||||
APP_PLATFORM := android-16
|
||||
APP_STL := stlport_static
|
||||
NDK_TOOLCHAIN_VERSION := clang
|
||||
NDK_TOOLCHAIN_VERSION := 4.9
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/* #undef HAVE_CCCRYPTORCREATEWITHMODE */
|
||||
|
||||
/* Define to 1 if you have the `clock_gettime' function. */
|
||||
#define HAVE_CLOCK_GETTIME 1
|
||||
/* #undef HAVE_CLOCK_GETTIME */
|
||||
|
||||
/* Define to 1 to use the syscall interface for clock_gettime */
|
||||
/* #undef HAVE_CLOCK_SYSCALL */
|
||||
@@ -42,13 +42,13 @@
|
||||
#define HAVE_DLFCN_H 1
|
||||
|
||||
/* Define to 1 if you have the `epoll_ctl' function. */
|
||||
#define HAVE_EPOLL_CTL 1
|
||||
/* #undef HAVE_EPOLL_CTL */
|
||||
|
||||
/* Define to 1 if you have the `eventfd' function. */
|
||||
#define HAVE_EVENTFD 1
|
||||
/* #undef HAVE_EVENTFD */
|
||||
|
||||
/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */
|
||||
#define HAVE_EVP_ENCRYPTINIT_EX 1
|
||||
/* #undef HAVE_EVP_ENCRYPTINIT_EX */
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#define HAVE_FCNTL_H 1
|
||||
@@ -66,7 +66,7 @@
|
||||
/* #undef HAVE_INET_NTOP */
|
||||
|
||||
/* Define to 1 if you have the `inotify_init' function. */
|
||||
#define HAVE_INOTIFY_INIT 1
|
||||
/* #undef HAVE_INOTIFY_INIT */
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
@@ -75,7 +75,7 @@
|
||||
#define HAVE_IPv6 1
|
||||
|
||||
/* Define to 1 if you have the `kqueue' function. */
|
||||
/* #undef HAVE_KQUEUE */
|
||||
#define HAVE_KQUEUE 1
|
||||
|
||||
/* Define to 1 if you have the <langinfo.h> header file. */
|
||||
#define HAVE_LANGINFO_H 1
|
||||
@@ -90,14 +90,14 @@
|
||||
#define HAVE_LIMITS_H 1
|
||||
|
||||
/* Define to 1 if you have the <linux/if.h> header file. */
|
||||
#define HAVE_LINUX_IF_H 1
|
||||
/* #undef HAVE_LINUX_IF_H */
|
||||
|
||||
/* Define to 1 if you have the <linux/netfilter_ipv4.h> header file. */
|
||||
#define HAVE_LINUX_NETFILTER_IPV4_H 1
|
||||
/* #undef HAVE_LINUX_NETFILTER_IPV4_H */
|
||||
|
||||
/* Define to 1 if you have the <linux/netfilter_ipv6/ip6_tables.h> header
|
||||
file. */
|
||||
#define HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H 1
|
||||
/* #undef HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H */
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#define HAVE_LOCALE_H 1
|
||||
@@ -124,25 +124,25 @@
|
||||
#define HAVE_NET_IF_H 1
|
||||
|
||||
/* Define to 1 if you have the <openssl/engine.h> header file. */
|
||||
#define HAVE_OPENSSL_ENGINE_H 1
|
||||
/* #undef HAVE_OPENSSL_ENGINE_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/err.h> header file. */
|
||||
#define HAVE_OPENSSL_ERR_H 1
|
||||
/* #undef HAVE_OPENSSL_ERR_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/evp.h> header file. */
|
||||
#define HAVE_OPENSSL_EVP_H 1
|
||||
/* #undef HAVE_OPENSSL_EVP_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/pem.h> header file. */
|
||||
#define HAVE_OPENSSL_PEM_H 1
|
||||
/* #undef HAVE_OPENSSL_PEM_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/rand.h> header file. */
|
||||
#define HAVE_OPENSSL_RAND_H 1
|
||||
/* #undef HAVE_OPENSSL_RAND_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/rsa.h> header file. */
|
||||
#define HAVE_OPENSSL_RSA_H 1
|
||||
/* #undef HAVE_OPENSSL_RSA_H */
|
||||
|
||||
/* Define to 1 if you have the <openssl/sha.h> header file. */
|
||||
#define HAVE_OPENSSL_SHA_H 1
|
||||
/* #undef HAVE_OPENSSL_SHA_H */
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
#define HAVE_POLL 1
|
||||
@@ -160,13 +160,13 @@
|
||||
#define HAVE_PTHREAD_PRIO_INHERIT 1
|
||||
|
||||
/* Define to 1 if you have the `RAND_pseudo_bytes' function. */
|
||||
#define HAVE_RAND_PSEUDO_BYTES 1
|
||||
/* #undef HAVE_RAND_PSEUDO_BYTES */
|
||||
|
||||
/* Define to 1 if you have the 'select' function. */
|
||||
#define HAVE_SELECT 1
|
||||
|
||||
/* Define to 1 if you have the `setresuid' function. */
|
||||
#define HAVE_SETRESUID 1
|
||||
/* #undef HAVE_SETRESUID */
|
||||
|
||||
/* Define to 1 if you have the `setreuid' function. */
|
||||
#define HAVE_SETREUID 1
|
||||
@@ -175,7 +175,7 @@
|
||||
#define HAVE_SETRLIMIT 1
|
||||
|
||||
/* Define to 1 if you have the `signalfd' function. */
|
||||
#define HAVE_SIGNALFD 1
|
||||
/* #undef HAVE_SIGNALFD */
|
||||
|
||||
/* Define to 1 if you have the `socket' function. */
|
||||
#define HAVE_SOCKET 1
|
||||
@@ -196,16 +196,16 @@
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/epoll.h> header file. */
|
||||
#define HAVE_SYS_EPOLL_H 1
|
||||
/* #undef HAVE_SYS_EPOLL_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/eventfd.h> header file. */
|
||||
#define HAVE_SYS_EVENTFD_H 1
|
||||
/* #undef HAVE_SYS_EVENTFD_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/event.h> header file. */
|
||||
/* #undef HAVE_SYS_EVENT_H */
|
||||
#define HAVE_SYS_EVENT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/inotify.h> header file. */
|
||||
#define HAVE_SYS_INOTIFY_H 1
|
||||
/* #undef HAVE_SYS_INOTIFY_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
||||
#define HAVE_SYS_IOCTL_H 1
|
||||
@@ -214,7 +214,7 @@
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/signalfd.h> header file. */
|
||||
#define HAVE_SYS_SIGNALFD_H 1
|
||||
/* #undef HAVE_SYS_SIGNALFD_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
@@ -253,10 +253,10 @@
|
||||
/* #undef HAVE_WS2TCPIP_H */
|
||||
|
||||
/* have zlib compression support */
|
||||
#define HAVE_ZLIB 1
|
||||
/* #undef HAVE_ZLIB */
|
||||
|
||||
/* Define to 1 if you have the <zlib.h> header file. */
|
||||
#define HAVE_ZLIB_H 1
|
||||
/* #undef HAVE_ZLIB_H */
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
@@ -275,7 +275,7 @@
|
||||
#define PACKAGE_NAME "shadowsocks-libev"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "shadowsocks-libev 2.4.7"
|
||||
#define PACKAGE_STRING "shadowsocks-libev 2.4.8"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "shadowsocks-libev"
|
||||
@@ -284,7 +284,7 @@
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "2.4.7"
|
||||
#define PACKAGE_VERSION "2.4.8"
|
||||
|
||||
/* Define to necessary symbol if this constant uses a non-standard name on
|
||||
your system. */
|
||||
@@ -315,10 +315,10 @@
|
||||
/* #undef USE_CRYPTO_APPLECC */
|
||||
|
||||
/* Use mbed TLS library */
|
||||
/* #undef USE_CRYPTO_MBEDTLS */
|
||||
#define USE_CRYPTO_MBEDTLS 1
|
||||
|
||||
/* Use OpenSSL library */
|
||||
#define USE_CRYPTO_OPENSSL 1
|
||||
/* #undef USE_CRYPTO_OPENSSL */
|
||||
|
||||
/* Use PolarSSL library */
|
||||
/* #undef USE_CRYPTO_POLARSSL */
|
||||
@@ -346,7 +346,7 @@
|
||||
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "2.4.7"
|
||||
#define VERSION "2.4.8"
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
|
||||
+1
-1
Submodule src/main/jni/libevent updated: 574f6b81c9...5d5914f00b
Submodule
+1
Submodule src/main/jni/mbedtls added at 1e4ec667a4
Submodule src/main/jni/openssl deleted from c51144d76d
Submodule src/main/jni/shadowsocks-libev updated: 915047e957...d31210c217
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
<TextView android:text="@string/stat" android:textSize="16sp"
|
||||
android:textColor="?android:attr/textColorPrimary" android:ellipsize="marquee"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
||||
<TextView android:id="@+id/connection_test" android:gravity="end"
|
||||
android:textSize="14sp" android:textColor="?android:attr/textColorSecondary"
|
||||
android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/>
|
||||
</LinearLayout>
|
||||
@@ -10,13 +10,31 @@
|
||||
<LinearLayout android:id="@+id/stat" android:elevation="4dp" android:visibility="gone"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical"
|
||||
android:paddingStart="16dip" android:paddingEnd="88dip" android:focusable="true"
|
||||
android:paddingLeft="16dip" android:paddingRight="88dip"
|
||||
android:paddingStart="16dip" android:paddingEnd="16dip" android:focusable="true"
|
||||
android:paddingLeft="16dip" android:paddingRight="16dip"
|
||||
android:paddingTop="16dip" android:paddingBottom="16dip"
|
||||
android:background="@drawable/background_stat" android:orientation="vertical">
|
||||
<include layout="@layout/layout_main_stat_title"/>
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView android:text="@string/stat"
|
||||
android:textSize="16sp"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:ellipsize="marquee"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView android:id="@+id/connection_test"
|
||||
android:gravity="end"
|
||||
android:textSize="14sp"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
</LinearLayout>
|
||||
<android.support.v7.widget.GridLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" app:columnCount="4">
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingEnd="72dip"
|
||||
android:paddingRight="72dip"
|
||||
app:columnCount="4">
|
||||
<TextView app:layout_column="0" style="@style/TextAppearance.AppCompat.Body2"
|
||||
android:ellipsize="marquee" android:text="@string/sent"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
<TextView android:text="@string/stat" android:textSize="16sp"
|
||||
android:textColor="?android:attr/textColorPrimary" android:ellipsize="marquee"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"/>
|
||||
<TextView android:id="@+id/connection_test"
|
||||
android:textSize="14sp" android:textColor="?android:attr/textColorSecondary"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
@@ -7,15 +7,13 @@
|
||||
<item>AES-128-CFB</item>
|
||||
<item>AES-192-CFB</item>
|
||||
<item>AES-256-CFB</item>
|
||||
<item>AES-128-CTR</item>
|
||||
<item>AES-192-CTR</item>
|
||||
<item>AES-256-CTR</item>
|
||||
<item>BF-CFB</item>
|
||||
<item>CAMELLIA-128-CFB</item>
|
||||
<item>CAMELLIA-192-CFB</item>
|
||||
<item>CAMELLIA-256-CFB</item>
|
||||
<item>CAST5-CFB</item>
|
||||
<item>DES-CFB</item>
|
||||
<item>IDEA-CFB</item>
|
||||
<item>RC2-CFB</item>
|
||||
<item>SEED-CFB</item>
|
||||
<item>SALSA20</item>
|
||||
<item>CHACHA20</item>
|
||||
<item>CHACHA20-IETF</item>
|
||||
@@ -28,15 +26,13 @@
|
||||
<item>aes-128-cfb</item>
|
||||
<item>aes-192-cfb</item>
|
||||
<item>aes-256-cfb</item>
|
||||
<item>aes-128-ctr</item>
|
||||
<item>aes-192-ctr</item>
|
||||
<item>aes-256-ctr</item>
|
||||
<item>bf-cfb</item>
|
||||
<item>camellia-128-cfb</item>
|
||||
<item>camellia-192-cfb</item>
|
||||
<item>camellia-256-cfb</item>
|
||||
<item>cast5-cfb</item>
|
||||
<item>des-cfb</item>
|
||||
<item>idea-cfb</item>
|
||||
<item>rc2-cfb</item>
|
||||
<item>seed-cfb</item>
|
||||
<item>salsa20</item>
|
||||
<item>chacha20</item>
|
||||
<item>chacha20-ietf</item>
|
||||
|
||||
@@ -481,7 +481,7 @@ class Shadowsocks extends AppCompatActivity with ServiceBoundContext {
|
||||
private def updatePreferenceScreen(profile: Profile) {
|
||||
if (profile.host == "198.199.101.152") if (adView == null) {
|
||||
adView = new AdView(this)
|
||||
adView.setAdUnitId("ca-app-pub-4984938374218635/1433320509")
|
||||
adView.setAdUnitId("ca-app-pub-9097031975646651/7760346322")
|
||||
adView.setAdSize(AdSize.SMART_BANNER)
|
||||
preferences.getView.asInstanceOf[ViewGroup].addView(adView, 1)
|
||||
adView.loadAd(new AdRequest.Builder().build())
|
||||
|
||||
@@ -116,12 +116,13 @@ class ShadowsocksNatService extends BaseService {
|
||||
}
|
||||
|
||||
def startKcptunDaemon() {
|
||||
if (profile.kcpcli == null) profile.kcpcli = ""
|
||||
|
||||
val cmd = new ArrayBuffer[String]
|
||||
cmd += (getApplicationInfo.dataDir + "/kcptun"
|
||||
, "-r", profile.host + ":" + profile.kcpPort
|
||||
, "-l", "127.0.0.1:" + (profile.localPort + 90)
|
||||
, profile.kcpcli)
|
||||
, profile.kcpcli.trim.replaceAll("[\"']", ""))
|
||||
|
||||
if (BuildConfig.DEBUG) Log.d(TAG, cmd.mkString(" "))
|
||||
|
||||
|
||||
@@ -36,10 +36,8 @@ object ShadowsocksSettings {
|
||||
}
|
||||
|
||||
def updateSummaryEditTextPreference(pref: Preference, value: String) {
|
||||
if (value != null) {
|
||||
pref.setSummary(value)
|
||||
pref.asInstanceOf[SummaryEditTextPreference].setText(value)
|
||||
}
|
||||
pref.setSummary(value)
|
||||
pref.asInstanceOf[SummaryEditTextPreference].setText(value)
|
||||
}
|
||||
|
||||
def updateSwitchPreference(pref: Preference, value: Boolean) {
|
||||
|
||||
@@ -25,24 +25,26 @@ final class ShadowsocksTileService extends TileService with ServiceBoundContext
|
||||
def trafficUpdated(txRate: Long, rxRate: Long, txTotal: Long, rxTotal: Long) = ()
|
||||
def stateChanged(state: Int, msg: String) {
|
||||
val tile = getQsTile
|
||||
state match {
|
||||
case State.STOPPED =>
|
||||
tile.setIcon(iconIdle)
|
||||
tile.setLabel(getString(R.string.app_name))
|
||||
tile.setState(Tile.STATE_INACTIVE)
|
||||
case State.CONNECTED =>
|
||||
tile.setIcon(iconConnected)
|
||||
tile.setLabel(app.currentProfile match {
|
||||
case Some(profile) => profile.name
|
||||
case None => getString(R.string.app_name)
|
||||
})
|
||||
tile.setState(Tile.STATE_ACTIVE)
|
||||
case _ =>
|
||||
tile.setIcon(iconBusy)
|
||||
tile.setLabel(getString(R.string.app_name))
|
||||
tile.setState(Tile.STATE_UNAVAILABLE)
|
||||
if (tile != null) {
|
||||
state match {
|
||||
case State.STOPPED =>
|
||||
tile.setIcon(iconIdle)
|
||||
tile.setLabel(getString(R.string.app_name))
|
||||
tile.setState(Tile.STATE_INACTIVE)
|
||||
case State.CONNECTED =>
|
||||
tile.setIcon(iconConnected)
|
||||
tile.setLabel(app.currentProfile match {
|
||||
case Some(profile) => profile.name
|
||||
case None => getString(R.string.app_name)
|
||||
})
|
||||
tile.setState(Tile.STATE_ACTIVE)
|
||||
case _ =>
|
||||
tile.setIcon(iconBusy)
|
||||
tile.setLabel(getString(R.string.app_name))
|
||||
tile.setState(Tile.STATE_UNAVAILABLE)
|
||||
}
|
||||
tile.updateTile
|
||||
}
|
||||
tile.updateTile
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -182,34 +182,36 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
||||
/** Called when the activity is first created. */
|
||||
def handleConnection: Boolean = {
|
||||
|
||||
val fd = startVpn()
|
||||
if (!sendFd(fd)) return false
|
||||
|
||||
if (profile.kcp) {
|
||||
startKcptunDaemon()
|
||||
}
|
||||
|
||||
startShadowsocksDaemon()
|
||||
|
||||
if (profile.udpdns && profile.kcp) {
|
||||
startShadowsocksUDPDaemon()
|
||||
}
|
||||
|
||||
if (!profile.udpdns) {
|
||||
startDnsDaemon()
|
||||
startDnsTunnel()
|
||||
}
|
||||
|
||||
startShadowsocksDaemon()
|
||||
|
||||
if (profile.udpdns) {
|
||||
startShadowsocksUDPDaemon()
|
||||
}
|
||||
|
||||
val fd = startVpn()
|
||||
val ret = sendFd(fd)
|
||||
|
||||
if (ret && profile.kcp) {
|
||||
startKcptunDaemon()
|
||||
}
|
||||
|
||||
ret
|
||||
true
|
||||
}
|
||||
|
||||
def startKcptunDaemon() {
|
||||
if (profile.kcpcli == null) profile.kcpcli = ""
|
||||
|
||||
val cmd = new ArrayBuffer[String]
|
||||
cmd += (getApplicationInfo.dataDir + "/kcptun"
|
||||
, "-r", profile.host + ":" + profile.kcpPort
|
||||
, "-l", "127.0.0.1:" + (profile.localPort + 90)
|
||||
, "--path", getApplicationInfo.dataDir + "/protect_path"
|
||||
, profile.kcpcli)
|
||||
, profile.kcpcli.trim.replaceAll("[\"']", ""))
|
||||
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, cmd.mkString(" "))
|
||||
@@ -274,6 +276,8 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
||||
|
||||
if (profile.auth) cmd += "-A"
|
||||
|
||||
if (profile.udpdns && !profile.kcp) cmd += "-u"
|
||||
|
||||
if (profile.route != Route.ALL) {
|
||||
cmd += "--acl"
|
||||
cmd += (getApplicationInfo.dataDir + "/acl.list")
|
||||
|
||||
@@ -64,7 +64,7 @@ object DBHelper {
|
||||
}
|
||||
|
||||
class DBHelper(val context: Context)
|
||||
extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 18) {
|
||||
extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 19) {
|
||||
import DBHelper._
|
||||
|
||||
lazy val profileDao: Dao[Profile, Int] = getDao(classOf[Profile])
|
||||
@@ -83,10 +83,11 @@ class DBHelper(val context: Context)
|
||||
}
|
||||
if (oldVersion < 8) {
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN udpdns SMALLINT;")
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN route VARCHAR;")
|
||||
}
|
||||
if (oldVersion < 9) {
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN route VARCHAR;")
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN route VARCHAR DEFAULT 'all';")
|
||||
} else if (oldVersion < 19) {
|
||||
profileDao.executeRawNoArgs("UPDATE `profile` SET route = 'all' WHERE route IS NULL;")
|
||||
}
|
||||
if (oldVersion < 10) {
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN auth SMALLINT;")
|
||||
@@ -128,11 +129,13 @@ class DBHelper(val context: Context)
|
||||
|
||||
if (oldVersion < 17) {
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN kcp SMALLINT;")
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN kcpcli VARCHAR;")
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN kcpcli VARCHAR DEFAULT '';")
|
||||
}
|
||||
|
||||
if (oldVersion < 18) {
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN kcpPort INTEGER;")
|
||||
profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN kcpPort INTEGER DEFAULT 8399;")
|
||||
} else if (oldVersion < 19) {
|
||||
profileDao.executeRawNoArgs("UPDATE `profile` SET kcpPort = 8399 WHERE kcpPort = 0;")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ package com.github.shadowsocks.preferences
|
||||
|
||||
import android.content.Context
|
||||
import android.preference.EditTextPreference
|
||||
import android.text.TextUtils
|
||||
import android.util.AttributeSet
|
||||
|
||||
class SummaryEditTextPreference(context: Context, attrs: AttributeSet, defStyle: Int)
|
||||
@@ -57,7 +58,7 @@ class SummaryEditTextPreference(context: Context, attrs: AttributeSet, defStyle:
|
||||
}
|
||||
|
||||
override def setSummary(summary: CharSequence) {
|
||||
if (summary.toString.isEmpty) {
|
||||
if (TextUtils.isEmpty(summary)) {
|
||||
super.setSummary(mDefaultSummary)
|
||||
} else {
|
||||
super.setSummary(summary)
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
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}
|
||||
|
||||
if [ ! -d "$ANDROID_HOME" ]; then
|
||||
mkdir -p $ANDROID_HOME
|
||||
pushd $HOME/.android
|
||||
wget -q http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
|
||||
tar xf android-sdk_r24.4.1-linux.tgz
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -d "$ANDROID_NDK_HOME" ]; then
|
||||
mkdir -p $ANDROID_NDK_HOME
|
||||
pushd $HOME/.android
|
||||
wget -q http://dl.google.com/android/repository/android-ndk-r12b-linux-${ARCH}.zip
|
||||
unzip -q android-ndk-r12b-linux-${ARCH}.zip
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -d "$GOROOT_BOOTSTRAP" ]; then
|
||||
mkdir -p $GOROOT_BOOTSTRAP
|
||||
pushd $HOME/.android
|
||||
wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz
|
||||
tar xf go1.6.3.linux-amd64.tar.gz
|
||||
popd
|
||||
fi
|
||||
|
||||
( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --filter tools,platform-tools,build-tools-24.0.0,android-23,android-24,extra-google-m2repository --no-ui -a
|
||||
( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --filter extra-android-m2repository --no-ui -a
|
||||
Binary file not shown.
Reference in New Issue
Block a user