V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liyafe1997
V2EX  ›  Android

有没有什么开源(可定制)的,类似 VMOS 的 Android in APK 方案

  •  
  •   liyafe1997 · 2025 年 1 月 30 日 via Android · 5890 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根本需求是后台静默更新 APK (且仅在用户静默/未使用时)

    用 Unity3D 开发的工业&企业安卓软件,半无人值守,所以需要后台能自动更新且更新时机可控。

    之前想用 360 的 Replugin ,折腾了半天,加上那个插件之后各种编译报错,好不容易解决了,打开就闪退,感觉像是不太兼容 Unity 导出的 Android 项目的样子。

    也搜了下腾讯的 Shadow ,网上有人明确说 Shadow 不支持 Unity 这种“在.so 中加载 Activity”的方案。

    甚至试了下 VirtualApp ,因为理论上这玩意能直接加载未使用修改的 APK 。现在各路多开软件,包括 GBox 以及出境易这些 APK in APK 容器方案都是基于它。我试的这个: https://github.com/ServenScorpion/VirtualApp

    安装它编译好的这个容器,在里面导入我的 APK (未经任何修改),App 能启动,但是启动后 Unity 的画面黑屏,不知道为啥。

    于是就想到了 VMOS 这类“虚拟机”方案。试了下我的 App 能在 VMOS 中完美运行,所以要是我能定制这类“虚拟机”App ,比如把 launcher 及其它无用系统 app 都去掉,只留一个我的 app ,虚拟机启动后自动启动我的 app ,然后再加入一个系统级的 updater.apk 用来管理更新,感觉挺完美的。

    因为设备都是市面上采购的消费级安卓设备(手机/平板等),不考虑去找 OEM 定制安卓设备,所以看起来这是最好的方案了?

    18 条回复    2025-02-08 10:01:56 +08:00
    cwxiaos
        1
    cwxiaos  
       2025 年 1 月 30 日 via iPhone
    两仪开源的,作者弃坑了,是一个完整的虚拟机

    另外是 virtualapp,是沙盒方案
    tyzandhr
        2
    tyzandhr  
       2025 年 1 月 30 日 via Android
    virtualapp 开源而不开放,是收费的
    alphaControler
        3
    alphaControler  
       2025 年 1 月 30 日 via Android
    我看 OP ,应该设备是自己的,找人把设备给 root 了,就可以拥有各种权限了。直接替换 launcher 和系统级的 updater ,理论上是可以解决的。
    alphaControler
        4
    alphaControler  
       2025 年 1 月 30 日 via Android
    @alphaControler
    1.自己写一个 launcher APP ,然后使用跨进程拉起自己的 APP ,
    2.把当前 APP 的首页返回键退出 APP 事件拦截掉
    3.在 launcher 中把 home 键拦截并改成拉起自己的游戏应用
    4.launcher 可以通过生命周期感知到当前用户在用还是未在用,直接后台控制静默升级。

    有 root 权限,这些都是可以做到的。
    zsh2517
        5
    zsh2517  
       2025 年 1 月 30 日
    (只是一个猜想)全部开放 adb 是否可行?目前 adb pair + connect 的机制应该有一定的安全性(或者走有线)。adb 本身是可以安装软件( adb install )和拉起 activity ( adb shell am start )的,然后也支持远程控制(参考如 scrcpy )
    liyafe1997
        6
    liyafe1997  
    OP
       2025 年 1 月 30 日
    @alphaControler 这不是一个可持续的方案,不是什么设备都能 root
    liyafe1997
        7
    liyafe1997  
    OP
       2025 年 1 月 30 日
    @zsh2517 adb 127.0.0.1 ?感觉可能不太稳定?应该每次重启后都要重新 pair 吧?
    zsh2517
        8
    zsh2517  
       2025 年 1 月 30 日
    @liyafe1997 设备数量不多的话可以考虑有线,授权后就可以一直用。无线的话,每次重启之后可能需要打开无线调试功能,然后识别地址
    zsh2517
        9
    zsh2517  
       2025 年 1 月 30 日
    好像有个叫做 mdns 的东西,会自动发现网络下的已配对的设备。具体能不能用可以试试
    alphaControler
        10
    alphaControler  
       2025 年 1 月 30 日 via Android
    @liyafe1997 不是自己采购设备,植入软件,再出售设备吗?
    s82kd92l
        11
    s82kd92l  
       2025 年 1 月 30 日 via Android
    我理解工业软件更多的是要读取 android 上的各种传感器数据,gui 要求不高。这种情况 termux 里面的任何可执行文件都可以满足传感器读取加上传需求,需要 gui 的就简单写个 web 节目得了
    liyafe1997
        12
    liyafe1997  
    OP
       2025 年 1 月 31 日 via Android
    @alphaControler 不出售,内部用
    liyafe1997
        13
    liyafe1997  
    OP
       2025 年 1 月 31 日 via Android
    @s82kd92l 可不是简单 UI ,上面说了整个系统是用 Unity3D 开发的,包含大量 3D 画面。如果把 unity 打包成 web 再浏览器 127.0.0.1 我觉得稳定性堪忧,而且浏览器不一定能 handle 住
    r6cb
        14
    r6cb  
       2025 年 1 月 31 日
    不需要这么麻烦,获得无障碍权限就能实现无需用户介入的 apk 安装和更新了。只需要额外一个 app 保持后台常驻负责对目标 app 进行更新。这个额外的 app 甚至用现有的 tasker 就行。
    HilaryL789
        15
    HilaryL789  
       2025 年 1 月 31 日
    一楼说的对,有 KernelSU 作者弃更的两仪可以深度定制的,源码 GitHub 上也有
    liyafe1997
        16
    liyafe1997  
    OP
       2025 年 1 月 31 日
    @r6cb 好主意
    murmurkerman
        17
    murmurkerman  
       2025 年 2 月 1 日 via iPhone
    可以自己写插件加载,其实很简单的。只需要用 DelegateLastClassloader 加载插件 apk 的 dex 和 so ,复制插件 androidmanifest 到宿主应用。我之前写过类似的代码,对指定业务场景可用。你可以看看你的应用
    cyningxu
        18
    cyningxu  
       2025 年 2 月 8 日 via Android
    你都是 unity 编译的 so 了,直接动态替换 so 不就行了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   881 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 21:38 · PVG 05:38 · LAX 13:38 · JFK 16:38
    ♥ Do have faith in what you're doing.