当前运行环境无法运行启用“自定义组件模式”的uni-app应用

HBuilderX1.9.0及以上版本uni-app项目启用“自定义组件模式”,运行为APP时做了底层性能优化,可能出现兼容性问题引起白屏现象。

HBuilderX1.9.4及以上版本会自动检查基座环境是否支持启用“自定义组件模式”,如果不支持则会弹出以下提示框

📃 Android端常见问题解决方案 - 图1

解决方案:

uniapp-release.aar放于app/libs目录下,并在app/build.gradle中添加以下依赖:

  1. dependencies {
  2. implementation fileTree(include: ['*.jar'], dir: 'libs')
  3. implementation fileTree(include: ['*.aar'], dir: 'libs')
  4. implementation 'com.android.support:appcompat-v7:26.1.0'
  5. implementation 'com.android.support.constraint:constraint-layout:1.1.3'
  6. /*uniapp所需库-----------------------开始*/
  7. implementation 'com.android.support:recyclerview-v7:26.1.0'
  8. implementation 'com.facebook.fresco:fresco:1.13.0'
  9. implementation "com.facebook.fresco:animated-gif:1.13.0"
  10. /*uniapp所需库-----------------------结束*/
  11. // 基座需要,必须添加
  12. implementation 'com.github.bumptech.glide:glide:4.9.0' // 基座依赖
  13. implementation 'com.alibaba:fastjson:1.1.46.android'
  14. }

参考:

uni-app运行环境版本和编译器版本不一致

HBuilderX1.7.0及以上版本uni-app添加了运行环境版本和编译环境版本的校验机制,当两个版本不一致时会弹出以下提示:

📃 Android端常见问题解决方案 - 图2

名词解释:

手机端SDK版本

是指5+Runtime的版本号。云打包提交云端打包时确定的,也就是说生成apk/ipa之后,APP运行环境就不会改变了。离线打包时是你下载的sdk的版本。只有默认真机运行基座、云打包机的引擎是和HBuilderX升级而自动升级的。如果你使用了自定义基座、sdk离线打包,需要手动升级,或者重新用新版制作自定义基座,或者下载最新版sdk。

下图为离线打包时的SDK版本号:

📃 Android端常见问题解决方案 - 图3

HBuilderX版本

如果项目是HBuilderX创建的,则是HBuilderX的版本号,更新HBuilderX会改变;如果是cli创建的项目,即根目录是package.json,那么编译环境版本号是创建cli时生成的,或者上一次执行npm update生成的。不管HBuilderX如何升级,cli项目的编译器并不会跟随HBuilderX升级而升级,需手动升级。

下图为HBuilderX的版本号

📃 Android端常见问题解决方案 - 图4

找了半天cli的版本,不知道在哪,经过仔细观察,应该是这个了:

📃 Android端常见问题解决方案 - 图5

npm地址:@dcloudio/vue-cli-plugin-uni

📃 Android端常见问题解决方案 - 图6

将其拆一下,就成了:

  1. 2.6.9.20200424005

吐槽:uni-app的版本是个迷,版本号不规范到了极点,哎,脑阔疼。

解决方案:

如果使用本地打包,确保本地的SDK的版本号与cli或HX的版本号一致。

如果使用云端打包,如果正式打包,版本号将与云端SDK版本号一致;如果使用自定义基座,版本号将与你系统中的HX版本号一致)。

如果想要忽略提示,可以在manifest.json中配置:

  1. {
  2. ...
  3. "app-plus" : {
  4. ...
  5. "compatible": {
  6. "ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
  7. },
  8. },
  9. }

参考:

exception function:createInstance

错误详情:

  1. [ERROR] reportJSException >>>> exception function:createInstance, exception:Exception: TypeError: undefined is not an object (evaluating 'location.host')

错误原因:在浏览器端,使用window、location等浏览器对象(BOM)是允许的,但是在Android端,并不能使用这些API,可以使用条件编译进行处理。

网上看到一个类似的错误是:在uni-app中,props是无法访问this的,而在h5中是可以的,所以这个错误会在uni-app的APP端出现,而h5是正常的。详情参见:[ERROR] reportJSException >>>> exception function:createInstance, exception:Exception: TypeError: undefined is not an object (evaluating ‘this.$tokenInfoObj’)