一加6NetHunter安装指南

接近半年前我因为手机坏了,所以彻底重置成了未解锁的氧OS。经历了一段时间没有安装NetHunter之后,感觉还是有一些不太方便,于是决定重新安装回来,写一篇文章以备日后查看。 重要提示:因为本文中用到的东西(内核,ROM等等)会不断更新,这篇文章仅在写成时有效,在某一部分用到的东西更新之后可能会导致其他的错误。请确认最新的版本和本文的修改/发布时间,如果遇到问题欢迎讨论。我不对阅读和跟随本教程所造成的任何损失负责。

准备工作

需要准备的设备

  • 一加6(这个教程不是给6T写的,因为我没有6T也没法验证,可以摸索一下)
  • 电脑一台
  • 连接稳定的数据线
  • 网络
  • 大约10G以上的硬盘空间用以存放下载的文件

环境准备

  1. 确保你的电脑安装了fastboot和adb工具。Windows和Linux都有预编译的版本,或者如果安装了Android Studio等安卓开发IDE,应该附带安装了adb和fastboot,添加到环境变量或者直接在路径下执行就可以。
  2. 确保你的网络连接能够从Android File Host/SourceForge等网站上下载文件,以及能够从各大git托管平台拉取代码。
  3. 确认手机中的数据已备份。重要:接下来的操作会抹掉手机上的全部数据,务必备份。
  4. Linux环境。Linux环境不是必须,而是为了编译内核。如果你用的是已经编译好的可以不需要Linux,刷机过程并不强制使用Linux。
  5. Windows环境。Windows环境是为了在出现重大问题的时候能够救砖,如果对自己有信心可以不要。

需要下载的文件

  1. NetHunter内核文件。可以找别人要也可也自己编译,编译的方法下面会讲。
  2. 一加6用的氧OS线刷包。这是9008线刷包,我建议在开始之前用它重置手机以防遇见奇怪的问题,也是用来救砖的。地址在这里。下载氧OS安卓10最新的即可。
  3. PiXeN-OS的ROM包。之所以需要这个是因为目前的内核只有在PiXeN上才不会出现bug,具体原因未知(有了解的可以告诉我一下)。地址在这里。注意要下载一加6安卓10的版本,并且一起下载Finalize.zip。从理论上来说LineageOS或许也可以,有哪位有兴趣可以测试看看,我不是太喜欢LineageOS所以不是很常用。
  4. NetHunter的Chroot文件系统,app等。最简单的方式是在官网上随便下载一个包然后解压出来。也可也不下载,在NetHunter应用商店(其实是F-Droid的一个仓库)里面下载安装。官网在这里
  5. TWRP。TWRP是一个第三方Recovery,功能很丰富,不仅能够在完成安装之后就不需要电脑也能进行简单的刷机,而且在进不去系统的时候也能辅助救砖。它的官网在这里。注意选择适配一加6的版本(enchilada),并且img和zip文件都要下载。
  6. Magisk。Magisk是功能丰富的Root方案,因为NetHunter的功能必须要root权限,所以Magisk是必需的。Magisk是开源在GitHub上的项目,官方仓库在这里。注意最好下载一个Magisk Manager备用,如果操作有误的话不会自动安装这个app,手动安装也可以,只不过不是系统软件了。
  7. Root Explorer,Busybox等Chroot需要的工具和软件,按自己的需求准备即可。谷歌商店下载需要收费,这几个软件我建议购买正版,因为稳定可靠(Root工具万一有恶意代码不是开玩笑的)而且有更新和支持,实在不想付费的自行百度就好。

内核编译

NetHunter被官方(或者说社区)所接受的内核都在一个GitLab仓库里管理。这个仓库包含一个打包工具,包含了很多开发者贡献的内核的预编译的版本,可以直接打包成刷机包使用。如果你对内核没有自定义的需求,这样操作是最简单的。当然也可以拉取某个内核的源码,编译好了用这个工具打包。下面介绍直接打包的方法,有关编译内核的内容我会在以后的文章中记录。

为什么需要自己打包

其实上面给出的官网页面上是有一加6使用的刷机包的。但是那个刷机包原因不明地刷进去一定砖机,无法进入系统但是能进入Recovery。问题是,这个刷机包修改了内核,而这个内核有一个非常影响使用的bug:它让手机的MTP功能失效了。所以即使能进入Recovery,没有办法用电脑传输文件也没法救砖,还是得用线刷的方式救砖。所以比较推荐的方式是单独安装内核并手动安装app和chroot

打包内核

