Google Play app signing 最终完美解决方式+packer-ng渠道包信息添加

      App在经历重重磨难之后,终于在Google Play商店上架,满怀自信下载体验,结果微信登录异常,提示签名不一致,[黑人疑问]

      查找原因之后,发现是在上传App过程中,勾选了「谷歌签名保护计划」。所谓的「谷歌签名保护计划」,简单来说,就是apk上传到Google Play后,Google Play会替换APK本地签名,实际上用户下载的APK的签名并不是你最初上传的签名,而是 Google Play 自己的签名,这个签名存放在 Google 服务器,我们是不能下载的。这就导致了线上版本和本地版本的签名不一致, facebook 登录失败,google 登录失败、微信登录失败......

     线上版本APK开发者在发版之前是可以下载的,在上传App之后,右边有个下载入口点击下载,弹出下面浮窗注意,原始APK是本地签名的,派生APK就是Google Play商店用户下载的APK,也就是经过Google Play再次签名生成的APK。前面说了,勾选谷歌签名保护计划之后,Google会自动提供一个跟本地签名不一致的app signing,这就是导致线上版本和本地版本的签名不一致的原因。

      那么如何解决这个问题呢?第一种方案,如果App还未发布,重新创建一个同包名应用,不勾选谷歌签名保护计划,具体参考重新创建项目,不启用app signing。第二种方案,App已经发布,这个时候不能重新创建新的同包名应用,只能修改Google Play app signing,具体参考Android Google Play app signing 最终完美解决方式关于Google Play app signing的坑 以及最终完美解决方式(替换自己的签名)GooglePlay重签名引发的第三方失效,统一解决有效,上面文章已经踩过坑,利用经验顺利替换Google Play app signing跟本地签名一样。

      至此,Google Play app signing签名不一致的问题就解决了,微信登录也能正常使用。项目使用的是packer-ng多渠道打包,通过packer-ng打的渠道包在下载派生APK分析渠道信息发现,APK的签名信息为null,[黑人疑问],仔细分析还是因为Google Play重新签名导致渠道信息丢失,也有人遇到相同问题,那只能通过在AndroidManifest.xml配置渠道信息,我把配置信息代码贴下来,仅供参考
AndroidManifest.xml

<!--google play渠道包只能放在xml写死,不能使用packer-ng添加渠道信息-->
<meta-data
   android:name="XX_CHANNEL_NAME"
   android:value="${XX_CHANNEL_VALUE}" />

获取渠道的工具类,MetaDataUtils是接入的blankj工具类,读者亦可以从网上搜索如何获取metaData数据。

    /**
     * 获取渠道名称
     */
    public String getChannel() {
        if (TextUtils.isEmpty(channel)) {
            channel = PackerNg.getChannel(Utils.getApp());
            // 如果没有使用PackerNg打包添加渠道,默认返回的是"自定义渠道名"
            if (TextUtils.isEmpty(channel)) {
                channel = MetaDataUtils.getMetaDataInApp("XX_CHANNEL_NAME");
            }
            if (TextUtils.isEmpty(channel)) {
                channel = "自定义渠道名";
            }
        }
        return channel;
    }

app 主module配置,isJPushDefaultModel是区分google和普通App使用的极光SDK,极光SDK做成组件化,读者可以不用理会这里的逻辑。

    flavorDimensions "abi"
    productFlavors {
        if (isJPushDefaultModel) {
            //默认渠道,以packer-ng多渠道打包为主,否则为该值
            XX {
                dimension "abi"
            }
        } else {
            //google play渠道包只能放在xml写死,不能使用packer-ng添加渠道信息
            google {
                dimension "abi"
            }
        }
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [XX_CHANNEL_VALUE: name]
        }
    }


      

参考文章:
Google Play app signing相关
0、重新创建项目,不启用app signing
1、Android Google Play app signing 最终完美解决方式
2、关于Google Play app signing的坑 以及最终完美解决方式(替换自己的签名)
3、GooglePlay重签名引发的第三方失效,统一解决有效
多渠道配置相关
flavorDimensions和productFlavors——安卓gradle 强烈安利这篇博客,里面的内容好全
packer-ng-plugin多渠道打包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章