一句话原理:

通过安卓软件Linux Deploy运行Linux系统(本质上是用chroot跑一个容器),在容器中运行.net core的无框架依赖独立应用程序。

* 因为安卓系统的环境非常不完整,所以我将应用直接发布到安卓手机的尝试以失败告终,而Linux Deploy所运行的Linux由于是一个完整的系统,所以可以正常运行发布的程序。所运行的程序并不局限于.net core,其它带arm发行版的应用一样可以跑,python、java的应用也没有问题。

流程:

  1. 因为Linux Deploy要求ROOT权限,所以首先需要ROOT手机(不同手机ROOT方法不一样,我的是红米K20 Pro);
    • 下载小米官方的MiFlashUnlocker,解锁手机的bootloader;
    • 下载twrp,用fastboot命令刷入recovery(有的资源里会自带一个刷recovery的批处理,直接运行即可);
      • fastboot flash recovery twrp-3.3.1-25-raphael-mauronofrio.img
      • fastboot boot twrp-3.3.1-25-raphael-mauronofrio.img
    • 重启进入twrp,在设置中替换旧版recovery,改为由刚刷入的twrp启动,以防止覆盖;
    • (下面是K20 Pro线刷模式的刷机流程,我用的刷机包是Pixel Experience)仍然在fastboot模式下,用MTP上传底包和刷机包;
    • 进入安装菜单,依次添加底包、刷机包,然后开始刷机;
    • 清除cache/dalvik;
    • 格式化data;
    • 进入系统并完成初始化过程。
  2. 在手机上安装Linux Deploy应用;
  3. 创建一个kali arm64容器,配置->安装->运行(Linux Deploy主界面里,右上角是容器管理,比如“安装”、“状态查看”等功能,右下角是容器属性设置按钮,比如“Linux发行版”,“架构”,“系统版本”,“安装源”,“存储类型”,“用户名”,“ssh端口”等)
    • 右下角设置好容器属性后,点击右上角的“安装”
    • 安装完成后,即可点击主界面的“运行”来启动容器
  1. 创建一个ASP.NET Core Web应用程序做为demo(在/Home/Index输出一些硬件、系统、运行环境相关的信息,并使用webclient请求一个公网IP的api,输出手机的公网地址),以无框架依赖的独立模式和linux-arm64运行时进行编译,最后将publish目录上传到容器中;
  1. ssh到容器,运行publish里的应用,并通过nginx反向代理发布应用;
    • 安装nginx,配置反向代理,发布http://localhost:81到80端口
    • 运行nginx,运行arm-demo应用
  1. 访问发布的服务

分类: articles