OpenVPN for Android
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后,需要配置环境变量。
/home/bleach/android-studio/bin Android studio安装目录
/home/bleach/Android/android-ndk-r12b ndk解压目录
进入用户目录(cd /home/bleach),打开配置文件(vim .bashrc),添加如下内容:
export PATH=$PATH: /home/bleach/android-studio/bin: /home/bleach/Android/android-ndk-r12b
2.3 获取OpenVPN for Android源码
打开搜索引擎,输入ics openvpn,进行搜索,然后进入ics openvpn的github主页,选择master分支里的一个已经添加标签的版本,本文选择的是0.6.64版本的源码。
进入Ubuntu命令行,创建一个源码目录,然后使用git clone命令将源码下载到本地。
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文件。
cd ics-openvpn-v0.6.64/ics-openvpn
ls –a
vim .gitmodules
将.gitmodules文件中的url更改掉。
[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:执行指令 sudo git submodule sync
step3:然后执行指令 git submodule init
step4:然后执行指令 git submodule update
upate指令会消耗一定的时间。
step5:最后进入ics-openvpn-v0.6.64/ics-openvpn/main目录,执行./misc/build-native.sh,等待编译完成,可能需要修改build-native.sh的执行权限。
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包。