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

24 天前
liyafe1997  liyafe1997

根本需求是后台静默更新 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 定制安卓设备,所以看起来这是最好的方案了?

2436 次点击
所在节点   Android  Android
18 条回复
cwxiaos
cwxiaos
24 天前
两仪开源的,作者弃坑了,是一个完整的虚拟机

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

有 root 权限,这些都是可以做到的。
zsh2517
zsh2517
23 天前
(只是一个猜想)全部开放 adb 是否可行?目前 adb pair + connect 的机制应该有一定的安全性(或者走有线)。adb 本身是可以安装软件( adb install )和拉起 activity ( adb shell am start )的,然后也支持远程控制(参考如 scrcpy )
liyafe1997
liyafe1997
23 天前
@alphaControler 这不是一个可持续的方案,不是什么设备都能 root
liyafe1997
liyafe1997
23 天前
@zsh2517 adb 127.0.0.1 ?感觉可能不太稳定?应该每次重启后都要重新 pair 吧?
zsh2517
zsh2517
23 天前
@liyafe1997 设备数量不多的话可以考虑有线,授权后就可以一直用。无线的话,每次重启之后可能需要打开无线调试功能,然后识别地址
zsh2517
zsh2517
23 天前
好像有个叫做 mdns 的东西,会自动发现网络下的已配对的设备。具体能不能用可以试试
alphaControler
alphaControler
23 天前
@liyafe1997 不是自己采购设备,植入软件,再出售设备吗?
s82kd92l
s82kd92l
23 天前
我理解工业软件更多的是要读取 android 上的各种传感器数据,gui 要求不高。这种情况 termux 里面的任何可执行文件都可以满足传感器读取加上传需求,需要 gui 的就简单写个 web 节目得了
liyafe1997
liyafe1997
23 天前
@alphaControler 不出售,内部用
liyafe1997
liyafe1997
23 天前
@s82kd92l 可不是简单 UI ,上面说了整个系统是用 Unity3D 开发的,包含大量 3D 画面。如果把 unity 打包成 web 再浏览器 127.0.0.1 我觉得稳定性堪忧,而且浏览器不一定能 handle 住
r6cb
r6cb
22 天前
不需要这么麻烦,获得无障碍权限就能实现无需用户介入的 apk 安装和更新了。只需要额外一个 app 保持后台常驻负责对目标 app 进行更新。这个额外的 app 甚至用现有的 tasker 就行。
HilaryL789
HilaryL789
22 天前
一楼说的对,有 KernelSU 作者弃更的两仪可以深度定制的,源码 GitHub 上也有
liyafe1997
liyafe1997
22 天前
@r6cb 好主意
murmurkerman
21 天前
可以自己写插件加载,其实很简单的。只需要用 DelegateLastClassloader 加载插件 apk 的 dex 和 so ,复制插件 androidmanifest 到宿主应用。我之前写过类似的代码,对指定业务场景可用。你可以看看你的应用
cyningxu
15 天前
你都是 unity 编译的 so 了,直接动态替换 so 不就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1108304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX