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


安卓测试环境检测不到热更,问题发现、排查思路及解决
简书地址

怕啥来啥

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

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

客户有意见了哈.png

今天开始解决这个问题。

解决方案过程讨论

  • 背景:

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

  • 第一步,热更是否推送成功?
    1、小杨同学在他的环境下发了ios的推送,测试完美以后,又发了android的热更。遗憾的是手机上启动检测不到更新。
    后来再更新代码,发了几次,无果。

热更history

  • 第二步,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,结果确实是匹配的
    安卓logcat日志

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

结果是一样的。
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后
code push history

重新发起热更
code push

很遗憾仍然没有生效。此时本地的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时报错,所有的库都找不到,错误信息如下:
android sync error

参考本文提示,发现配置少了一项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!!!

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

相关文档


评论
  目录