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

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

  •  
  •   liyafe1997 · 20 天前 via Android · 2350 次点击

    根本需求是后台静默更新 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  
       20 天前 via iPhone
    两仪开源的,作者弃坑了,是一个完整的虚拟机

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

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