Cordova 了解一下

全局install
npm install -g cordova
創(chuàng)建項目
cordova create MyApp
添加對應(yīng)的運行平臺
cd MyApp cordova platform add browser
查看平臺列表
cordova platform
其他操作
cordova platform update ios
cordova platform rm ios
cordova platform add ios
運行
cordova run browser


這樣就跑起來一個屬于你的app了饶辙。
文件結(jié)構(gòu)

.
├── config.xml  
├── hooks
│   └── README.md
├── node_modules  
│   ├── cordova-android
│   ├── cordova-browser
│   ├── cordova-plugin-dialogs
│   ├── cordova-plugin-whitelist
│   └── mytoast -> ../../test/MyToast
├── package-lock.json
├── package.json
├── platforms 
│   ├── android
│   └── browser
├── plugins
│   ├── android.json
│   ├── browser.json
│   ├── cordova-plugin-dialogs
│   ├── cordova-plugin-whitelist
│   ├── fetch.json
│   └── org.demo.mytoast
├── res
│   ├── README.md
│   ├── icon
│   └── screen
└── www
    ├── css
    ├── img
    ├── index.html
    └── js

在結(jié)構(gòu)中祟蚀,我們比較在意的幾個是

  • platforms平臺
  • plugins插件 / 各平臺對應(yīng)的JSON文件
  • www項目文件 入口為index.html

platform

能在瀏覽器看到效果官硝,不意味著就可以打包到手機上運行了。
這時候就需要在項目環(huán)境下
cordova requirements
查看build條件是否滿足疙驾。

Android Studio project detected

Requirements check results for android:
Java JDK: installed 1.8.0
Android SDK: installed true
Android target: installed android-27,android-26
Gradle: installed /usr/local/Cellar/gradle/4.6/bin/gradle

Requirements check results for ios:
Apple macOS: installed darwin
Xcode: installed [object Object]
ios-deploy: installed [object Object]
CocoaPods: installed [object Object]

如果機器本地都滿足這些條件,項目就可以愉快的構(gòu)建了郭毕。

PS: not install 的話它碎,后面一般都有提示怎么添加的。
簡單說一下:

Android

  • JDK mac上自帶
  • SDK && SDK Target
    Android Studio

    個人是用的Android Studio install 的SDK显押,在Configure => SDK Manager => Search: Android SDK 選擇你想要的版本就可以了扳肛。
  • Gradle
    Homebrew is “the missing package manager for macOS”.
    $ brew install gradle

iOS

  • Xcode
  • sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
  • sudo npm install -g ios-deploy

plugin

在來說說插件
cordova封裝了非常多的插件,供我們來調(diào)用手機原生的功能乘碑。
一般常用的插件都可以根據(jù)名字下載
cordova plugin add plugin-name
也可以自定義自己的插件挖息,根據(jù)git或者文件地址下載。反正就是添加一個文件
cordova plugin add git@xxx
cordova plugin add ../../file-name

需要注意的是兽肤,并不是所有插件都兼容想要的平臺套腹,構(gòu)建就會報錯

自定義插件(user plugman)

使用
npm install -g plugman
來替我們自定生成插件文件結(jié)構(gòu)
plugman create --name pluginName --plugin_id org.demo.name --plugin_version version
需要手動添加平臺plugman platform add --platform_name android 和生成package.json, 這個可以用npm init` 來幫我們生成
完整結(jié)構(gòu)??

.
├── package.json // npm init
├── plugin.xml
├── src
│   ├── android
│   │   └── MyToast.java
│   └── ios
│       └── MyToast.m
└── www
    └── MyToast.js

可以看到有插件的xml配置绪抛,src下是各個平臺和對應(yīng)的代碼,www就是export的地方电禀。
src/android/....java ??

package org.demo.mytoast;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
// import org.apache.cordova.Activity;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.widget.Toast;

/**
 * This class echoes a string called from JavaScript.
 */
public class MyToast extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            this.coolMethod(message, callbackContext);
            return true;
        }
        if (action.equals("showToast")) {
            String message = args.getString(0);
            this.showToast(message, callbackContext);
            return true;
        }

        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
    private void showToast(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            // Activity activity = this.cordova.getActivity();
            android.widget.Toast.makeText(cordova.getActivity(), message, Toast.LENGTH_SHORT).show();
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

定義好方法了幢码,在./www將其以導(dǎo)出

var exec = require('cordova/exec');

exports.coolMethod = function (arg0, success, error) {
    exec(success, error, 'MyToast', 'coolMethod', [arg0]);
};
//showToast為安裝后js調(diào)用的方法名,參數(shù)可以為任意多個
exports.showToast = function(msg, success, error) {
    //"showToast"為給MyToast.java判斷的action名
    exec(success, error, "MyToast", "showToast", [msg]);
};

假設(shè)文件生成在項目同級目錄
cordova plugin add ../file-name
引入項目鞭呕,會自動為config.xml添加配置
插件掛載在全局的cordova.plugins


www

www文件目錄為存放運行代碼的目錄蛤育,既然我們選擇的vue,將vue編譯到這來就好了葫松。
由于是需要可直接訪問的css和js

    // Template for index.html
    index: path.resolve(__dirname, '../../www/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../../www'),
    assetsSubDirectory: '',
    assetsPublicPath: '',

    /**
     * Source Maps
     */

.
├── README.md
├── config.xml
├── e-invoice  // vue 文件
├── hooks
├── node_modules
├── package-lock.json
├── package.json
├── platforms
├── plugins
├── res
├── www
└── yarn.lock

PS:

cordova 8.0.0
build android 7.0.0
error
# [Cordova failed to install 'cordova-plugin-whitelist': Error: ENOENT: no such file or directory AndroidManifest.xml](https://stackoverflow.com/questions/48034086/cordova-failed-to-install-cordova-plugin-whitelist-error-enoent-no-such-fil)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓦糕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腋么,更是在濱河造成了極大的恐慌咕娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珊擂,死亡現(xiàn)場離奇詭異圣勒,居然都是意外死亡,警方通過查閱死者的電腦和手機摧扇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門圣贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扛稽,你說我怎么就攤上這事吁峻。” “怎么了在张?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵用含,是天一觀的道長。 經(jīng)常有香客問我帮匾,道長啄骇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上推励,老公的妹妹穿的比我還像新娘点额。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般趟妥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佣蓉,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天披摄,我揣著相機與錄音亲雪,去河邊找鬼。 笑死疚膊,一個胖子當著我的面吹牛义辕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寓盗,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼灌砖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傀蚌?” 一聲冷哼從身側(cè)響起基显,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎善炫,沒想到半個月后撩幽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡箩艺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年窜醉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺谆。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榨惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出静汤,到底是詐尸還是另有隱情读串,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布撒妈,位于F島的核電站,受9級特大地震影響排监,放射性物質(zhì)發(fā)生泄漏狰右。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一舆床、第九天 我趴在偏房一處隱蔽的房頂上張望棋蚌。 院中可真熱鬧,春花似錦挨队、人聲如沸谷暮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湿弦。三九已至,卻和暖如春腾夯,著一層夾襖步出監(jiān)牢的瞬間颊埃,已是汗流浹背蔬充。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留班利,地道東北人饥漫。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像罗标,于是被迫代替她去往敵國和親庸队。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • 開篇簡言 我是一名前端工程師闯割,剛剛完成了一個基于cordova的webapp彻消,并且安卓和蘋果雙端都已上線,趁熱寫個...
    Lucy_Lucy閱讀 5,927評論 6 18
  • afinalAfinal是一個android的ioc纽谒,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評論 2 45
  • 心中沒有波瀾证膨, 就這樣,沐浴著陽光鼓黔。 再見嗎央勒?噢,等你步履蹣跚的時候吧澳化。 回頭嗎崔步?噢,等你后悔莫及的時候吧缎谷。 墻角...
    煬歧閱讀 316評論 18 25
  • 隨后井濒,史蒂夫被農(nóng)場的居民們發(fā)現(xiàn),雖然尸毒已經(jīng)不再威脅史蒂夫的生命列林,但是卻留下了一些內(nèi)傷瑞你。內(nèi)傷對于劍客來說很可怕,可...
    暗影M_Shadow閱讀 290評論 0 3