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

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!!!

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

相关文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,539评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,126评论 2 59
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,258评论 19 139
  • “书籍是人类进步的阶梯”,高尔基曾说过这句话,我看过高尔基的许多书,其中我最喜欢高尔基亲身经历的《童年》,它...
    星辰紫倾阅读 550评论 0 0
  • 紫煊: 我亲爱的宝贝!妈妈为你轻松自在称赞。 今天,妈妈请了一天假,为了调整自己,也为了下午你的家长开放日...
    窚煊阅读 270评论 1 1