首先确保使用的是Linux系统。拉取GitLab上的仓库。仓库地址是https://gitlab.com/kalilinux/nethunter/build-scripts/kali-nethunter-project/。拉取之后进入路径下的/nethunter-installer文件夹,这就是用来将内核打包成安装包的工具。接下来按照说明,执行./bootstrap.sh。这期间会自动拉取另外一个仓库的内容,其中是预编译好的各个内核。等待拉取完成之后执行:

1
python3 build.py -d oneplus6-oos --ten -k

注意一定要是python3。之后就获得了可以直接在TWRP里面刷进去的内核包。

刷机流程

备份手机

在这里再强调一遍,接下来的操作会重置手机上的所有数据,一定要提前备份。

9008刷入氧OS

无论之前是什么ROM,安装NetHunter都需要先刷入氧OS。而且既然要在下面的操作中清空数据,索性在这一步就用9008重置手机就好了。需要注意的是,如果在接下来的步骤中出现问题需要救砖,也可也用下面的步骤。解压之前下到的压缩包,应该获得一个文件夹。确保路径中没有中文,并安装Qualcomm驱动(压缩包里有)。在安装驱动之前记得禁用强制签名和签名保护。之后打开MSM Tool,并将手机彻底关机。按住音量上键不要松手并且将手机连接至电脑,应该能看到MSM Tool上显示设备连接到端口,设备管理器种应该也能看到连接了Qualcomm 9008设备。这时点击开始下载,等到显示建立通信完成开始写入镜像的时候就可以松开音量键了。等到整个过程完成即可。需要注意的是,开始连接的时候必须一直按住音量上键,同时不能开机,必须直接连接电脑。过程完成之后手机会自动重启,断开手机连接并正常激活即可。

解锁并刷入TWRP

下面就是常规的解锁并刷入第三方recovery,已经熟悉操作的可以跳过不看。在设置里进入开发者模式,并打开USB调试和OEM解锁,允许电脑进行USB调试。之后关机并重启到boot loader,连接电脑并执行:

1
fastboot oem unlock

并在手机上通过音量键选择确认解锁,按电源键确认,等待数据完成擦除会自动重启,解锁boot loader。此时再重起至fastboot模式,电脑执行:

1
fastboot boot your_twrp_image.img

需要注意的是不可以直接执行fastboot flash recovery your_twrp_image.img来烧写recovery分区,因为TWRP现在在新手机上需要特别的安装器来安装,而不是被直接写进recovery分区。正确的操作是像上面一样启动TWRP镜像,并在镜像内刷入TWRP安装包。可以把安装包放进手机安装,也可也用sideload。安装完成后重启并进入TWRP(此时已经是永久TWRP),准备下一步。

安装PiXeN-OS

按照PiXeN的官方教程安装,刷入PiXeN的安装包,不退出TWRP继续刷入Finalize.zip,并且格式化Data分区。注意是格式化不是擦除,格式化只是清空Data的内容,擦除会整个删除分区,之后启动的时候就没法写入了。完成格式化之后进入系统,完成激活。之后的操作不会再删除数据,有需要的可以进行数据方面的恢复或者增加。PiXeN安装的时候会附带安装TWRP,如果实在懒的话可以跳过上面一步安装TWRP的操作而用临时TWRP安装,但是不建议这么做,刷机的时候保留第三方Recovery也是为了防止出现问题之后没有TWRP无法修复。

安装Magisk

这一步是常规的Root操作,熟悉步骤的可以跳过不看。再进入TWRP,注意这时进入的是PiXeN自带的TWRP,版本和主题都和官方最新的不一样。不建议更换TWRP版本,这个版本是最适配PiXeN-OS的。进入TWRP并刷入Magisk的安装包,重启至系统,之后检查Magisk Manager有没有自动安装,没有的话手动装一下。

刷入内核并完成NetHunter配置

完成了一大堆准备工作之后,终于进入了正题。再次进入TWRP,注意一旦刷入内核之后就无法在Recovery中启动MTP功能,因为这个内核破坏了Recovery调用的Linux功能,所以提前把需要的文件全部放进手机里。刷入内核之后无需再次刷入Magisk,直接开机即可。此时如果一切正常,你将正常进入PiXeN并且能够在设置里看到自己的内核已经是NetHunter内核了。如果砖机并且手机里还有之前的刷机文件也可以进入TWRP,可以尝试再次刷入PiXeN和Magisk,再刷入内核进行尝试。如果已经没有刷机文件或者直接黑砖,就需要按照上面的步骤从9008线刷再来一遍。有时候的确是玄学问题,但是更多的是某一步操作顺序或者是细节没有做好,需要帮助可以留言。

