Skip to content

Commit

Permalink
android without root use v2ray (#219)
Browse files Browse the repository at this point in the history
* android without root use v2ray

* add prepare

* update
  • Loading branch information
CalmLong authored Dec 25, 2020
1 parent 8eee081 commit 8aa1a9f
Showing 1 changed file with 180 additions and 0 deletions.
180 changes: 180 additions & 0 deletions zh_CN/app/android_without_root_use_v2ray.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
# Android 免 Root 运行 core

安卓无 Root 权限运行 V2Ray-core 并配置全局代理

此方法适用于不经常更改配置且设备无 Root 权限的用户
___

[[toc]]
___

准备工具:

* 电脑
* adb 环境
* 数据线(用于设备与电脑连接)

必备技能:

* 了解 APN 设置
* 一些 Linux 实践经验
*[编译 V2Ray-core](https://www.v2fly.org/developer/intro/compile.html#%E5%A4%9A%E7%A7%8D%E6%9E%84%E5%BB%BA%E6%96%B9%E5%BC%8F)
* 会设置你所用的操作系统的环境变量

测试终端环境:

* Android 10
* ARM V8

缺点:

由于文件存放在临时目录中,设备重启后文件会被删除,因此重启后需要重新设置

> 话说都 2020 年了不会还有人时常重启手机吧
## 准备

由于 Android 系统中没有 `/etc/resolv.conf` 加上没有 Root 权限也就无法创建;

由于读取不到文件所以 Go 语言使用了默认设定的地址 `127.0.0.1:53` (但 Android 并不存在 53 的本地 DNS),但是因为系统限制不能监听低位端口号也就无法使用
V2Ray 来处理这个问题;因此直接运行 `core` 会由于 Go 语言(Android)的影响导致 DNS 解析出现问题

解决方法如下:

只需要修改一行代码即可,找到 Go 语言的安装位置,然后编辑 `src/net/dnsconfig_unix.go`,在 19 行(go version go1.15.6)

```vim
defaultNS = []string{"127.0.0.1:53", "[::1]:53"}
```

这里改为了阿里的 DNS,也可以改为其他的

示例如下:

```vim
defaultNS = []string{"223.5.5.5:53", "[2400:3200::1]:53"}
```

保存即可,然后即可开始[编译](#编译),之后再改回即可

## 编译

不可以使用[预编译](https://github.com/v2fly/v2ray-core/releases)中的 `linux-armXXX`,不然运行时会出现[这个问题](https://github.com/v2ray/discussion/issues/555)

Go 语言主要通过 `GOOS``GOARCH` 来控制编译的环境

### 环境变量

对于 ARM 架构默认是 ARM V8

```bash
SET GOOS=android
SET GOARCH=arm64
```

其他 ARM 架构,列如 V7

```bash
SET GOOS=android
SET GOARCH=arm
SET GOARM=7
```

进入 `v2ray-core` 目录,完整的命令如下(Windows)

```bash
SET CGO_ENABLED=0
SET GOOS=android
SET GOARCH=arm64
go build -o D:/v2ray -trimpath -ldflags "-s -w -buildid=" ./main
go build -o D:/v2ctl -trimpath -ldflags "-s -w -buildid=" -tags confonly ./infra/control/main
```

## 资源存放

`v2ray``v2ctl` 已经你的配置文件、geo 资源等放入你的手机内部存储中

例如:手机U盘/V2Ray

## 运行 V2Ray

### 连接 ADB

用数据线连接电脑,打开设备的 USB 调试、开启 "仅充电"模式下允许 ADB 调试;USB连接模式改为 "文件传输"

打开终端输入以下命令

```bash
adb devices
```

若手机会提示 "是否允许xxxx计算机USB调试"则勾选 "一律允许"然后确认

终端显示如下则表示为连接成功

```
List of devices attached
1234567C06011253 device
```

### 传输文件

继续输入以下命令,此时终端会变为手机的标识符

```bash
adb shell
```

将设备内部存储中的 V2Ray 程序复制到设备临时目录中,给予权限

```
cp /sdcard/V2Ray/* /data/local/tmp/
cd /data/local/tmp/
chmod 777 v2*
```

尝试运行一下;由于系统限制建议使用 `1000+` 以上的端口号

```
./v2ray
```

测试没问题后按下 `Ctrl+C` 结束进程,然后把 USB 传输模式改为 "仅充电"

然后再重新连接进入到 `/data/local/tmp` 目录

::: tip 注意
实测在 "传输文件" 模式下无论怎样只要断开就会挂掉后台,而仅充电模式下不会
:::

后台运行 V2Ray

```bash
nohup ./v2ray &
```

此时,打开任务管理器,找到名为 `adb` 的进程,然后结束它;Windows 如果有两个进程则结束第二个

这样就能躲过断开连接后程序挂掉的问题了

## 全局代理

打开你的 APN 设置,由于默认的 APN 不允许更改,所以需要新建一个,内容复制默认的就可以

然后在 "代理" 一栏中填入 `127.0.0.1`,端口号为你的端口号,保存即可

返回上层设置,选择这个 APN

至此,完毕

## 其他

实测非常省电,根本都感受不到 `core` 的存在;个人感觉响应速度比套壳的要快不少

对于游戏,实测不会影响打王者,当然可能和分流有关这里就不再重复了

### 测试版本

go version go1.15.6 windows/amd64

v2fly/v2ray-core master

0 comments on commit 8aa1a9f

Please sign in to comment.