1. 简介
Android API level 14+提供了VPNService服务框架,在不root的情况下,开发者可以创建自己的VPN服务应用。
目前主要有三种,分别为OpenVPN for Android(ICS OpenVPN),OpenVPN Connect,OpenVPN Settings。
OpenVPN for Android和OpenVPN Connect使用官方VPNService API (Android 4.0+),不需要root权限,而OpenVPN Settings需要root权限。
OpenVPN for Android是一个开源的客户端,由Arne Schwabe开发,他定位于更高级的用户,提供更多的设置,它可以在app内导入配置文件。
OpenVPN Connect是一个不开源的客户端,它由OpenVPN Technologies , Inc. 开发,它定位于普通用户,它基于OpenVPN协议的C++实现。
OpenVPN Settings是最老的客户端,需要root权限,它并不使用VPNService API。
2. 编译OpenVPN for Android
2.1 开发环境搭建
Ubuntu16,Android Studio,NDK,SDK
首先在Ubuntu下安装Android studio,安装完毕后,使用sdk manager工具安装sdk。
关于NDK,可以使用sdk manager来下载,不过在编译源码的过程中出现了错误,经过尝试发现sdk manager下载的是14版本的ndk,而14版本的ndk编译OpenVPN for Android会出现错误,建议使用12版本的ndk。
2.2 配置环境变量
安装完Android studio,解压完ndk后,需要配置环境变量。
1 2 |
~/android-studio/bin Android studio安装目录 ~/Android/android-ndk-r12b ndk解压目录 |
进入用户目录(cd /home/bleach),打开配置文件(vim .bashrc),添加如下内容:
1 |
export PATH=$PATH:~/android-studio/bin:~/Android/android-ndk-r12b |
2.3 获取OpenVPN for Android源码
打开搜索引擎,输入ics openvpn,进行搜索,然后进入ics openvpn的github主页,选择master分支里的一个已经添加标签的版本,本文选择的是0.6.64版本的源码。
进入Ubuntu命令行,创建一个源码目录,然后使用git clone命令将源码下载到本地。
1 2 3 4 5 |
$ mkdir ics-openvpn-v0.6.64 $ cd ics-openvpn-v0.6.64 $ git clone https://github.com/schwabe/ics-openvpn.git |
2.4 编译源码
step1:进入ics-openvpn-v0.6.64/ics-openvpn目录,修改.gitmodules文件。
1 2 3 4 5 |
$ cd ics-openvpn-v0.6.64/ics-openvpn $ ls –a $ vim .gitmodules |
将.gitmodules文件中的url更改掉。
1 2 3 4 5 6 7 8 9 10 11 |
[submodule "main/openvpn"] path = main/openvpn url = https://github.com/schwabe/openvpn.git [submodule "main/openssl"] path = main/openssl url = https://github.com/schwabe/platform_external_openssl.git [submodule "main/breakpad"] path = main/breakpad url = https://github.com/schwabe/breakpad.git |
step2:执行指令
1 |
$ git submodule sync |
step3:然后执行指令
1 |
$ git submodule init |
step4:然后执行指令
1 |
$ git submodule update |
upate指令会消耗一定的时间。
step5:最后进入ics-openvpn-v0.6.64/ics-openvpn/main目录,执行./misc/build-native.sh,等待编译完成,可能需要修改build-native.sh的执行权限。
1 2 3 4 5 |
$ cd main $ chmod +x ./mics/build-native.sh $ ./misc/build-native.sh |
3. 编译常见问题
3.1 ndk-build not found
未配置ndk环境变量,请参考2.2。
3.2 各种编译错误,比如unknown directive。
很有可能是ndk版本的问题,请使用12版本的ndk尝试编译。
3.3 cannot find .git directory in openvpn,aborting
不要在github上下载zip包的源码,请使用git clone指令将源码下载到本地。
4. 导入源码
将源码导入到Android studio中,目前OpenVPN for Android不支持导入到eclipse中,请使用Android studio开发环境。
打开Android studio,将源码导入,Android studio会自动更新gradle信息,更新完毕后,编译工程,就会生成对应apk包。