
根本需求是后台静默更新 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 定制安卓设备,所以看起来这是最好的方案了?
1 cwxiaos 329 天前 via iPhone 两仪开源的,作者弃坑了,是一个完整的虚拟机 另外是 virtualapp,是沙盒方案 |
2 tyzandhr 329 天前 via Android virtualapp 开源而不开放,是收费的 |
3 alphaControler 329 天前 via Android 我看 OP ,应该设备是自己的,找人把设备给 root 了,就可以拥有各种权限了。直接替换 launcher 和系统级的 updater ,理论上是可以解决的。 |
4 alphaControler 329 天前 via Android @alphaControler 1.自己写一个 launcher APP ,然后使用跨进程拉起自己的 APP , 2.把当前 APP 的首页返回键退出 APP 事件拦截掉 3.在 launcher 中把 home 键拦截并改成拉起自己的游戏应用 4.launcher 可以通过生命周期感知到当前用户在用还是未在用,直接后台控制静默升级。 有 root 权限,这些都是可以做到的。 |
5 zsh2517 329 天前 (只是一个猜想)全部开放 adb 是否可行?目前 adb pair + connect 的机制应该有一定的安全性(或者走有线)。adb 本身是可以安装软件( adb install )和拉起 activity ( adb shell am start )的,然后也支持远程控制(参考如 scrcpy ) |
6 liyafe1997 OP @alphaControler 这不是一个可持续的方案,不是什么设备都能 root |
7 liyafe1997 OP @zsh2517 adb 127.0.0.1 ?感觉可能不太稳定?应该每次重启后都要重新 pair 吧? |
8 zsh2517 329 天前 @liyafe1997 设备数量不多的话可以考虑有线,授权后就可以一直用。无线的话,每次重启之后可能需要打开无线调试功能,然后识别地址 |
9 zsh2517 329 天前 好像有个叫做 mdns 的东西,会自动发现网络下的已配对的设备。具体能不能用可以试试 |
10 alphaControler 329 天前 via Android @liyafe1997 不是自己采购设备,植入软件,再出售设备吗? |
11 s82kd92l 329 天前 via Android 我理解工业软件更多的是要读取 android 上的各种传感器数据,gui 要求不高。这种情况 termux 里面的任何可执行文件都可以满足传感器读取加上传需求,需要 gui 的就简单写个 web 节目得了 |
12 liyafe1997 OP @alphaControler 不出售,内部用 |
13 liyafe1997 OP @s82kd92l 可不是简单 UI ,上面说了整个系统是用 Unity3D 开发的,包含大量 3D 画面。如果把 unity 打包成 web 再浏览器 127.0.0.1 我觉得稳定性堪忧,而且浏览器不一定能 handle 住 |
14 r6cb 328 天前 不需要这么麻烦,获得无障碍权限就能实现无需用户介入的 apk 安装和更新了。只需要额外一个 app 保持后台常驻负责对目标 app 进行更新。这个额外的 app 甚至用现有的 tasker 就行。 |
15 HilaryL789 328 天前 一楼说的对,有 KernelSU 作者弃更的两仪可以深度定制的,源码 GitHub 上也有 |
16 liyafe1997 OP @r6cb 好主意 |
17 murmurkerman 327 天前 via iPhone 可以自己写插件加载,其实很简单的。只需要用 DelegateLastClassloader 加载插件 apk 的 dex 和 so ,复制插件 androidmanifest 到宿主应用。我之前写过类似的代码,对指定业务场景可用。你可以看看你的应用 |
18 cyningxu 320 天前 via Android 你都是 unity 编译的 so 了,直接动态替换 so 不就行了 |