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

Docker on Android?

  •  1
     
  •   fox0001 · 2017-07-30 22:05:29 +08:00 · 12640 次点击
    这是一个创建于 2433 天前的主题,其中的信息可能已经有所发展或是发生改变。
    近来为了追番某动画而装了优酷客户端,即使用“冰箱”封了,且禁用非必要权限,还是生成一堆垃圾文件,感觉手机被 QJ 了!真是逼死强迫症!

    于是想,能不能给它个类似 docker 的环境?关闭程序后,就自动清理生成在 sdcard 的垃圾文件?

    或者说能不能修改 ART,把提供给它的 sdcard 目录设置为虚拟目录(或者是存放在内存的临时目录)之类?

    甚至可否做个软件,可以设置特定 apk 所获得访问的 sdcard 路径为用户设定的虚拟目录?

    如果实现了这个需求,那么,Android 手机应该就可以放心使用任何国产流氓 apk 了吧?
    41 条回复    2017-08-25 12:27:03 +08:00
    lxml
        1
    lxml  
       2017-07-30 22:12:20 +08:00
    绿色守护作者新作 island,某种程度上符合你的要求,可以去看看(文件管理虚拟目录就别想了)。
    tubanwu
        2
    tubanwu  
       2017-07-30 22:20:53 +08:00
    @lxml 这是。。。galgame ?
    Microi
        3
    Microi  
       2017-07-30 22:24:53 +08:00
    放心使用?不存在的。
    zander
        4
    zander  
       2017-07-30 22:28:22 +08:00
    垃圾文件无解,Google 的锅。
    little_cup
        5
    little_cup  
       2017-07-30 22:30:42 +08:00   ❤️ 1
    使用 Island 即可。
    little_cup
        7
    little_cup  
       2017-07-30 22:32:20 +08:00
    岛( Work Profile )内的 App 读到的 SD 卡文件夹是和 Owner Profile 隔离的,销毁岛的时候会被整体删除掉。
    fox0001
        8
    fox0001  
    OP
       2017-07-30 22:48:02 +08:00 via Android
    @zander 所谓垃圾文件,是指在 sdcard 下生成一些点号(.)开头的文件夹,里面一般是记录用户状态或用户标识的数据、或是什么临时文件等等。虽然几乎不占空间,但是弄得 sdcard 目录很乱
    coolcoffee
        9
    coolcoffee  
       2017-07-30 22:57:41 +08:00
    😔, 为什么我一开到这种问题就想说为什么不用 iOS 呢? iOS 的沙盒卸载后就什么都没了。
    jyf007
        10
    jyf007  
       2017-07-30 23:16:56 +08:00 via Android
    lxc
    ysc3839
        11
    ysc3839  
       2017-07-31 00:04:04 +08:00 via Android
    Island . MIUI 的应用分身用的也是相同的技术。
    ysc3839
        12
    ysc3839  
       2017-07-31 00:06:21 +08:00 via Android
    @coolcoffee Android 也有 private 的数据空间,也是删掉就没了,并不是有什么缺陷。只不过 Android 还多了个 shared 空间。
    coolcoffee
        13
    coolcoffee  
       2017-07-31 00:24:28 +08:00
    @ysc3839 ios 没有文件系统这个东西,就算之后更新的可以共享文件,也不能随便乱写。 想想 Android 下面,每个应用都创建一个自己的文件夹,卸载的时候往往又忘记删。iOS 卸载后,默认连同数据一同消失。
    ysc3839
        14
    ysc3839  
       2017-07-31 00:46:01 +08:00 via Android
    @coolcoffee 我觉得你还是没搞明白我的意思。

    Android 和 iOS 都给每个应用一块 private 的空间,用户和其他应用都不能访问。
    Android 还多了一块 shared 的空间,授权了之后可以访问。

    private 空间中的数据是会随卸载而删除的,shared 的不会。

    Android 也不能随便乱写 shared 空间,要用户授权。而且不是每个应用都会写。

    另外,卸载时也没有机会给应用删除 shared 中的数据。
    asde111
        15
    asde111  
       2017-07-31 02:00:08 +08:00 via Android
    我有和楼主类似的需求,找到了这个
    https://www.coolapk.com/apk/lantian.nolitter
    但是 1. 需要 xposed 框架. 2. 本人没用过,使用后果自负
    anheiyouxia
        16
    anheiyouxia  
       2017-07-31 06:50:56 +08:00 via Android
    @ysc3839 只有 APP 写入到外置卡根目录的时候才需要用户授权的,内置卡任意位置都无需用户授权
    greenskinmonster
        17
    greenskinmonster  
       2017-07-31 07:28:52 +08:00 via Android
    @asde111 nolitter 我用过,对大部分软件生效,但是 xposed 不能 hook 原生代码,所以使用原生代码创建目录文件的应用无效。
    kamen
        18
    kamen  
       2017-07-31 09:00:45 +08:00
    @anheiyouxia #16 你可能用了假的安卓
    s3040608090
        19
    s3040608090  
       2017-07-31 09:03:17 +08:00 via Android
    也可以直接创建一个新用户来装优酷,追完番把这个用户删掉得了。不过很多国产 rom 都把多用户功能阉割了。
    Vicer
        20
    Vicer  
       2017-07-31 09:37:16 +08:00 via Android
    @little_cup 没玩明白
    anheiyouxia
        21
    anheiyouxia  
       2017-07-31 10:19:49 +08:00 via Android
    kamen
        22
    kamen  
       2017-07-31 10:26:29 +08:00
    @anheiyouxia #21 基于 AOSP 的系统
    ivechan
        23
    ivechan  
       2017-07-31 13:04:33 +08:00
    这不是 MIUI 的分身功能吗? 不过 MIUI 分身比较臃肿就是了.
    ysc3839
        24
    ysc3839  
       2017-07-31 13:37:00 +08:00 via Android
    @anheiyouxia 亲测,三星 S5,刷了 Lineage OS,装了 SD 卡。Soild Explorer 文件管理器,不授权存储空间权限,内部存储和 SD 卡都不能访问。
    anheiyouxia
        25
    anheiyouxia  
       2017-07-31 19:11:07 +08:00 via Android
    @ysc3839 Lineage OS 的功能如何?对付国内流氓的唤醒有妙招吗?现在用一加 3T 的氢 OS,动不动就杀后台,加入白名单都还杀
    @kamen 好的,谢谢告知。
    ysc3839
        26
    ysc3839  
       2017-07-31 19:43:05 +08:00 via Android
    @anheiyouxia 对于我来说缺少网速显示,可以考虑刷 RR,其他好像没什么。唤醒问题我用绿色守护,但是京东还是能唤醒。
    yingfengi
        27
    yingfengi  
       2017-07-31 20:05:15 +08:00
    手机很久没打开文件管理了
    lovesky
        28
    lovesky  
       2017-07-31 20:25:15 +08:00 via Android
    虚拟目录 你这个需求用安卓多开就可以办到
    zuolan
        29
    zuolan  
       2017-07-31 20:31:35 +08:00
    想把 Docker 移植到 Android,内核就不够吧,Android 连 user namespace 都没有。感觉是个麻烦事。
    cmzy
        30
    cmzy  
       2017-07-31 20:33:01 +08:00   ❤️ 2
    我正在做一个类似的 app,叫闪电盒子。近期上线,大家可以试试。。完全满足你的要求。
    goodmani
        31
    goodmani  
       2017-07-31 21:12:09 +08:00
    移动版 Ubuntu 才是未来
    anheiyouxia
        32
    anheiyouxia  
       2017-07-31 21:27:05 +08:00
    @ysc3839 好的谢谢
    weiyichen2011
        33
    weiyichen2011  
       2017-08-01 09:38:18 +08:00
    "把提供给它的 sdcard 目录设置为虚拟目录"
    是有的,在以前没和谐的酷安上见到过。现在的话搜索 sdcard 出来的全是不相关 app,很遗憾找不到了。
    fox0001
        34
    fox0001  
    OP
       2017-08-01 12:01:04 +08:00 via Android
    @weiyichen2011 谢谢。另外,酷安已经不是以前的酷安了
    Arnie97
        35
    Arnie97  
       2017-08-01 13:10:47 +08:00
    @fox0001 自从 Android 2.3 就开始用酷安了,实名制一折腾有点无所适从
    fox0001
        36
    fox0001  
    OP
       2017-08-01 16:30:56 +08:00 via Android
    @Arnie97 当时发现酷安的 apk 是 market (现在叫 Play )上直接拉下来的,然后一直很放心用这个网站上的 apk。现在只能直接访问 Play 了
    fox0001
        37
    fox0001  
    OP
       2017-08-01 16:31:43 +08:00 via Android
    @goodmani 洗洗睡吧,官方已不再开发了
    onemoo
        38
    onemoo  
       2017-08-01 23:58:09 +08:00
    我也有这样的需求。类似于给每个选定的 app 一个独立的沙盒环境。
    目前在用 island,只不过它利用 work profile 只是相当于开了另一个虚拟环境,并不是针对每个 app 的。不过至少做到了和主环境的隔离,联系人也是隔离的。 我是把我讨厌的 app 都扔到 island 中了。


    @cmzy # 30 期待您的作品! 可以先介绍下它的工作方式吗?是提供虚拟目录?还是更进一步地沙盒化 app ?
    codehz
        39
    codehz  
       2017-08-02 09:58:02 +08:00
    安卓默认阉割了命名空间功能,OverlayFS 等等(这些功能都是 docker 启动的必备之物),不过可以修改编译配置来重新启用。
    不过关键问题在于,即使用上了 docker (还有很多兼容问题难以解决),也是只能跑终端应用——因为安卓系统服务采用的 binder 和命名空间是不兼容的。。。在 docker 中启动的 zygote 并不能正确的显示界面——直接段错误退出了,因此,如果要实现 Docker for Android,势必要给内核打补丁,修改 Binder 的实现,以期和命名空间机制相互兼容。(这就非常困难了)
    不过考虑到大多数人的需求,我觉得只需要隔离文件就可以了——仅仅用 FileSystem Namespace 做的话,应该就差不多了,每个 userid 建立一个命名空间(只在首个进程启动时建立,随后启动的进程直接复用原有的命名空间)然后每个命名空间挂载不同的 sdcard。。删除用户时删除对应的文件夹
    qyxx
        40
    qyxx  
       2017-08-04 13:19:40 +08:00
    跟 Docker 完全没联系的东西,被标题骗了
    cmzy
        41
    cmzy  
       2017-08-25 12:27:03 +08:00
    @onemoo 已经上线了,你可以试用一下,叫闪电盒子,360 和腾讯市场都可以搜索到。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1091 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:55 · PVG 02:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.