鍍金池/ 教程/ 嵌入式/ CordovaLib 概要
Cordova CLI
CordovaLib 概要
cordova.js 概要
cordova.js 事件通道 pub/sub
cordova.js 模塊系統(tǒng) require/define
cordova.js 導(dǎo)入、初始化、啟動(dòng)、加載插件
cordova.js 本地交互 JS<->Native

CordovaLib 概要

http://rensanning.iteye.com/blog/2020843 已經(jīng)介紹過通過 Cordova CLI 創(chuàng)建 Cordova 工程。

Cordova 生成的 Android 工程主要來自于以下目錄:

引用

C:\Documents and Settings\RenSanNing\.cordova\lib\android\cordova\3.4.0\bin\templates\project

其中所用的 CordovaLib 來自于以下目錄:

引用

C:\Documents and Settings\RenSanNing\.cordova\lib\android\cordova\3.4.0\framework

從 Cordova 3.3.0以后,方便調(diào)試,CordovaLib 的提供形式從 jar 文件變成了 Android Library。
參考:https://issues.apache.org/jira/browse/CB-5232

CordovaLib 中的代碼主要包括:
com.squareup.okhttp: 導(dǎo)入 HTTP+SPDY 客戶端的 OkHTTP,獲取網(wǎng)絡(luò)資源。
org.apache.cordova: 剩下的所有代碼都在該包下(以前還有過 org.apache.cordova.api )

http://wiki.jikexueyuan.com/project/cordova-3.x-primer-source-code/images/7.1.png" alt="picture7.1" />

基礎(chǔ)類:

  • CordovaInterface.java CordovaActivity 的接口(使 plugin 不依賴 CordovaLib 更獨(dú)立)
  • CordovaActivity.java 應(yīng)用的主 Activity 需要繼承自該類。
  • Config.java 解析 config.xml
  • Whitelist.java 白名單列表
  • LinearLayoutSoftKeyboardDetect.java 布局(檢測軟鍵盤)

Webview 相關(guān):

  • CordovaWebView.java 核心 Webview 類
  • CordovaWebViewClient.java 捕獲 Webview 事件回調(diào)(2.x 版本沒有 WebResourceResponse)
  • IceCreamCordovaWebViewClient.java 在3.x、4.x 版本中攔截網(wǎng)頁中資源請求,比如 js,css,img,ajax
  • CordovaChromeClient.java 捕獲 JavaScript 事件,其中 onJsPrompt() 對(duì)應(yīng)2.3模擬器的交互 Bug
  • AuthenticationToken.java Http 請求的認(rèn)證
  • ScrollEvent.java 回傳 onScrollChanged 事件坐標(biāo)
  • CordovaResourceApi.java 獲取資源

Plugin 相關(guān):

  • PluginManager.java 插件管理
  • PluginEntry.java 插件實(shí)體
  • CordovaPlugin.java Plugin 的基類
  • CordovaArgs.java 接收 JSON 參數(shù)
  • PluginResult.java 執(zhí)行結(jié)果
  • CallbackContext.java 通過 sendPluginResult 回傳結(jié)果
  • ExposedJsApi.java JS 橋接
  • NativeToJsMessageQueue.java 回傳結(jié)果的消息隊(duì)列

無用類:

  • DirectoryManager.java 3.1開始@Deprecated,移動(dòng)了 file 的 plugin 中
  • ExifHelper.java 3.1開始@Deprecated,移動(dòng)了 camera 的 plugin 中
  • FileHelper.java 3.1開始@Deprecated,移動(dòng)了 camera 和 file 的 plugin 中
  • JSONUtils.java 3.1開始@Deprecated,無用類
  • DroidGap.java 2.7開始@Deprecated,DroidGap.java 名字太難聽,改成了CordovaActivity。參考:https://issues.apache.org/jira/browse/CB-2657

****這些文件中有些 Java 文件已經(jīng)不再建議使用,在未來的某個(gè)版本將會(huì)被刪除?。?!

其他:

  • App.java 清緩存、loadUrl、退出程序等的 plugin(以后會(huì)被單做成一個(gè) plugin)
  • LOG.java 日志 util

Android WebView 由于版本的問題,存在很多局限和 Bug,而 Android 4.4開始默認(rèn)搭載 Google 的最新渲染引擎 Blink/Chromium。

ChromeView 使用 Chromium 代替 WebView 的一個(gè)實(shí)現(xiàn),也有 cordova-android-chromeview,不過更新比較慢。
Intel Crosswalk 構(gòu)建于 Chromium 之上,提供更加豐富的功能。同時(shí)提供了 crosswalk-cordova-android。

使用以上2中解決方案都能改善 Webview 的問題,但是同時(shí)你的 apk 文件的大小將增加20 M左右。

程序入口:

Java 代碼

public class CordovaSample extends CordovaActivity 
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        // 讀取config.xml,設(shè)置UI
        super.onCreate(savedInstanceState);
        // 初始化Webview后添加到UI中
        super.init();
        // 加載首頁file:///android_asset/www/index.html
        // 其中index.html是在config.xml中配置的。
        super.loadUrl(Config.getStartUrl());
    }
}

啟動(dòng)序列圖:

http://wiki.jikexueyuan.com/project/cordova-3.x-primer-source-code/images/7.2.jpg" alt="picture7.2" />

Plugin 序列圖:

http://wiki.jikexueyuan.com/project/cordova-3.x-primer-source-code/images/7.3.jpg" alt="picture7.3" />