[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)
- uniapp项目搭建
- 通过cli创建uniapp项目
- uniapp平台特性
- uniapp基础
- 在uniapp中使用字体图标
- uniapp全局变量的几种实现方式
- uniapp自定义页面返回逻辑
- uniapp进阶
- 在网页中打开uniapp应用
- uniapp状态栏与导航栏
- 在uniapp中优雅地使用WebView
- uniapp Android离线打包
- Android原生工程搭建
- 在uni-app项目中集成Android原生工程
- uniapp热更新和整包更新
- Android Q启动白屏的问题
- uniapp原生插件开发与使用
- Android 原生插件使用
- uniapp基础模块配置
- uniapp定位及地图
- uniapp第三方支付、登录
- 常见问题及解决方案
- Android端常见问题解决方案
- H5端常见问题解决方案
- 微信小程序常见问题解决方案