作為一個cordova小白,我按照官方文檔和網上資料完成了講vue文件打包到cordova中並打包成apk文件,完成了一個簡單app的制作,當我正陶醉於可以自己完成一個app的時候突然發現,我的app居然無法訪問服務器數據,這時我瘋狂地去找解決方案,然而可能是我的搜索能力太差了,一直沒有找到解決方法,最后當我即將放棄的時候發現了一個方法,覺得它是比較靠譜的,果不其然,解決了我的問題。
出現這種原因是因為我安裝的android sdk是屬於高版本的,在高版本的android sdk中默認開啟了對非加密的明文傳輸的保護,我們無法通過http網絡請求的方式獲取數據。
解決方案如下(取一即可):
1. android sdk27及以上有這種限制,可以將android sdk降低到26版本。降低android版本可以通過命令cordova platform remove android 再 cordova platform add android@6.3.0,當我們打包時候就會自動給我們下載安裝對應版本。
2. 在目錄project\platforms\android\res\xml添加文件network-security-config.xml,插入內容如下
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
在project\platforms\android\app\src\main\AndroidManifest.xml文件中修改,修改內容如下
<?xml version="1.0" encoding="utf-8"?> <manifest> <application android:networkSecurityConfig="@xml/network_security_config"> </application> </manifest>
3. 可以使用https調用數據接口
4.在AnroidManifest.xml中的application添加設置項:
<application android:usesCleartextTraffic="true">
此上方法任選一個應該可以解決這個問題。