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

各个 Android 应用市场的增量更新是如何做到的?

  •  
  •   tianlang1989 · 2018-08-02 17:24:08 +08:00 · 6168 次点击
    这是一个创建于 2087 天前的主题,其中的信息可能已经有所发展或是发生改变。
    增量更新的基本原理可以概括为:
    服务器对比新包与旧包的差异,然后生成差分包。
    应用市场下载差分包,在本地与旧包生成新的安装包,然后安装。
    那么问题来了,
    本地安装后的应用的 apk 一般是在 /data/app/xxx 包名 /目录下的
    只要应用市场不是系统应用的话,它是没有权限获取到旧的 apk 包的
    那么新的安卓包是如何生成的呢?
    12 条回复    2018-08-10 19:35:18 +08:00
    yukiww233
        1
    yukiww233  
       2018-08-02 17:29:22 +08:00
    获取已安装的 apk 不需要任何权限
    tianlang1989
        2
    tianlang1989  
    OP
       2018-08-02 17:33:50 +08:00
    问题被秒破,附上结论:
    /data/app 文件夹需要系统权限
    但是 /data/app/下的子文件不需要,可以正常访问
    涨知识了,此贴终结
    Hypixel
        3
    Hypixel  
       2018-08-02 18:01:48 +08:00 via Android
    差分包与旧包生成的新 apk,签名怎么处理呢?
    pdog18
        4
    pdog18  
       2018-08-02 18:07:35 +08:00 via Android
    @Hypixel 二进制合并的,合并后和新包完全一样
    Hypixel
        5
    Hypixel  
       2018-08-02 18:08:10 +08:00 via Android
    @pdog18 原来如此,谢谢
    hatsuyuki
        6
    hatsuyuki  
       2018-08-02 18:10:39 +08:00
    @Hypixel 签名是不变的
    Tyanboot
        7
    Tyanboot  
       2018-08-02 21:57:25 +08:00 via Android
    /data/app 里面是可以查看的。随便找个文件管理器就能看 /data/app 里面的 apk,不需要 root
    Lentin
        8
    Lentin  
       2018-08-02 22:12:07 +08:00 via iPhone
    apk 可以理解为就是个 zip 包,拆开重新组装而已
    gavin6liu
        10
    gavin6liu  
       2018-08-04 15:40:25 +08:00
    后端用 二进制文件算法 拆分,然后前端用 对应算法 合并就好了。

    具体用的算法常用的就 bsdiff & bspatch ,也有很多其他的很多,有的速度快但拆分包大 ... 看怎么选择。
    gavin6liu
        11
    gavin6liu  
       2018-08-04 15:42:36 +08:00
    前面有人说签名问题,因为是基于二进制的,打包出来新包数据是完全一样的,md5 hash 都是一样的。所以没有签名问题
    Trumeet
        12
    Trumeet  
       2018-08-10 19:35:18 +08:00 via Android
    @tianlang1989 甚至可以用 PM 直接获取 apk 路径..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2184 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:33 · PVG 08:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.