Cordova: 僅使用HTML/JS即可制作一個Android或者iOS的App

cordova

Cordova是什么

關(guān)于這個問題甘穿,還是看看官網(wǎng)是怎么說的吧:

Cordova wraps your HTML/JavaScript app into a native container which can access the device functions of several platforms. These functions are exposed via a unified JavaScript API, allowing you to easily write one set of code to target nearly every phone or tablet on the market today and publish to their app stores.

翻譯一下:

Cordova包裝你的HTML/JavaScript app到原生app容器中独旷,可以讓你訪問每個平臺設(shè)備的功能。這些功能通過統(tǒng)一的JavaScript API提供枕屉,讓你輕松的編寫一組代碼運行在幾乎市面上的所有手機和平板上,并可以發(fā)布到相應(yīng)的app商城中丁屎。

聽上去蠻不錯的负饲,那么我們就開始用它來做一個app吧!

PS: 因為本人沒有Mac設(shè)備蜜暑,所以此次演示僅限在Windows上模擬Android應(yīng)用铐姚,Mac上可類似完成。

搭建環(huán)境

如果模擬iOS應(yīng)用肛捍,那么請使用Mac并安裝XCode, https://developer.apple.com/xcode/

npm install -g cordova

環(huán)境坑一

創(chuàng)建應(yīng)用

cordova create MyApp

