A shadowsocks client for Android

Related tags

android shadowsocks
Overview

Shadowsocks for Android

CircleCI API Releases Language: Kotlin Codacy Badge License: GPL-3.0

for Android & Chrome OS (beta)
for Android TV (beta)

PREREQUISITES

  • JDK 1.8
  • Android SDK
    • Android NDK
  • Rust with Android targets installed
  $ cd core/src/main/rust/shadowsocks-rust
  $ rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android

BUILD

You can check whether the latest commit builds under UNIX environment by checking Travis status.

  • Install prerequisites
  • Clone the repo using git clone --recurse-submodules or update submodules using git submodule update --init --recursive
  • Build it using Android Studio or gradle script

BUILD WITH DOCKER

  • Clone the repo using git clone --recurse-submodules or update submodules using git submodule update --init --recursive
  • Run docker run --rm -v ${PWD}:/build -w /build shadowsocks/android-ndk-go ./gradlew assembleDebug

CONTRIBUTING

If you are interested in contributing or getting involved with this project, please read the CONTRIBUTING page for more information. The page can be found here.

TRANSLATE

OPEN SOURCE LICENSES

LICENSE

Copyright (C) 2017 by Max Lv <[email protected]>
Copyright (C) 2017 by Mygod Studio <[email protected]>

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Issues
  • Service is down intermittently

    Service is down intermittently

    Describe the bug

    Sometimes the Internet fails entirely when Shadowsocks keeps running for a while. This is a new bug introduced around v5.1.7 until latest master.

    To Reproduce Steps to reproduce the behavior:

    1. Start Shadowsocks
    2. Wait until your Internet is dead
    3. Restart service and verify that it is back working again

    Expected behavior Shadowsocks should work 24/7.

    Relevant logcat

    ERROR dns udp 127.0.0.1:38945 query message parse error: dns class value unknown: 2287
    

    This message is repeated 6 times over 4 seconds, around when the DNS goes down. Not sure if it is related though.

    Smartphone (please complete the following information):

    • Android/Chrome OS version: Android 11
    • Device: Pixel 3a XL
    • Version: Reproducible from v5.2.1 (9a1c677) to 1394ab3
    • Last version that did not exhibit the issue: around v5.1.7

    Configuration Put an x inside the [ ] that applies.

    • [x] IPv4 server address
    • [ ] IPv6 server address
    • [x] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Encrypt method: n/a
    • Route
      • [x] All
      • [ ] Bypass LAN
      • [ ] Bypass China
      • [ ] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [ ] Apps VPN mode
      • [ ] Bypass mode
    • Remote DNS: 1.1.1.1
    bug 
    opened by Mygod 108
  • 移动4G  cmnet 连不上

    移动4G cmnet 连不上

    Please read contributing guidelines. Thanks.

    Describe the bug A clear and concise description of what the bug is.

    移动4G连上有问题,dns请求发不出去的样子,表现为连上后网页打不开,而telegram却能正常使用,同样的节点配置,使用v2rayNG 的ss功能可以正常连接!

    根据之前的issues https://github.com/shadowsocks/shadowsocks-android/issues/591

    改DNS检查为allowed,无效 APN连接点的端口为80,无效 APN协议从"ipv4/ipv6"改成"ipv4",无效

    补充,发现APN改为cmwap可以连上,改回cmnet又不行!cmwap无法使用微信的语音视频等功能…蛋疼

    使用v2rayNG 的ss功能两个APN都能正常连接! 望大佬看看原因…

    To Reproduce Steps to reproduce the behavior:

    1. 关闭wifi
    2. 启动 shadowsocks 并连接
    3. 开启google
    4. 查看错误

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Android 8.0 OxygenOS 5.0.8
    • Device: [ OnePlus 3T ]
    • Version: [ONEPLUS A3010_28_181206]
    • Last version that did not exhibit the issue: [not applicable]

    Configuration Put an x inside the [ ] that applies.

    • [x] IPv4 server address
    • [ ] IPv6 server address
    • [x] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Encrypt method:
    • Route
      • [x] All
      • [ ] Bypass LAN
      • [ ] Bypass China
      • [ ] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [x] Apps VPN mode
      • [ ] Bypass mode
    • Remote DNS: 8.8.8.8 (修改过,并无改善) *[x] DNS over UDP
    • Plugin configuration (if applicable):
    • [ ] Auto Connect
    • [ ] TCP Fast Open
    • If you're not using VPN mode, please supply more details here:

    Additional context Add any other context about the problem here.

    上截图,为防止是线路导致的问题,我在家里的树莓派安装服务端, 404 _20190305221241 _20190305221245 _20190305221249

    连接后访问国内网站某度,完全无法打开,截图中可以看到,shadowsocks 中间有发送与接收数据,由于找不到可以直接用ip访问的网站,我访问 http://119.29.29.29/,虽然是个404页面,但确实打开了。 然后某些直接使用ip连接的app也没有问题。

    V2客户端正常

    _20190305221434 _20190305221437

    最后, 把APN换成 CMWAP 后就能正常打开网页 - -

    @madeye

    cannot reproduce no response 
    opened by ghost 63
  • Integrate shadowsocks-rust

    Integrate shadowsocks-rust

    This PR aims to replace shadowsocks-libev with shadowsocks-rust.

    Fix issue #2452.

    • [x] Gradle and Cargo integration
    • [x] Build pass
    • [x] VPNService callback
    • [x] TCP relay
    • [x] DNS realy
    • [x] UDP relay
    • [x] ACL (IP rules)
    • [x] ACL (domain name rules)
    • [x] Traffic statistics

    Nice to have:

    • [x] Parallel lookup to local and remote
    • [x] Unix domain socket to local DNS resolver.

    Future development plan (maybe not covered by this PR)

    • [ ] A local DNS cache
    • [ ] Local DNS resolver in Rust
    • [ ] Fine-grained policy routing
    • [ ] Multiple upstreams
    enhancement 
    opened by madeye 59
  • CPU usage is pretty high than previous v5.0.6

    CPU usage is pretty high than previous v5.0.6

    when compared with previous 5.0.6, my xiaomi10 shows cpu is very high, almost 100% with full 8 core running.

    when downgrade the v5.0.6, cpu becomes normal.

    They are using same profile.

    bug third-party bug 
    opened by xygwfxu 52
  • Media upload problem in Telegram since upgraded to shadowsocks-rust 1.9

    Media upload problem in Telegram since upgraded to shadowsocks-rust 1.9

    Please read contributing guidelines. Thanks.

    There is a problem in Telegram media uploading since shadowsocks rust was updated to version 1.9. Same problem exist in telegram desktop with shadowsocks rust 1.9 client.

    Expected behavior Start upload media after sending.

    Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Android/Chrome OS version: Android 10
    • Device: Mi 9T pro
    • Version: All versions after 5.1.7

    Configuration Put an x inside the [ ] that applies.

    • [x] IPv4 server address
    • [ ] IPv6 server address
    • [ ] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Encrypt method: chacha20-poly1305
    • Route
      • [ ] All
      • [x] Bypass LAN
      • [ ] Bypass China
      • [ ] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [ ] Apps VPN mode
      • [ ] Bypass mode
    • Remote DNS: 8.8.8.8
    • [ ] DNS over UDP
    • Plugin configuration (if applicable): v2ray (websocket-tls)
    • [ ] Auto Connect
    • [ ] TCP Fast Open
    • If you're not using VPN mode, please supply more details here:

    Additional context Add any other context about the problem here.

    cannot reproduce third-party bug 
    opened by arbabseyfola 49
  • shadowsocks在移动4g网络下无法使用,无法连接上外网

    shadowsocks在移动4g网络下无法使用,无法连接上外网

    问题如上,修改了端口也不行,在wifi状态下没有问题,求解。 手机Nexus 6P,版本6.0.1,未root

    cannot reproduce 
    opened by MeChenCC 49
  • kcp插件无法启动

    kcp插件无法启动

    Please read FAQ then answer these questions before submitting your issue. Thanks!

    Environment

    • Android version: e.g. "7.0.0_r14", more detailed description is preferred android 7.0
    • Device: e.g. Google Pixel XL 华为p8
    • Shadowsocks version: version code "v3.0.0" or commit ID "a073f85" v4.0
    • Last version that did not exhibit the issue (if applicable):

    Configuration

    Put an x inside the [ ] that applies.

    • [ x] IPv4 server address
    • [ ] IPv6 server address
    • [ x] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Local port: 1080
    • Encrypt method:rc4-md5
    • [ ] One-time authentication
    • Route
      • [ ] All
      • [ ] Bypass LAN
      • [x ] Bypass China
      • [ ] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [ ] Per-App Proxy
      • [ ] Bypass mode
    • [ ] UDP Forwarding
    • KCP Parameters: (leave blank if not enabled)
    • [x ] Auto Connect
    • [ x] TCP Fast Open
    • [ ] NAT mode

    What did you do?

    使用kcp插件连接失败,提示”服务启动失败,无法连接远程服务器:unknow plugin kcptun” 远程端口连接kcp端口,参数autoexpire=10;mode=fast 。

    What did you expect to see?

    请问kcp插件如何使用

    What did you see instead?

    cannot reproduce third-party bug 
    opened by triaqu 49
  • Plugin system [Draft]

    Plugin system [Draft]

    Plugin should be bundled as an apk. $PLUGIN_ID in this draft corresponds to the executable name for the plugin in order to be cross-platform, e.g. simple-obfs. An apk can have more than one plugins bundled. We don't care as long as they have different $PLUGIN_ID. Duplicated plugins will be disabled so user has to uninstall them until there's only not more than one left.

    There is no restrictions/requirements on package name, but you're suggested to use com.github.shadowsocks.plugin.$PLUGIN_ID if it only contains a single plugin to prevent duplicate plugins.

    There will be a library to implement the base framework contrived in this draft and some example plugins for the ease of developers. :smile:

    1. Plugin configuration

    Plugins get their args configured via one of the following two options:

    • A configuration activity.
    • If no configuration activity is found, a fallback mode will be used: user manual input and help message; (example: https://github.com/shadowsocks/shadowsocks-android/blob/67fab03/src/main/scala/com/github/shadowsocks/preferences/KcpCliPreferenceDialogFragment.scala#L38)

    Configuration activity

    • [x] Should this be implemented at all?

    If the plugin provides a configuration activity, it will be started when user picks your plugin and taps configure. It:

    • MUST have action: com.github.shadowsocks.plugin.$PLUGIN_ID.ACTION_CONFIGURE;
    • SHOULD parse string extra com.github.shadowsocks.plugin.EXTRA_OPTIONS (all arg as a single string) and display the old settings;
    • MUST return the data Intent with the new com.github.shadowsocks.plugin.EXTRA_OPTIONS;
    • SHOULD distinguish between server settings and feature settings in some way, e.g. for simple_obfs, obfs is a server setting and obfs_host is a feature setting;
    • NEED NOT be consistent with shadowsocks-android styling - you don't need to use preferences UI at all if you don't feel like it - however it's recommended to use Material Design at minimum.

    Help activity/callback

    If the plugin doesn't provide a configuration activity, it's highly recommended to provide a help message in the form of an Activity. It:

    • MUST have action: com.github.shadowsocks.plugin.$PLUGIN_ID.ACTION_HELP;
    • CAN parse string extra com.github.shadowsocks.plugin.EXTRA_OPTIONS and display some more relevant information;
    • MUST be either:
      • Be invisible and return help message with CharSequence extra com.github.shadowsocks.plugin.EXTRA_HELP_MESSAGE in the data intent; (in this case, default dialog will be shown containing the message)
      • Be visible and return null as data intent.
    • SHOULD distinguish between server settings and feature settings in some way, e.g. for simple_obfs, obfs is a server setting and obfs_host is a feature setting.

    2. Plugin implementation

    Every plugin can be either in native mode or JVM mode.

    Native mode

    In native mode, plugins are provided as native executables and shadowsocks-libev's plugin mode will be used.

    Every native mode plugin MUST have a content provider to provide the native executables (since they can exceed 1M which is the limit of Intent size) that:

    • MUST have android:label and android:icon; (may be configured by activity or application)
    • MUST have action: com.github.shadowsocks.plugin.ACTION_NATIVE_PLUGIN. (used for discovering plugins)
    • MUST have android:authorities set to com.github.shadowsocks.plugin.$PLUGIN_ID;
    • MUST implement query that returns the file list which MUST include $PLUGIN_ID when having these as arguments:
      • uri = "content://com.github.shadowsocks.plugin.$PLUGIN_ID";
      • projection = ["path"]; (relative path, for example obfs-local)
      • selection = null;
      • selectionArgs = null;
      • sortOrder = null;
    • MUST implement openFile that for files returned in query, openFile with mode = "r" returns a valid ParcelFileDescriptor for reading. For example, uri can be content://com.github.shadowsocks.plugin.kcptun/kcptun.

    Native mode without binary copying

    • [x] Should this be implemented at all?

    By taking advantage of android:protectionLevel="signature", plugins that have the same signature as the base package (shadowsocks-android in this case) should be able to be accessed directly by ss-local. If any native mode plugin wishes to support this mode, it must have an Activity which:

    • MUST have action: com.github.shadowsocks.plugin.$PLUGIN_ID.ACTION_START;
    • MUST be invisible;
    • MUST return the com.github.shadowsocks.plugin.EXTRA_EXECUTABLE with executable path (e.g. /data/data/com.github.shadowsocks.plugin.kcptun/lib/libkcptun.so).

    All plugins in this mode HAVE to support native mode with binary copy.

    P.S. If this is implemented, "official" plugins will perform a tiny little bit better than "unofficial" ones.

    JVM mode

    Note: This can actually be hybrid mode since I'm not caring what you do under the hood. But this should probably be a good idea if your plugin was written in a JVM language.

    • [ ] Should this be implemented at all?

    Every JVM mode plugin MUST have a service intent filter that:

    • MUST have android:label and android:icon; (may be configured by activity or application)
    • MUST have action: com.github.shadowsocks.plugin.$PLUGIN_ID.ACTION_START;
    • MUST have action: com.github.shadowsocks.plugin.ACTION_JVM_PLUGIN; (used for discovering plugins)
    • After onStartCommand(intent, flags, startId), where caller package name, server_ip, server_port and com.github.shadowsocks.plugin.EXTRA_OPTIONS will be passed via intent extra. Within 5000ms, it MUST broadcast com.github.shadowsocks.plugin.ACTION_JVM_PLUGIN_READY with local_port (should be the result of new ServerSocket(0).getLocalPort()) as extra or com.github.shadowsocks.plugin.ACTION_JVM_PLUGIN_FAIL with optional error message as string extra to caller package.
    • After shutdown or startService timeout, stopService will be called on target service. The plugin MUST gracefully handle this and terminate.

    Default configurations

    If a plugin need to supply default configuration, it can put it under the ContentProvider/Service's meta-data tag, for example:

    <meta-data android:name="com.github.shadowsocks.plugin.default_config"
               android:value="obfs=http"/>
    

    If you need to provide different default configurations for different plugins, you have to use multiple ContentProvider/Service. It should be easy to implement with sub-classing.

    3. Plugin security considerations

    Plugins are certified using package signatures and shadowsocks-android will consider these signatures as trusted:

    • Signatures by trusted sources which includes:
      • @madeye, i.e. the signer of the main repo;
      • The main repo doesn't contain any other trusted signatures. Third-party forks should add their signatures to this trusted sources if they have plugins signed by them before publishing their source code.
    • Current package signature, which means:
      • If you get apk from shadowsocks-android releases or Google Play, this means only apk signed by @madeye will be recognized as trusted.
      • If you get apk from a third-party fork, all plugins from that developer will get recognized as trusted automatically even if its source code isn't available anywhere online.

    A warning will be shown for untrusted plugins. No arbitrary restriction will be applied.

    4. Plugin platform versioning

    In order to be able to identify compatible and incompatible plugins, Semantic Versioning will be used.

    Given a version number MAJOR.MINOR.PATCH, increment the:

    1. MAJOR version when you make incompatible API changes,
    2. MINOR version when you add functionality in a backwards-compatible manner, and
    3. PATCH version when you make backwards-compatible bug fixes.

    Plugin app must include this in their application tag: (which should be automatically included if you are using our library)

    <meta-data android:name="com.github.shadowsocks.plugin.version"
               android:value="1.0.0"/>
    

    5. Possible problems

    • In some places hyphens are not accepted, for example package name. In that case, hyphens - should be changed into underscores _. For example, the package name for obfs-local would probably be com.github.shadowsocks.plugin.obfs_local (if it turns out that we really can't use hyphens in package name).
    • In the current implementation, kcptun needs to be restarted whenever a network change is detected. We may need to put this into this platform somehow, e.g. a restart receiver for shadowsocks and a start/stop receiver for plugins...

    References

    • SIP003: https://github.com/shadowsocks/shadowsocks-org/issues/28;
    • Previous discussion at: https://github.com/shadowsocks/shadowsocks-android/issues/1054#issuecomment-270568281.

    Opinions are welcome!

    enhancement 
    opened by Mygod 47
  • Unable to resolve host

    Unable to resolve host "www.google.com":No address associated with hostname

    需要检查的是android客户端的配置,还是服务器的配置呢?

    help wanted not following template 
    opened by 860git 43
  • v4.4.2 后台服务启动失败:请选择配置文件

    v4.4.2 后台服务启动失败:请选择配置文件

    Please read FAQ then answer these questions before submitting your issue. Thanks!

    Environment

    • Android version: 7.1.1
    • Device: 锤子坚果pro 2
    • Shadowsocks version: 4.4.2
    • Last version that did not exhibit the issue (if applicable):

    Configuration

    Put an x inside the [ ] that applies.

    • [x] IPv4 server address
    • [ ] IPv6 server address
    • [x] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Encrypt method:
    • Route
      • [ ] All
      • [ ] Bypass LAN
      • [ ] Bypass China
      • [x] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [ ] Apps VPN mode
      • [ ] Bypass mode
    • Remote DNS: 8.8.8.8
    • [ ] DNS Forwarding
    • Plugin configuration (if applicable):
    • [ ] Auto Connect
    • [ ] TCP Fast Open
    • If you're not using VPN mode, please supply more details here:

    What did you do?

    Just install v4.4.2 and import my server config.

    What did you expect to see?

    Connect successfully.

    What did you see instead?

    后台服务启动失败:请选择配置文件

    third-party bug 
    opened by luffyke 42
  • GFWList not working

    GFWList not working

    Quite weird problem. SS Android 5.2.4 GFWList mode didn't work this morning. Reverted back to 5.2.2, problem was still there. Global mode works fine. Only GFWList mode not working. Switched to user defined rule with imported gfw list, works fine.

    Everything was all good yestoday.

    bug 
    opened by liujunhui74 1
  • 无法解析在cloudflare上创建的域名

    无法解析在cloudflare上创建的域名

    发现shadowsocks-android无法解析指向cloudflare的nameserver的域名 如果不用域名而直接使用IP地址->没有问题 局域网内其它设备能够解析域名 手机其它的app也能成功解析域名 用outline也没问题 使用的并不是二级动态域名 而是自己的一级域名 域名的IP地址记录是在cloudflare上定义的 然后域名指向cloudflare的nameserver 先前域名用的其它的nameserver 也没有问题 image 偶尔能看到这个错误信息 无法解析cp.cloudflare.com image 麻烦看看这个问题?

    cannot reproduce 
    opened by tian-le 10
  • tv版订阅设置

    tv版订阅设置

    tv版怎么设置订阅的没搞清楚

    enhancement 
    opened by qinglajiao 1
  • 建议改进路由模式

    建议改进路由模式

    遇到一个这个问题,我路由模式选的-绕过局域网和大陆地址,但当我百度网盘下载时,却一直在走代理。能否加入类似它windows版本的geoip和geodate更新路由规则的功能。谢谢

    opened by lssmoon2019 0
  • double click one profile and drag upwards, profiles would be displayed incorrectly

    double click one profile and drag upwards, profiles would be displayed incorrectly

    Please read contributing guidelines. Thanks.

    Describe the bug select one profile, and double click the profile and drag upwards, profiles would be displayed incorrectly

    To Reproduce Steps to reproduce the behavior: 1.select one profile 2.double click the profile fast 3.don't let go your finger and draw it upwards immediately

    Expected behavior normal

    Screenshots 20210628_162554

    Smartphone (please complete the following information):

    • Android/Chrome OS version: android 8.10
    • Device: [e.g. Google nexus 6P
    • Version:5.2.4
    • Last version that did not exhibit the issue: [not applicable]

    Configuration Put an x inside the [ ] that applies.

    • [ ] IPv4 server address
    • [ ] IPv6 server address
    • [ ] Client IPv4 availability
    • [ ] Client IPv6 availability
    • Encrypt method:
    • Route
      • [ ] All
      • [ ] Bypass LAN
      • [ ] Bypass China
      • [ ] Bypass LAN & China
      • [ ] GFW List
      • [ ] China List
      • [ ] Custom rules
    • [ ] IPv6 route
    • [ ] Apps VPN mode
      • [ ] Bypass mode
    • Remote DNS: 8.8.8.8
    • [ ] DNS over UDP
    • Plugin configuration (if applicable):
    • [ ] Auto Connect
    • [ ] TCP Fast Open
    • If you're not using VPN mode, please supply more details here:

    Additional context Add any other context about the problem here.

    bug 
    opened by iamsad3508 2
  • Target Android 12

    Target Android 12

    boring pr

    enhancement 
    opened by Mygod 0
  • Support torch/tap-to-focus/camera-toggle in QR code scanner

    Support torch/tap-to-focus/camera-toggle in QR code scanner

    Of course we should use camerax, because there is no way we want to maintain these features: https://medium.com/androiddevelopers/camerax-learn-how-to-use-cameracontroller-e3ed10fffecf

    enhancement good first issue 
    opened by Mygod 3
  • clarify readme and contributing docs

    clarify readme and contributing docs

    For issue #2591
    Adds short video walkthrough of project, updates to README.md and CONTRIBUTING.md to provide more information for new project users and contributors.

    opened by jamiemott 2
  • 能否增加Key认证方式

    能否增加Key认证方式

    在 shadowsocks-libev 中引入了Key认证方式,能否在shadowsocks-android加入这个认证方式,谢谢!

    enhancement good first issue 
    opened by syuez 1
  • Support for any ACL file (RFC)

    Support for any ACL file (RFC)

    After 857fb552e92720f94185bb74ebd43c2cd0bf8b53, the only special case this repo does for ACL file is to add bypass LAN routes:

    https://github.com/shadowsocks/shadowsocks-android/blob/857fb552e92720f94185bb74ebd43c2cd0bf8b53/core/src/main/java/com/github/shadowsocks/bg/VpnService.kt#L192-L206

    Unfortunately, this is known to be buggy on Android 10, so maybe we can remove this optimization as well.

    Assuming we remove this, shadowsocks-android now essentially treats all ACL files virtually the same, so it makes sense now to allow the user to completely customize ACL. Here is my proposal for improved customizable ACL.

    Better maintainability

    There are currently a lot of redundancy in the acl files. We can allow all ACL files to import each other, e.g. bypass-china.acl could be simply:

    [proxy_all]
    
    #IMPORT_URL https://host/path/to/gfwlist.acl
    
    [bypass_list]
    # China IP blocks here...
    

    Host reachable anywhere

    Currently we host ACL files on shadowsocks.org, which is inaccessible from China. We can get around this issue by using GitHub or other CDNs, e.g. https://cdn.jsdelivr.net/gh/shadowsocks/[email protected]/gfwlist.acl.

    Remove ACL GUI editor

    I think GUI editor is currently a rarely used feature. We should replace it with just a list of ACL urls, much like subscriptions. Built-in ACL will also use this format, but with a built-in offline cache.

    (maybe GUI editor makes more sense if it is a web editor)

    Fixes #2385. Any comments? @madeye

    enhancement 
    opened by Mygod 1
Releases(v5.2.5)
Owner
shadowsocks
shadowsocks is a fast tunnel proxy that helps you bypass firewalls
shadowsocks
Github client for Android

OctoDroid This application provides access to GitHub and lets you stay connected with your network Download Main features Repository List repositories

Azwan Adli 1.2k Jul 31, 2021
WordPress for Android

WordPress for Android If you're just looking to install WordPress for Android, you can find it on Google Play. If you're a developer wanting to contri

WordPress Mobile 2.5k Jul 29, 2021
Cnblogs Client for Android - Material Design

Cotable - Yet Another Cnblogs Client for Android Description Cotable = Code + Stable (The Paradise of Coder) The Android client of Cnblogs that named

Steve Lemuel 35 Jun 30, 2020
An Android client for Pump.io

Impeller - An Android client for Pump.io What is it A client for Pump.io, intended to provide a rich, platform-integrated experience. Runs on Android

Erin 44 Dec 6, 2020
Tweet Lanes for Android

Tweet Lanes Tweet Lanes is a fully functional Twitter client, targeted at Android devices running API 14 and above. This project contains the full sou

Chris Lacy 777 Jun 28, 2021
Simple Twitter Client just for tweeting, written in Kotlin with reactive MVVM-like approach

Monotweety Simple Twitter Client just for tweeting. Monotweety is also available at F-Droid compatible repository called IzzyOnDroid F-Droid Repositor

Yasuhiro SHIMIZU 108 Jun 10, 2021
Open-source alternative Instagram client on Android.

Instagram client; previously known as InstaGrabber.

Austin Huang 1.1k Jul 23, 2021
A Reddit client for Android

This is a Reddit client on Android written in Java. It does not have any ads and it features clean UI and smooth browsing experience.

null 912 Jul 19, 2021
Easy social network authorization for Android. Supports Facebook, Twitter, Instagram, Google+, Vkontakte. Made by Stfalcon

SocialAuthHelper A library that helps to implement social network authorization (Facebook, Twitter, Instagram, GooglePlus, Vkontakte). Who we are Need

Stfalcon LLC 97 Jul 19, 2021
The code for TEDxTehran android event applications.

Event App Android Hello, we shared our projects in open source in TEDxTehran so that anyone who would like to participate in it and the rest of the TE

TEDxTehran Team 12 May 22, 2021
Yet another Twitter unofficial client for Lollipop.

Tweetin Yet another Twitter unofficial client. Just design for Lollipop now!!! Screenshot: How to use the source code? Just import the Tweetin folder

Matthew Lee 176 Mar 21, 2021
GitHub client for Android based on the abandoned official app

ForkHub ForkHub started off as a fork of the official Android app from GitHub, and has since seen lots of improvements. You can see a comprehensive li

Jon Ander Peñalba 2.8k Aug 2, 2021
An unofficial open source Reddit client for Android.

RedReader An unofficial, open source Android client for Reddit. Features Free and open-source Software - no ads/tracking Lightweight and fast Swipe po

null 1.2k Aug 1, 2021
An Android client for the microblogging server Mastodon

Tusky Tusky is a beautiful Android client for Mastodon. Mastodon is an ActivityPub federated social network. That means no single entity controls the

Tusky 1.1k Aug 3, 2021