Xray 在实现上使用 go 语言,同时客户端和服务端共用同一套代码,根据配置文件的不同来判断是客户端还是服务端。如果想在 Android 的客户端上运行 Xray,那么就需要知道如何编译 Xray-core 到 aar 库,提供给 Android 客户端。
如果在使用 gomobile 编译时,使用 Go module(也就是 GO111MODULE=on ) 会报错,找不到 package, 参考 https://github.com/golang/go/wiki/Mobile
因为编译需要使用到 tun2socks 组件,所以建议先阅读一下相关的知识点。
http://arloor.com/posts/other/android-vpnservice-and-vpn-dev/
https://briteming.blogspot.com/2017/09/socksvpn-fqrouter.html
最简单的办法,直接安装 Android Studio,然后在 Android Studio 中配置:
其中,SDK Platforms 下载几个 Android 的版本。
go 我使用的版本: go version go1.16.3 darwin/amd64
# clone 仓库到本地
git clone https://github.com/fivetime/AndroidLibXrayLite.git
###### 使用梯子
export ALL_PROXY=socks5://127.0.0.1:1086
export all_proxy=socks5://127.0.0.1:1086
###### 配置 android 的 sdk 和 ndk
export ANDROID_HOME="/Users/MoMo/Library/Android/sdk"
export ANDROID_NDK_HOME="/Users/MoMo/Library/Android/sdk/ndk/20.0.5594570"
###### 根据环境选择执行脚本:
# Mac OS
sh build/build-on-mac.sh
# 编译 android
sh build-on-mac.sh android [data] [dep]
### data 参数表示会更新 geoip.dat geosite.dat 文件
### dep 表示会执行 go get -u 更新本地的依赖
# clone 仓库到本地
git clone https://github.com/fivetime/AndroidLibXrayLite.git
cd AndroidLibXrayLite/
# 执行脚本
/bin/bash build/build-on-linux.sh sdk data dep
### sdk 表示会安装 Android SDK Tool 和 NDK
### data 参数表示会更新 geoip.dat geosite.dat 文件
### dep 表示会执行 go get -u 更新本地的依赖
- 安装 Docker
- 安装 Go
- 安装 Android SDK + NDK + Tools + OpenJDK8
- Docker 拉取 fivetime/android-v2ray-build:1.0.0 镜像后开始编译
- 注意需要梯子
- 脚本默认 GOATH = ~/go 目录
- 会自动下载 geoip.data 和 geosite.dat 文件
- 编译生成的 aar 和 source 在 ${GOPATH}/src/AndroidLibXrayLite 目录下