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

Android 有签名私钥,有办法覆盖升级非同名包吗?场景是公司收购了一个英国独立开发者的作品,包名里有作者姓名,看起来不够专业,公司决定换掉,但是这样原有用户更新不方便。有没有最佳实践?

  •  
  •   drymonfidelia · 157 天前 · 6652 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。
    30 条回复    2024-06-28 15:39:43 +08:00
    Anarchy
        1
    Anarchy  
       157 天前
    看起来对于 AndroidN 以上是有相关升级机制的。
    看官方文档吧: https://support.google.com/googleplay/android-developer/answer/9842756
    hollc
        2
    hollc  
       157 天前
    先推一个小版本,出一个备份功能。然后引导用户下载新包名的 apk ,最后引导用户恢复备份。包名不一样,都无法识别为同一个程序,我猜想应该没有解决办法
    ho121
        3
    ho121  
       157 天前 via Android
    换包名推出 2.0 版本,可以和 1.0 版本共存,以后只更新 2.0 版本
    egan0606
        4
    egan0606  
       157 天前
    据我所知:包名是不可以更改的; “包名”代表应用的唯一性; “签名”防止应用篡改; 市面上比较可行的就是 2 楼、3 楼的方案; 但是再想想,真的有必要换吗? 正常用户是看不到包名的;
    pengpeng1
        5
    pengpeng1  
       157 天前
    可以让 Google 官方给你兼容下
    yinmin
        6
    yinmin  
       157 天前 via iPhone
    证书用 openssl 拆成 crt 文件和 key 文件,然后用 openssl 使用 key 文件重新生成 crt 文件,然后 openssl 合并 crt 和 key 。具体指令可以问 gpt
    xmumiffy
        7
    xmumiffy  
       157 天前
    @Anarchy 你这是换 key,他是要换包名
    mars2023
        8
    mars2023  
       157 天前
    @yinmin #6 OP 的需求是换包名,不是换签名。
    coolmint
        9
    coolmint  
       156 天前
    干脆就一直用老包名,tiktok 那包名都没换
    eleba
        10
    eleba  
       156 天前
    换包名就是换一个 app 了 大佬
    dode
        11
    dode  
       156 天前
    发布两套,官网先变更,并且发布新功能吸引客户自行升级
    keyboardCat
        12
    keyboardCat  
       156 天前
    包名无所谓,用户看不到的。
    shily
        13
    shily  
       156 天前
    @keyboardCat 赞同
    包名无所谓,用户看不到的。
    drymonfidelia
        14
    drymonfidelia  
    OP
       156 天前
    @keyboardCat
    @shily 领导觉得要换,我哪有权利决定换不换
    lakehylia
        15
    lakehylia  
       156 天前
    只能引导用户,设置一个过渡期,两套共存,过渡期完了之后干掉旧的。但是数据迁移很麻烦的。
    distance7509
        16
    distance7509  
       156 天前
    没必要换吧,换了包名又是另外一个应用了,会流失用户的
    wbrobot
        17
    wbrobot  
       156 天前
    我的理解:
    1 ,有内置升级功能,直接发布更新安装新的 apk 。
    2 ,没有内置升级,更新一个小版本,增加内置升级功能,然后发布更新安装新的 apk 。
    thepot
        18
    thepot  
       156 天前
    直接弹窗,跳转“pro 黄金版”的下载页面
    weishu
        19
    weishu  
       156 天前
    Android 支持密钥轮替,不过只有 Android 9 以上的设备支持,参考: https://source.android.com/docs/security/features/apksigning/v3?hl=zh-cn
    gucheen
        20
    gucheen  
       156 天前
    @thepot 你是懂应用开发的
    lw10645
        21
    lw10645  
       156 天前
    老包里面每次打开引导用户下载新包,并告知用户当前版本不再维护(可以编一些理由,比如政策原因啥),再给一个最终期限,然后其他所有位置都换成新包的下载入口,,这个东西需要过渡期的
    Tomatopotato
        22
    Tomatopotato  
       156 天前
    Tomatopotato
        23
    Tomatopotato  
       156 天前
    发不了文字 看我上面的图片吧
    rlds
        24
    rlds  
       156 天前
    换包名没法覆盖,建议旧版的内置更新里面引导用户更新版,其次新版的检测下是否安装了旧版引导用户卸载旧版。
    XXWHCA
        25
    XXWHCA  
       156 天前
    不可能的,app 名称好比人的名字,包名就是身份证号码,相当于这个 app 的唯一标识,如果包名可以随便修改,然后还能顶替原来的包名,就好比一个人换了身份证号,那不乱套了
    magicls
        26
    magicls  
       156 天前
    楼上提到签名轮换的倒是好心,但是没审题,题主是要换包名,不是换签名。

    我的建议是你们把新版本的 apk ,打到老版本去,出一个老版本的更新,这个更新安装之后,首次打开就把新版本装上,startActivity ,然后 finish 自己。新版本打开之后去引导用户把老版本卸载,从此只更新新版本。我们公司有个项目就是这么干的。

    代价自然是用户的体验、操作成本,还有部分反感,不过这也是没有办法的办法,你们可以提前几个版本,邮件或者挂 banner 通知用户你们打算这么做。

    有些人可能会问,既然都通知用户了,为啥不直接引导用户自己去下新版本?我想说真正待过几个项目的应该都知道,用户(尤其海外的)小白起来是非常小白的,没有人会跟着你一步步去下新版,安装,再卸旧版,只能尽可能自己做更多,让他们少做。
    retrocode
        27
    retrocode  
       156 天前
    这种实践一般是推出新包名 搭配新 icon 和 新程序名, 确保用户在手机上一眼可以认出是新程序(因与原 app 共存), 之后原有 APP 中添加更新提示引导用户更新, 至于是启动就弹窗告诉用户老应用直接停用了, 还是返回弹窗恶心人但是老 APP 还能继续用就看你们操作了
    xiaoniukuaile
        28
    xiaoniukuaile  
       156 天前
    @Tomatopotato 非常中肯的回答
    1una0bserver
        29
    1una0bserver  
       155 天前 via Android
    你不换还好,换包名的结果必然是大量用户流失,你引流到另一个软件和说明这个软件凉了差不多,用户也不是傻子,你要是恶心用户,用户完全可以要么继续用旧版要么用替代品。
    burden7
        30
    burden7  
       154 天前
    我司的内部 b 端 app 前一段在“硬性要求”下刚换了一次包名,全部用户要重新安装

    看你这个场景是 toc 的 app ,劝你领导趁早放弃,你也省得麻烦。不然你司收购的这个 app 所携带的老用户基本归零
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.