[TOC]
# Android端常見問題解決方案
## 當前運行環境無法運行啟用“自定義組件模式”的uni-app應用
HBuilderX1.9.0及以上版本uni-app項目啟用“自定義組件模式”,運行為APP時做了底層性能優化,可能出現兼容性問題引起白屏現象。
HBuilderX1.9.4及以上版本會自動檢查基座環境是否支持啟用“自定義組件模式”,如果不支持則會彈出以下提示框

解決方案:
將`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添加了運行環境版本和編譯環境版本的校驗機制,當兩個版本不一致時會彈出以下提示:

名詞解釋:
**手機端SDK版本**
是指5+Runtime的版本號。云打包提交云端打包時確定的,也就是說生成apk/ipa之后,APP運行環境就不會改變了。離線打包時是你下載的sdk的版本。只有默認真機運行基座、云打包機的引擎是和HBuilderX升級而自動升級的。如果你使用了自定義基座、sdk離線打包,需要手動升級,或者重新用新版制作自定義基座,或者下載最新版sdk。
下圖為離線打包時的SDK版本號:

**HBuilderX版本**
如果項目是HBuilderX創建的,則是HBuilderX的版本號,更新HBuilderX會改變;如果是cli創建的項目,即根目錄是`package.json`,那么編譯環境版本號是創建cli時生成的,或者上一次執行`npm update`生成的。不管HBuilderX如何升級,cli項目的編譯器并不會跟隨HBuilderX升級而升級,需手動升級。
下圖為HBuilderX的版本號

找了半天cli的版本,不知道在哪,經過仔細觀察,應該是這個了:

[npm地址:@dcloudio/vue-cli-plugin-uni](https://www.npmjs.com/package/@dcloudio/vue-cli-plugin-uni)

將其拆一下,就成了:
```
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端常見問題解決方案
- 微信小程序常見問題解決方案