Cordova+Crosswalk打包WebApp時(shí)遇到的各種坑

在閱讀這篇文章之前,推薦先看一下我之前寫(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ò)

image_1bssjudmfbbl1ib1o4t1a6s5sa9.png-53kB
image_1bssjudmfbbl1ib1o4t1a6s5sa9.png-53kB

看提示信息,顯而易見(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)下面的提示信息:


image_1bsskgj0n1r3k1mer1clnvm109tm.png-12.5kB
image_1bsskgj0n1r3k1mer1clnvm109tm.png-12.5kB

2.Android target: not installed

上面的問(wèn)題解決了,我們?cè)赽uild android之前先檢查一下環(huán)境是否配置成功,輸入: cordova requirements

問(wèn)題又來(lái)了,出現(xiàn)下圖的錯(cuò)誤提示:


image_1bsskp00c1tlqkm94ldqot1uco13.png-12.6kB
image_1bsskp00c1tlqkm94ldqot1uco13.png-12.6kB

提示信息里說(shuō)Android target沒(méi)有安裝,什么意思呢?
搞了半天發(fā)現(xiàn)Android SDK的版本不對(duì)導(dǎo)致的

在執(zhí)行 cordova platform add android 時(shí)的提示信息不知道大家仔細(xì)看了沒(méi),貼出來(lái)給大家看一下:

image_1bssl1ls8f3k1hqk1blo1o2j13181g.png-9.8kB
image_1bssl1ls8f3k1hqk1blo1o2j13181g.png-9.8kB

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

image_1bssl5vop19a31k9gtk5115i5s41t.png-57.7kB
image_1bssl5vop19a31k9gtk5115i5s41t.png-57.7kB

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


image_1bsslcbc51o6t11g6u3g1irdlvo2n.png-51.1kB
image_1bsslcbc51o6t11g6u3g1irdlvo2n.png-51.1kB

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了

image_1bt3dar26ben1cl81pqa0jr161m.png-6.1kB
image_1bt3dar26ben1cl81pqa0jr161m.png-6.1kB

3.cordova編譯出錯(cuò)

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

image_1bt3qbkthfo39g7kiov26185q23.png-40.7kB
image_1bt3qbkthfo39g7kiov26185q23.png-40.7kB

查看錯(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了,我們重新理一下流程吧:

  1. 新建一個(gè)cordova應(yīng)用并進(jìn)入目錄

    cordova create test com.example.test Test
    cd test
    
  2. 先把需要的插件都裝上吧,免得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
    
  3. 添加android設(shè)備,并檢驗(yàn)一下環(huán)境是否準(zhǔn)備完善

    cordova platform add android@~6.1.0
    cordova requirements
    
  4. 使用Android Studio導(dǎo)入項(xiàng)目,項(xiàng)目路徑為:項(xiàng)目根目錄\platforms\android

  5. 使用離線版gradle,網(wǎng)上有很多種方法,這里介紹一種比較容易操作的吧

    還記得我們之前下載下來(lái)的gradle壓縮包嗎,把它解壓放到一個(gè)目錄:比如:
    C:\Program Files\Android\Android Studio\gradle

    image_1bt4asdgfkn0gqq1qf61fe81gln9.png-8.1kB
    image_1bt4asdgfkn0gqq1qf61fe81gln9.png-8.1kB

    在Android Studio里面,設(shè)置一下使用離線gradle的目錄:
    File->Settings->Build,Execution,Deployment->Build Tools

    image_1bt4ba2e21smbh261f6vuo8gb6m.png-42kB
    image_1bt4ba2e21smbh261f6vuo8gb6m.png-42kB

    點(diǎn)擊Gradle,選擇剛才gradle解壓的路徑
    image_1bt4bc7qet9o1pcl1iliigiffe13.png-54.8kB
    image_1bt4bc7qet9o1pcl1iliigiffe13.png-54.8kB

    點(diǎn)擊確定后,Gradle會(huì)自動(dòng)build項(xiàng)目

  6. 直接使用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文件夾,重新編譯

參考文檔:

  1. http://stackoverflow.com/questions/35202541/this-version-of-android-studio-is-incompatible-with-the-gradle-version-used-try
  2. https://stackoverflow.com/questions/29874564/ionic-build-android-error-when-download-gradle
  3. https://stackoverflow.com/questions/30688788/npm-error-404-not-found-cordova-plugin-whitelist
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容