刷入内核成功之后,就需要安装Busybox和NetHunter的app,以及NetHunter系列的终端模拟器。全部完成安装(注意仔细看你Busybox是不是真的装好了)之后打开终端模拟器以及NetHunter并授予所有权限和root权限,并且进入Chroot Manager选项卡。选择你需要的安装方式,可以从网上自动下载tarball安装,也可以从别的刷机包里解压出来本地安装。安装需要一点时间,安装完成之后重启手机,等待片刻应该会有NetHunter的自检信息出现:

1
2
3
4
5
6
Nethunter: Satrtup
Root: OK.
Busybox: OK.
Chroot: OK.
Boot completed.
Everything is fine and Chroot has been started!

这一信息表明一切正常,启动脚本也被正确执行。如果迟迟不见这个信息,一定有问题,需要通过日志检查。绝大部分刷入NetHunter结果发现某些地方有问题的都不会显示这个信息。几乎所有直接安装在氧OS而非PiXeN上的情况都不会显示这个信息。如果的确如此,请更换ROM至PiXeN,或者如果你有闲心,可以找一个能正常使用的一加6NetHunter并且按照它的格式修改自己的启动脚本。不出现信息的情况下无法使用需要内核支持的功能。重新刷机或许能够解决,但是最好先弄清楚原因,可以查看内核日志来分析可能的原因。

USB功能的Bug和解决方法

如上所述,这个内核会影响系统对USB功能的配置,只能通过NetHunter app来配置USB模式。这一bug目前看来是DJY一加6内核特有的,别的手机的内核没有这个问题,但是同样是一加6内核的Acai66开发的内核也存在类似的bug但是不完全相同。这个Bug在我看来是因为修改了USB Gadget的配置文件导致的,这是Linux下的一个内核级功能,允许设备表现得像不同的USB设备一样,这也是NetHunter模拟不同设备(以及P4wnP1模拟设备)的原理。在NetHunter里面,这个配置是每次启动系统之后靠.rc启动脚本写入配置文件的,所以模拟功能必须在脚本正确执行之后才有用。所以有一个很简单的思路:首先在Windows系统内卸载手机这个设备,这是为了防止设备序列号没变但是功能识别号变了带来的问题,卸载掉设备下次连接会重新安装,Linux系统下没有这个问题(至少Debian和Ubuntu以及基于它们的发行版都没有)。然后重启手机,重启过程中就连接电脑,一旦开机立刻在手机上切换到MTP模式,这时候启动脚本还没有执行,但是USB功能配置文件已经写入,这会中断NetHunter的启动,并且导致需要手动启动Chroot而且重启之前无法使用HID功能,但是可以和刷入内核之前一样使用USB功能。不过这显然只是临时解决办法不是最终方法,但是因为我一直没有确定是具体哪里的问题所以也一直无从下手……如果哪位比较了解Linux的内核机制或者安卓的启动机制等等欢迎留言探讨,如果能够定位问题我就会尝试修复。

其他注意事项和提问相关

首先要说明的是,在踩坑几十遍9008救砖都弄了十几遍之后,我总结出来一个经验:有时候的确是玄学问题,操作一模一样的情况下,第一遍失败,重置后第二遍就能成功。这就是我为什么坚持要每次刷机之前都线刷重置的原因,以免之前留下什么干扰的问题,同时安卓10下的TWRP擦除功能有点奇怪,似乎不能完全擦除干净,在擦除之后刷入氧OS可能还会有擦除前的一些bug遗留下来(DJY的某个版本内核尤为明显),最安全的办法还是9008线刷。所以遇到问题了要有耐心,完整记录之后如果找不到问题所在可以尝试重来。刷机之前请多充一点电,连接电脑时供电可能只有500mA,所以有可能电池电量还会减少(刷写镜像比较费电),如果刷机过程中因为没电意外关机将带来不可逆的软件错误甚至硬件错误。

以及提问相关,因为刷机可能出现的问题很多,所以欢迎大家留言或者找我交流。但是希望在提问的时候能够保留完整的操作记录,哪一步做了什么,和完整的日志信息,否则我也没办法确定问题是什么。最后再次声明,我不对任何的数据或者硬件或者其他损坏负责,请在进行任何操作之前明确可能的后果和操作的具体内容。

感谢

这次文章中讲解的项目和成果都不是我的,这篇文章只是我在踩坑很多遍以后进行的整理和总结,在此感谢DJY和Kimocoder,以及其他开发者为内核作出的贡献;drpradsms,以及其他开发者为PiXeN做出的贡献(个人感觉是一加6上最好用的ROM了);Some_Random_Username和其他开发者为整理线刷救砖包作出的贡献;Offensive Security及整个社区为NetHunter的开发和维护作出的贡献;TWRP,Magisk,Busybox等等的开发者团队带来的非常实用的工具。