在閱讀這篇文章之前,推薦先看一下我之前寫(xiě)的一片文章:Cordova+Crosswalk打包WebApp
這篇文章只會(huì)介紹遇到的一些坑以及解決辦法
前言
去年用Cordova做的一個(gè)webapp一直都沒(méi)有問(wèn)題,直到最近發(fā)現(xiàn)華為市場(chǎng)很多用戶反饋應(yīng)用閃退的問(wèn)題,于是準(zhǔn)備將應(yīng)用升級(jí)到Android7.1.1的版本。按照之前寫(xiě)的教程去做,遇到了很多問(wèn)題,折騰了很久,最后才運(yùn)行成功。所以在這里將我遇到的問(wèn)題整理一下,希望后面的人不要再去爬坑了。
開(kāi)始爬坑
按照我之前的教程一步步往下執(zhí)行,各種坑就開(kāi)始出來(lái)了
1.cordova platform add android出現(xiàn)錯(cuò)誤提示
執(zhí)行到 cordova platform add android 出現(xiàn)下圖的錯(cuò)誤提示,如果不處理的話build android的時(shí)候會(huì)出錯(cuò)

看提示信息,顯而易見(jiàn)是網(wǎng)絡(luò)的問(wèn)題,獲取不到這個(gè)插件,所以我們得嘗試其他的辦法來(lái)獲取
解決辦法:
我們可以通過(guò) Cordova Plugins 頁(yè)面找到 cordova-plugin-whitelist 的Github庫(kù),強(qiáng)制使用該地址去添加
cordova plugin add https://github.com/apache/cordova-plugin-whitelist
安裝成功后會(huì)出現(xiàn)下面的提示信息:

2.Android target: not installed
上面的問(wèn)題解決了,我們?cè)赽uild android之前先檢查一下環(huán)境是否配置成功,輸入: cordova requirements
問(wèn)題又來(lái)了,出現(xiàn)下圖的錯(cuò)誤提示:

提示信息里說(shuō)Android target沒(méi)有安裝,什么意思呢?
搞了半天發(fā)現(xiàn)Android SDK的版本不對(duì)導(dǎo)致的
在執(zhí)行 cordova platform add android 時(shí)的提示信息不知道大家仔細(xì)看了沒(méi),貼出來(lái)給大家看一下:

這里顯示的Android target為android-26,去SDK Manager里看一下,26對(duì)應(yīng)的Android8.0.0,SDK里沒(méi)有安裝,而且我要的是7.1.1的版本的

好吧,去官網(wǎng)查對(duì)應(yīng)關(guān)系,發(fā)現(xiàn)文檔里有個(gè)坑:

6.X.X明明對(duì)應(yīng)的是4.1-7.1.1的,這個(gè)先不管了,最后折騰一番找到了指定的版本
解決辦法:
//移除之前安裝的版本
cordova platform remove android
//安裝6.1.0版本
cordova platform add android@~6.1.0
執(zhí)行完畢后,再次輸入 cordova requirements ,可以發(fā)現(xiàn)Android target為android-25了

3.cordova編譯出錯(cuò)
解決了上一個(gè)問(wèn)題,我們可以開(kāi)始編譯了,執(zhí)行 cordova build android,出現(xiàn)下面的錯(cuò)誤信息:

