美文网首页
海尔创客汇笔记----安卓测试环境检测不到热更

海尔创客汇笔记----安卓测试环境检测不到热更

作者: 小马将过河 | 来源:发表于2018-11-03 19:20 被阅读0次
    timg.jpg

    怕啥来啥

    昨天晚上约定的晚上11点发布测试环境的热更,小杨同学说了:“怕啥来啥”,果然,安卓测试的app周一就扔出去了,约定好的今天晚上热更,结果发了热更移动端却检测不到。

    晚上跟ios前端同事折腾了两次,但是无果而终,甲方粑粑不乐意了。

    客户有意见了哈.png

    今天开始解决这个问题。

    解决方案过程讨论

    • 背景:

    1、发出去之前确实做过热更测试,不过现在看来,当时测是测了,但是测试的环境一直停留在debug环境。
    2、如果本地代码和服务器上最新的热更包是一样的话,推送热更是不会成功的。

    • 第一步,热更是否推送成功?
      1、小杨同学在他的环境下发了ios的推送,测试完美以后,又发了android的热更。遗憾的是手机上启动检测不到更新。
      后来再更新代码,发了几次,无果。
    image.png
    • 第二步,app检查逻辑是否正常?
      app启动时做了检查日志处理:
     // 热更-检查更新
      codePushCheckForUpdate = () => {
        CodePush.checkForUpdate().then((update) => {
          if (!update) {
            console.log('已是最新版本...');
          } else {
            console.log('有新版本-------', update);
            const packageSize = parseFloat(update.packageSize / 1024 / 1024).toFixed(2);
            console.log('packageSize', packageSize);
            this.setState({ totalSize: packageSize });
            this.showUpdateInfoAlert(update);
          }
        });
      }
    

    安卓手机启动查看log,结果确实是匹配的


    image.png
    • 第三步,发送推送的环境和已有app的原生代码有区别导致的?
      把本地所有代码暂存,直接发布热更。


      image.png

    结果是一样的。


    image.png
    • 第四步,把代码切换到打包时的commit,然后发热更。
      怀疑是如下的这种代码有区别导致的。


      image.png

    切换到当时打包的那次commit,重新发热更。


    image.png

    很遗憾,结论是一样的。

    image.png

    告诉甲方粑粑,然后用最新的代码打个包,这就睡觉了。

    热更记录硬删除测试

    在热更数据库强制删除热更记录

    DELETE FROM codepush.deployments_historyWHERE  id=192;
    DELETE FROM codepush.deployments_historyWHERE  id=193;
    DELETE FROM codepush.deployments_historyWHERE  id=194;
    DELETE FROM codepush.deployments_history WHERE  id=195;
    
    DELETE FROM codepush.packages WHERE  id=192;
    DELETE FROM codepush.packages WHERE  id=193;
    DELETE FROM codepush.packages WHERE  id=194;
    DELETE FROM codepush.packages WHERE  id=195;
    
    DELETE FROM codepush.packages_metrics WHERE  id=192;
    DELETE FROM codepush.packages_metrics WHERE  id=193;
    DELETE FROM codepush.packages_metrics WHERE  id=194;
    DELETE FROM codepush.packages_metrics WHERE  id=195;
    
    DELETE FROM codepush.packages_diff WHERE  id=450;
    DELETE FROM codepush.packages_diff WHERE  id=451;
    DELETE FROM codepush.packages_diff WHERE  id=452;
    DELETE FROM codepush.packages_diff WHERE  id=453;
    DELETE FROM codepush.packages_diff WHERE  id=454;
    DELETE FROM codepush.packages_diff WHERE  id=455;
    
    DELETE FROM codepush.deployments_versions WHERE  id=43;
    
    

    删除4次1.5.1的code-push后


    image.png

    重新发起热更


    image.png

    很遗憾仍然没有生效。此时本地的debug环境一个app启动后,发现居然提示更新。

    问题来了,可能是热更和检查热更不在一个频道上

    检查安卓热更配置,果然验证了这一猜测。

        buildTypes {
            debug {
                ext.alwaysUpdateBuildId = false // 避免 crashLytics 的alwaysUpdateBuildId每次编译都重新生成 加快编译速度
                buildConfigField "String", "CODEPUSH_KEY", '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"' // Staging
            }
            release {
                signingConfig signingConfigs.release
                minifyEnabled enableProguardInReleaseBuilds
                proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
                buildConfigField "String", "CODEPUSH_KEY", '"pppppppppppppppppppppppppppppp"' //Production
            }
        }
    
    一个解释:配置里只有debug(Staging)和release(Production)的配置,配置了不同的deployment

    key,但因为打测试环境的app时,选择的是release,所以,按照这个配置,只有发在Production的上的热更,app启动时才能检查到,而现在一直在用Staging发。

    修改配置

        buildTypes {
            debug {
                ext.alwaysUpdateBuildId = false // 避免 crashLytics 的alwaysUpdateBuildId每次编译都重新生成 加快编译速度
                buildConfigField "String", "CODEPUSH_KEY", '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"' // Staging
            }
            beta {
                signingConfig signingConfigs.release
                minifyEnabled enableProguardInReleaseBuilds
                buildConfigField "String", "CODEPUSH_KEY", '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"' //Staging
            }
            release {
                signingConfig signingConfigs.release
                minifyEnabled enableProguardInReleaseBuilds
                proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
                buildConfigField "String", "CODEPUSH_KEY", '"pppppppppppppppppppppppppppppp"' //Production
            }
        }
    

    sync时报错,所有的库都找不到,错误信息如下:


    image.png

    参考本文提示,发现配置少了一项matchingFallbacks = ['release', 'debug'],添加到beta配置后,build成功。

    beta {
        signingConfig signingConfigs.release
        minifyEnabled enableProguardInReleaseBuilds
        buildConfigField "String", "CODEPUSH_KEY", '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"' //Staging
       matchingFallbacks = ['release', 'debug']
    }
    

    build后,重新打包,选择beta包,


    首页菜单改成【专属应用】,发热更,而且强更。


    code-push.png

    app启动测试:


    suceess

    检查应用更新数,果然有更新(此处我截图时已经成功了两次)


    image.png

    success!!!

    前端路漫漫,且采坑且记录~~~~

    相关文档

    相关文章

      网友评论

          本文标题:海尔创客汇笔记----安卓测试环境检测不到热更

          本文链接:https://www.haomeiwen.com/subject/vmokxqtx.html