[TOC] # Android端常见问题解决方案 ## 当前运行环境无法运行启用“自定义组件模式”的uni-app应用 HBuilderX1.9.0及以上版本uni-app项目启用“自定义组件模式”,运行为APP时做了底层性能优化,可能出现兼容性问题引起白屏现象。 HBuilderX1.9.4及以上版本会自动检查基座环境是否支持启用“自定义组件模式”,如果不支持则会弹出以下提示框 ![](https://kan.xiaoyulive.top/uniapp/025.png) 解决方案: 将`uniapp-release.aar`放于`app/libs`目录下,并在`app/build.gradle`中添加以下依赖: ```groovy dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.aar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' /*uniapp所需库-----------------------开始*/ implementation 'com.android.support:recyclerview-v7:26.1.0' implementation 'com.facebook.fresco:fresco:1.13.0' implementation "com.facebook.fresco:animated-gif:1.13.0" /*uniapp所需库-----------------------结束*/ // 基座需要,必须添加 implementation 'com.github.bumptech.glide:glide:4.9.0' // 基座依赖 implementation 'com.alibaba:fastjson:1.1.46.android' } ``` 参考: - [当前运行环境无法运行启用“自定义组件模式”的uni-app应用问题](https://ask.dcloud.net.cn/article/35877) - [uni-app离线打包Android平台注意事项](https://ask.dcloud.net.cn/article/35139) ## uni-app运行环境版本和编译器版本不一致 HBuilderX1.7.0及以上版本uni-app添加了运行环境版本和编译环境版本的校验机制,当两个版本不一致时会弹出以下提示: ![](https://kan.xiaoyulive.top/uniapp/026.png) 名词解释: **手机端SDK版本** 是指5+Runtime的版本号。云打包提交云端打包时确定的,也就是说生成apk/ipa之后,APP运行环境就不会改变了。离线打包时是你下载的sdk的版本。只有默认真机运行基座、云打包机的引擎是和HBuilderX升级而自动升级的。如果你使用了自定义基座、sdk离线打包,需要手动升级,或者重新用新版制作自定义基座,或者下载最新版sdk。 下图为离线打包时的SDK版本号: ![](https://kan.xiaoyulive.top/uniapp/027.png) **HBuilderX版本** 如果项目是HBuilderX创建的,则是HBuilderX的版本号,更新HBuilderX会改变;如果是cli创建的项目,即根目录是`package.json`,那么编译环境版本号是创建cli时生成的,或者上一次执行`npm update`生成的。不管HBuilderX如何升级,cli项目的编译器并不会跟随HBuilderX升级而升级,需手动升级。 下图为HBuilderX的版本号 ![](https://kan.xiaoyulive.top/uniapp/028.png) 找了半天cli的版本,不知道在哪,经过仔细观察,应该是这个了: ![](https://kan.xiaoyulive.top/uniapp/029.png) [npm地址:@dcloudio/vue-cli-plugin-uni](https://www.npmjs.com/package/@dcloudio/vue-cli-plugin-uni) ![](https://kan.xiaoyulive.top/uniapp/030.png) 将其拆一下,就成了: ``` 2.6.9.20200424005 ``` 吐槽:uni-app的版本是个迷,版本号不规范到了极点,哎,脑阔疼。 解决方案: 如果使用本地打包,确保本地的SDK的版本号与cli或HX的版本号一致。 如果使用云端打包,如果正式打包,版本号将与云端SDK版本号一致;如果使用自定义基座,版本号将与你系统中的HX版本号一致)。 如果想要忽略提示,可以在`manifest.json`中配置: ```json { ... "app-plus" : { ... "compatible": { "ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持 }, }, } ``` 参考: - [uni-app运行环境版本和编译器版本不一致的问题](https://ask.dcloud.net.cn/article/id-35627) ## exception function:createInstance 错误详情: ``` [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')](https://blog.csdn.net/weixin_43343144/article/details/98085487)