Android 有签名私钥,有办法覆盖升级非同名包吗?场景是公司收购了一个英国独立开发者的作品,包名里有作者姓名,看起来不够专业,公司决定换掉,但是这样原有用户更新不方便。有没有最佳实践? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX    Android

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

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

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

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

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

    看你这个场景是 toc 的 app ,劝你领导趁早放弃,你也省得麻烦。不然你司收购的这个 app 所携带的老用户基本归零
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2602 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:45 PVG 18:45 LAX 02:45 JFK 05:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86