如果按照Cordova(http://cordova.apache.org/)官網(wǎng)所述隐绵,直接用npm全局安裝cordova,并創(chuàng)建應(yīng)用拙毫,你可能遇到以下錯誤:

Error: Uncaught, unspecified "error" event. (  Error from Cordova Fetch: Error:
cmd: Command failed with exit code 4294963238 Error output:
npm ERR! not a package C:\Users\Administrator\AppData\Roaming\npm\node_modules\c
ordova\node_modules\.3.12.0@cordova-app-hello-world\index.js
npm ERR! addLocal Could not install C:\Users\Administrator\AppData\Roaming\npm\n
ode_modules\cordova\node_modules\.3.12.0@cordova-app-hello-world\index.js
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\
node_modules\\npm\\bin\\npm-cli.js" "install" "C:\\Users\\Administrator\\AppData
\\Roaming\\npm\\node_modules\\cordova\\node_modules\\.3.12.0@cordova-app-hello-w
orld\\index.js"
npm ERR! node v6.10.1
npm ERR! npm  v3.10.10
...

此時不要緊張依许,卸載cordova,使用yarn重新安裝一下缀蹄,猜測可能和npm版本不兼容峭跳。

yarn是facebook出品,功能類似npm的包管理器缺前,可完全替代npm

npm uninstall -g cordova 
npm install -g yarn
yarn config set registry https://registry.npm.taobao.org
yarn global add cordova

環(huán)境坑二

安裝好yarncordova之后蛀醉,使用cli命令cordova create MyApp創(chuàng)建project,此時你可能會遇到以下錯誤:

'cordova' 不是內(nèi)部或外部命令衅码,也不是可運行的程序或批處理文件拯刁。

這是什么原因呢?

原來我們沒有將yarn的bin目錄加入到環(huán)境變量path逝段,作為一個Windows僵尸粉垛玻,判斷出這點還是不難的。執(zhí)行以下命令奶躯,找到yarn的bin目錄所在:

> yarn global bin
d:\Users\gy.wang\AppData\Local\Yarn\bin

d:\Users\gy.wang\AppData\Local\Yarn\bin此目錄添加到windows環(huán)境變量path

20170907134114.png

配置好環(huán)境帚桩,重新打開CLI窗口,我們終于可以順利地創(chuàng)建cordova應(yīng)用巫糙,cordova使用默認(rèn)模板創(chuàng)建好一個Project朗儒。

> cordova create MyApp
Creating a new cordova project.

> tree
├─hooks
├─platforms
├─plugins
├─res
│  ├─icon
│  │  ├─android
│  │  ├─bada
│  │  ├─bada-wac
│  │  ├─blackberry
│  │  ├─blackberry10
│  │  ├─ios
│  │  ├─tizen
│  │  ├─webos
│  │  └─windows-phone
│  └─screen
│      ├─android
│      ├─bada
│      ├─bada-wac
│      ├─blackberry
│      ├─blackberry10
│      ├─ios
│      ├─tizen
│      ├─webos
│      └─windows-phone
└─www
    ├─css
    ├─img
    └─js

在Mac和Linux系統(tǒng)下,環(huán)境變量的配置請自行g(shù)oogle一下

環(huán)境坑三

添加Android平臺

d:\cordova-app\MyApp>cordova platform add android
Using cordova-fetch for cordova-android@~6.2.2
Adding android project...
Creating Cordova project for the Android platform:
        Path: platforms\android
        Package: io.cordova.hellocordova
        Name: HelloCordova
        Activity: MainActivity
        Android target: android-25
Subproject Path: CordovaLib
Android project created with cordova-android@6.2.3
Installing "cordova-plugin-whitelist" for android

               This plugin is only applicable for versions of cordova-android greater than 4.0. If you have a previous platform version, you do *not* ne
ed this plugin since the whitelist will be built in.

--save flag or autosave detected
Saving android@~6.2.3 into config.xml file ...

注意這里的 Android target: android-25

在項目根目錄下参淹,運行命令cordova build android來編譯你的項目醉锄,你可能遇到以下錯誤:

Error: cmd: Command failed with exit code 1 Error output:
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'android'.
> You have not accepted the license agreements of the following SDK components:
[Android SDK Platform 25].
Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Mana
ger.
Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

原因是啥呢?當(dāng)前cordova要求的Android版本比較高浙值,需要安裝Android SDK Platform 25才能順利編譯恳不,怎么辦? 裝开呐!

打開Android Studio, 安裝SDK

20170907141602.png

安裝成功之后烟勋,執(zhí)行命令cordova build android规求,這次終于成功了!

......
BUILD SUCCESSFUL

Total time: 1 mins 28.925 secs
Built the following apk(s):
        D:/cordova-app/MyApp/platforms/android/build/outputs/apk/android-debug.apk

APK包成功打好卵惦,這次我們運行一下阻肿,執(zhí)行命令:

cordova run android

這次我們會遇到環(huán)境坑四

環(huán)境坑四

....
No target specified and no devices found, deploying to emulator
Error: No emulator images (avds) found.
1. Download desired System Image by running: "d:\Users\gy.wang\AppData\Local\Android\sdk\tools\android.bat" sdk
2. Create an AVD by running: "d:\Users\gy.wang\AppData\Local\Android\sdk\tools\android.bat" avd
HINT: For a faster emulator, use an Intel System Image and install the HAXM device driver

不急,仔細(xì)看報錯信息的意思是沒有可用的設(shè)備或模擬器沮尿。這個簡單丛塌,打開Android Studio添加一個:

20170907145702.png

再次運行cordova run android, 哈畜疾! 這次成功了赴邻!

Total time: 2.737 secs
Built the following apk(s):
        D:/cordova-app/MyApp/platforms/android/build/outputs/apk/android-debug.apk
ANDROID_HOME=d:\Users\gy.wang\AppData\Local\Android\sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0
No target specified and no devices found, deploying to emulator
Skipping build...
Built the following apk(s):
        D:/cordova-app/MyApp/platforms/android/build/outputs/apk/android-debug.apk
Using apk: D:/cordova-app/MyApp/platforms/android/build/outputs/apk/android-debug.apk
Package name: io.cordova.hellocordova
INSTALL SUCCESS
LAUNCH SUCCESS

環(huán)境坑五

什么!閃退啡捶!WTF!

運行命令cordova run android姥敛,將APK包安裝到模擬器上結(jié)果又報錯了!

20170907170538.png

離成功就差一步了瞎暑,別泄氣彤敛!我們慢慢查找原因~

  • step-1, 查看cordova所使用的android版本

    "android": "6.2.3"
    

    對應(yīng) Android SDK Platform 25

  • step-2金顿, 查看模擬器使用的android版本

    "android": "6.0"
    

    對應(yīng) Android SDK Platform 23

20170907175129.png
  • step-3臊泌, 分析:模擬器上的Android版本低于cordova打包時用的Android版本鲤桥,相應(yīng)的SDK版本也要低

    此時怎么辦呢揍拆?

    • Plan A: 降版本!刪除原有cordova默認(rèn)下載的android版本茶凳,然后安裝和模擬器上一樣的android版本嫂拴。
    • Plan B: 升版本!通過Android Studio將模擬器升級到最新的版本
    • Plan C: 用真機來調(diào)試贮喧!
  • step-4筒狠, 我是通過 Plan C解決了上述問題

20170907212728.jpg

至此,APP終于搞定了箱沦!

總結(jié)

  • 本篇僅僅展示了如何利用Cordova制作一個Android App, 其實我們還可以利用Cordova制作H5應(yīng)用辩恼,chrome應(yīng)用等等,它們更加簡單谓形,有興趣的同學(xué)可以自己嘗試灶伊。
  • Cordova是前端人員走近APP世界的一條捷徑,相比React Native寒跳,它更容易上手聘萨,因為說到底,它還是運行在瀏覽器中的童太,我們不需要深入了解原生API米辐,我們只需寫好HTML/CSS/JS即可胸完。
  • 有人說它性能不好,我想說翘贮,這事得分場景看赊窥,除了游戲類的應(yīng)用,絕大多數(shù)應(yīng)用都不需要太高的性能狸页,隨著前端技術(shù)的發(fā)展誓琼,差距會越來越小,因此肴捉,我非掣孤拢看好它的前景。
  • 作為一個獨立開發(fā)者或者一個創(chuàng)業(yè)團隊使用Cordova去完成一個APP齿穗,無疑是一個非常好的選擇傲隶。
  • Cordova: 跨平臺,一次編寫窃页,多處運行跺株。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脖卖,隨后出現(xiàn)的幾起案子乒省,更是在濱河造成了極大的恐慌,老刑警劉巖畦木,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袖扛,死亡現(xiàn)場離奇詭異,居然都是意外死亡十籍,警方通過查閱死者的電腦和手機蛆封,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勾栗,“玉大人惨篱,你說我怎么就攤上這事∥Х” “怎么了砸讳?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長界牡。 經(jīng)常有香客問我簿寂,道長,這世上最難降的妖魔是什么欢揖? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任陶耍,我火速辦了婚禮,結(jié)果婚禮上她混,老公的妹妹穿的比我還像新娘烈钞。我一直安慰自己泊碑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布毯欣。 她就那樣靜靜地躺著馒过,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酗钞。 梳的紋絲不亂的頭發(fā)上腹忽,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音砚作,去河邊找鬼窘奏。 笑死,一個胖子當(dāng)著我的面吹牛葫录,可吹牛的內(nèi)容都是我干的着裹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼米同,長吁一口氣:“原來是場噩夢啊……” “哼骇扇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起面粮,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤少孝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熬苍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稍走,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年冷溃,在試婚紗的時候發(fā)現(xiàn)自己被綠了钱磅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡似枕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出年柠,到底是詐尸還是另有隱情凿歼,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布冗恨,位于F島的核電站答憔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掀抹。R本人自食惡果不足惜虐拓,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傲武。 院中可真熱鬧蓉驹,春花似錦城榛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞻润,卻和暖如春喘垂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绍撞。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工正勒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傻铣。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓昭齐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矾柜。 傳聞我的和親對象是個殘疾皇子阱驾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容