最近公司在做一个手机app 3g/4g全局代理上网的功能,由于客户端开发组缺人,我自告奋勇来帮忙写安卓的这一块sdk代码。因为我写的远程代理服务器是基于socks5协议,所以决定在客户端借鉴同样基于socks5协议的shadowsocks来做。为了研究shadowsocks,首先必须得把客户端代码的工程给搭建起来。按以下的步骤,一小时之内(包括下载时间,视你的网速而定),各位看客应该也能很快的编译自己的shadowsocks-android工程。
【以下操作都是在win7 64bit上进行】
- 因为shadowsocks是发布在github上的,所以得先下载一个git的客户端工具,地址:http://www.git-scm.com/download/,安装完成后,在安装目录找到git-bash.exe执行,git-bash在win上模拟了一个linux环境,它的操作指令与linux基本无差别。需要注意的是如果在git-bash环境中需要访问win的系统盘,只需输入 "cd d:",这样就能进入D盘根目录。
- 在git-bash环境中,新建一个目录shadowsocks,进入这个目录,执行git clone https://github.com/shadowsocks/shadowsocks-android.git 开始下载源码主干部分
- 主干部分下载完成后,进入下载的shadowsocks-android目录,执行git submodule update --init,下载它的分支部分。
- 因为它的sdk部分的代码是用的scala语言,所以要安装一个scala语言环境和构建工具sbt和(请自行百度,安装配置跟jdk没什么区别,scala是基于jvm编译的)。
- 安装android sdk和ndk,ndk版本需要android-ndk-r10d+,sdk我用的版本是21
- 设置安卓的sdk和ndk的环境变量,`ANDROID_HOME`,`ANDROID_NDK_HOME`
- 需要打包安装的话,要key文件,我只是需要研究源码,所以跳过此步
- 在shadowsocks-android目录下执行,./build.sh 编译ndk库
- 最后执行 sbt clean android:package-release,编译app,最后的源码目录是这个样子shadowsocks-android\src\main
-
- 题外话, 要注意的是,我在使用eclipse+scala插件、eclipse-scala(官方ide)时,scala编译均有莫名其妙的问题,google了很久,解决方案很复杂难得看了,这两个ide反正支持不是很好,推荐使用intellij idea编译scala,还有尽量不要使用java和scala混合编译,在类型构造比较复杂的情况下,运行期会出错。