怕啥来啥
昨天晚上约定的晚上11点发布测试环境的热更,小杨同学说了:“怕啥来啥”,果然,安卓测试的app周一就扔出去了,约定好的今天晚上热更,结果发了热更移动端却检测不到。
晚上跟ios前端同事折腾了两次,但是无果而终,甲方粑粑不乐意了。
客户有意见了哈.png今天开始解决这个问题。
解决方案过程讨论
- 背景:
1、发出去之前确实做过热更测试,不过现在看来,当时测是测了,但是测试的环境一直停留在debug环境。
2、如果本地代码和服务器上最新的热更包是一样的话,推送热更是不会成功的。
- 第一步,热更是否推送成功?
1、小杨同学在他的环境下发了ios的推送,测试完美以后,又发了android的热更。遗憾的是手机上启动检测不到更新。
后来再更新代码,发了几次,无果。
- 第二步,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!!!
前端路漫漫,且采坑且记录~~~~
网友评论