查看錯(cuò)誤信息發(fā)現(xiàn) gradle-2.14.1-all.zip 這個(gè)文件沒(méi)有下載成功。cordova默認(rèn)使用gradle來(lái)編譯android,所有它需要去下載對(duì)應(yīng)版本的gradle文件,做過(guò)android的同學(xué)都知道,這玩意經(jīng)常被墻,如果沒(méi)有代理就難搞了。
找到它的源文件地址:https://services.gradle.org/distributions/gradle-2.14.1-all.zip (提示信息里有),直接通過(guò)瀏覽器訪問(wèn)是可以去把這個(gè)下載下來(lái)的,如果不行的話,我這提供一個(gè)下載好的:http://pan.baidu.com/s/1jHG3edC
好了,接下來(lái)說(shuō)一下解決方案了。我在Stack Overflow上搜到了常用的幾種方式,一一介紹一下:
解決辦法:
Solution A:直接修改源文件中的下載鏈接(試驗(yàn)失?。?/h4>
找到你項(xiàng)目中的 GradleBuilder.js 文件,路徑:
項(xiàng)目根目錄\platforms\android\cordova\lib\builders\GradleBuilder.js
編輯該文件,修改 distributionUrl 變量,修改前:
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'https\\://services.gradle.org/distributions/gradle-2.14.1-all.zip';
修改后:
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || '../gradle-2.14.1-all.zip';
然后將之前下載好的 gradle-2.14.1-all.zip 文件,粘貼到如下的目錄:
項(xiàng)目根目錄\platforms\android\gradle
再次執(zhí)行 cordova build android ,編譯還是出錯(cuò)
Solution B:強(qiáng)制使用ant來(lái)進(jìn)行編譯(試驗(yàn)成功)
使用如下語(yǔ)句來(lái)編譯和運(yùn)行:
cordova build android -- --ant
cordova run android -- --ant
這種方式直接來(lái)編譯cordova應(yīng)用是可以運(yùn)行成功的,不過(guò)對(duì)于集成了crosswalk的應(yīng)用會(huì)出錯(cuò)
Solution C:通過(guò)AndroidStudio使用離線gradle編譯(最終版)
前面說(shuō)過(guò)集成crosswalk會(huì)失敗,那對(duì)于需要集成crosswalk的情況下怎么辦呢,下面介紹一下:
還有一個(gè)坑要說(shuō)一下,直接通過(guò) cordova plugin add cordova-plugin-crosswalk-webview 會(huì)失敗,也要換種寫(xiě)法:
cordova plugin add https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview.git
這種方式就不需要通過(guò)命令行來(lái)build了,我們重新理一下流程吧:
-
新建一個(gè)cordova應(yīng)用并進(jìn)入目錄
cordova create test com.example.test Test cd test -
先把需要的插件都裝上吧,免得add android的時(shí)候出錯(cuò)
cordova plugin add https://github.com/apache/cordova-plugin-whitelist cordova plugin add https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview.git -
添加android設(shè)備,并檢驗(yàn)一下環(huán)境是否準(zhǔn)備完善
cordova platform add android@~6.1.0 cordova requirements 使用Android Studio導(dǎo)入項(xiàng)目,項(xiàng)目路徑為:
項(xiàng)目根目錄\platforms\android-
使用離線版gradle,網(wǎng)上有很多種方法,這里介紹一種比較容易操作的吧
還記得我們之前下載下來(lái)的gradle壓縮包嗎,把它解壓放到一個(gè)目錄:比如:
C:\Program Files\Android\Android Studio\gradle
image_1bt4asdgfkn0gqq1qf61fe81gln9.png-8.1kB在Android Studio里面,設(shè)置一下使用離線gradle的目錄:
File->Settings->Build,Execution,Deployment->Build Tools
image_1bt4ba2e21smbh261f6vuo8gb6m.png-42kB
點(diǎn)擊Gradle,選擇剛才gradle解壓的路徑
image_1bt4bc7qet9o1pcl1iliigiffe13.png-54.8kB
點(diǎn)擊確定后,Gradle會(huì)自動(dòng)build項(xiàng)目 直接使用Android Studio運(yùn)行項(xiàng)目,期待成功吧(別忘了插上你的手機(jī),開(kāi)啟調(diào)試模式)。如果沒(méi)成功,繼續(xù)往下看。
4.This version of android studio is incompatible with the gradle version used.
解決辦法:
Step1:
禁用Instant Run,在 File->Settings->Build,Execution,Deployment->Instant Run 中,取消所有選中項(xiàng)
Step2:
更新Gradle Services 的url:
在project項(xiàng)目下 gradle\wrapper\gradle-wrapper.properties 文件里修改 distributionUrl 變量
修改前:
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
修改后:
distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip
Step3:
刪除project下的build文件夾,重新編譯
參考文檔:
- http://stackoverflow.com/questions/35202541/this-version-of-android-studio-is-incompatible-with-the-gradle-version-used-try
- https://stackoverflow.com/questions/29874564/ionic-build-android-error-when-download-gradle
- https://stackoverflow.com/questions/30688788/npm-error-404-not-found-cordova-plugin-whitelist