本文目錄一覽:
- 1、怎麼在android studio中編寫自定義cordova插件
- 2、cordova如何修改安卓 app 目標版本
- 3、cordova怎麼使用jquery
- 4、如何安裝固定版本的cordova
- 5、Cordova iOS 怎麼注入本地cordova.js 給遠程H5調用
- 6、crodova怎麼直接調用android原生方法
怎麼在android studio中編寫自定義cordova插件
一、編寫JS插件
僅提供Javascript介面可供調用,不與native code相交互。
1、創建如下結構的項目,將其push到github方便後續安裝
2、編寫配置文件
創建項目之後,修改plugin.xml對該插件進行配置,因為該插件為單純的js插件,與平台無關,所以plugin.xml配置很簡單。
?xml version=”1.0″ encoding=”utf-8″?
plugin xmlns=””
id=”cordova.plugin.demo”
version=”0.1.0″
nameCordovaPluginJsDemo/name
js-module src=”www/jsplugin.js” name=”jsplugin”
clobbers target=”JsPlugin” /
/js-module
/plugin
3、編寫javascript介面
修改jsplugin.js,加入介面內容
var JsPlugin = function() {};
JsPlugin.prototype.alert = function() {
alert(“I am a js plugin”);
};
var jsPlugin = new JsPlugin();
module.exports = jsPlugin;
完成之後將整個插件內容push到github準備後續安裝。
二、創建ionic項目
創建空白ionic項目進行插件測試。
1、創建空白項目,使用ios模擬機測試
ionic start testPlugin blank
cd testPlugin
ionic platform add ios
ionic build ios
ionic emulate ios
2、安裝插件
cordova plugin add
cordova如何修改安卓 app 目標版本
在Eclipse裡面設置啊。在android項目里打開AndroidManifest設置。在Manifest選項卡里有個Version code設置版本號,Version name設置版本名稱。
或者你不用Eclipse,就用記事本打開AndroidManifest文件,
manifest xmlns:android=”xxxxxx(這個地方不要複製修改)”
package=”com.xxx.xxx”
android:versionCode=”2″
android:versionName=”2.0″
cordova怎麼使用jquery
如何使用cordova使用jQuery Mobile
jquery html5 cordova
我想要的Cordova 2.7.0我跨platoform瀏覽器的jQuery Mobile的工作。 我是新來的手機的差距和jQuery。 我已經下載了Cordova 2.7.0從PhoneGap的。 但如何獲得Cordova-2.7.0.js從它的文件和wher它被裝入和它是如何被安裝。 利用這一點,我想Geolocation APIcordova。 請指教
本文地址 :CodeGo.net/8385569/
————————————————————————————————————————-
1.添加js文件中您的選擇:script type=”text/javascript” charset=”utf-8″ src=”cordova-2.0.0.js”/script與文件執行。
的問候,丹尼爾
2.PhoneGap的入門
按照說明,這正是。你必須創建一個新的PhoneGap項目來自行也看過這個線程,如果你遇到了「Microsoft JScript中的錯誤:找不到路徑:錯誤
之後一切都做,你不是簡單地包括jQuery的
如何安裝固定版本的cordova
1、cordova3.0.0的命令行cordoava CLI和phonegap CLI在windows系統上開發android程序的注意事項『
a 首先要根據要求安裝最新的android SDK,目前我的版本要求 SDk 17才能順利進行
b 一定要配置好環境變數,把SDK’s tools and platform-tools 目錄配置到你的環境變數中去,
另外還要把ANT也要配置到系統環境變數中去,如
;%JAVA_HOME%\bin;%ANT_HOME%\bin
2、cordovan3.0.0的插件可以用命令行遠程從git添加,也可以下載下來從本地用命令行添加,兩種方法的命令
是一樣的,只需要把最後參數的遠程地址改成本地路徑即可
3、npm install -g cordova@XXXXX 可以指定要安裝的cordova版本
4、把老版本的3.0.0以前開發的程序升級到3.0.0的注意事項
a 需要新建一個cordova項目
b 把seerts里的www文件夾下的東西都複製過去,記住cordova.js文件不要替換,要用新創建的裡面的cordova.js不要用舊的程序里的覆蓋
c 把 src文件下的程序包都複製到新程序的src下面,需要修改所有的引用org.apache.cordova.api成org.apache.cordova,
這是新版本的cordova命名上的變化
d 先前程序中的android的訪問許可權設置需要在新程序中重新進行設置
e 把config.xml中添加的插件的格式在新的程序中按照新的格式重新進行整理
Cordova iOS 怎麼注入本地cordova.js 給遠程H5調用
Function Deal(exp)exp=Replace(exp,””,””)exp=Replace(exp,””,””)exp=Replace(exp,”‘”,”””)exp=Replace(exp,Chr(13),”br”)Deal=expEnd Function這個方法就可以了,沒必要判斷那麼多。用不出這個標記怎麼也掛不上,每個HTML標記都會有嘛。
crodova怎麼直接調用android原生方法
crodova直接調用android原生方法的時候要了解一些東西,你可以看下!我發你看下,
一.總體結構
Cordova的目標是用HTML,JS,來完成手機客戶端的開發,並且是只開發一次可以在各種手機平台上跑,所以理想狀態是用JS去控制所有事件。Cordova基於WebView組件。每個繼承自DroidGap的Activity對應一個獨立的CordovaWebView。Cordova提供了一些列的JS介面來訪問Android的native。以插件(Plugin)的形式提供自定義介面給JS端訪問。
二.一些疑問
1. Cordova框架是如何啟動的?
2. 插件是怎麼回事?如何工作的。
3. Cordova的官方文檔都是說JS如何訪問Android的native,那麼在Android的native中是否可以訪問JS的函數?如何訪問?
三.結構解剖
1.Cordova的啟動
1) 如何啟動
Cordova提供了一個Class(DroidGap)和一個interface(CordovaInterface)來讓Android開發者開發Cordova。一般情況下實現DroidGap即可,因為DroidGap類已經做了很多準備工作,可以說DroidGap類是Cordova框架的一個重要部分;如果在必要的情況下實現CordovaInterface介面,那麼這個類中很多DroidGap的功能需要自己去實現。
繼承了DroidGap或者CordovaInterface的Activity就是一個獨立的Cordova模塊,獨立的Cordova模塊指的是每個實現了DroidGap或者CordovaInterface介面的Activity都對應一套獨立的WebView,Plugin,PluginManager,沒有共享的。(我覺得這樣是很不爽的,沒有共享,如果plugin和Activity很多的情況下這樣是相當的耗資源)
當在實現了DroidGap或者CordovaInterface介面的Activity的onCreate方法中調用DroidGap的loadUrl方法即啟動了Cordova框架。
2)啟動過程
public class A extends DroidGap{}
a. 在A的onCreate方法中首先調用super. onCreate()
這一步中創建了一個LinearLayout(LinearLayoutSoftKeyboardDetect.class)布局,以及計算這個Layout的大小及顯示的一些方式。在後面的過程中會將一個WebView加到這個LinearLayout中。
b. 再次調用DroidGap 的loadUrl()方法
DroidGap. loadUrl()中首先判斷A的CordovaWebView是否實例化,如果沒有回實例化一個CordovaWebView對象並將該對象添加到父LinearLayout中去,同時將該LinearLayout添加的ContentView。見以下代碼:
public void onCreate(Bundle savedInstanceState) {
…
root = new LinearLayoutSoftKeyboardDetect(this, width, height);
…
}
public void init() {
CordovaWebView webView = new CordovaWebView(DroidGap.this);
this.init(webView,
new CordovaWebViewClient(this, webView),
new CordovaChromeClient(this, webView));
}
public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
this.appView = webView;
this.appView.setId(100);
…
this.root.addView(this.appView);
setContentView(this.root);
}
public void loadUrl(String url) {
if (this.appView == null) {
this.init();
}
…
}
這樣就完成了我們在一般開發中使用的模式:
public void onCreate(Bundle savedInstanceState) {
super. onCreate(Bundle savedInstanceState);
setContentView(resID);
…
}
在初始化完CordovaWebView後調用CordovaWebView.loadUrl()。此時完成Cordova的啟動。
c. 在實例化CordovaWebView的時候, CordovaWebView對象會去創建一個屬於當前CordovaWebView對象的插件管理器PluginManager對象,一個消息隊列NativeToJsMessageQueue對象,一個JavascriptInterface對象ExposedJsApi,並將ExposedJsApi對象添加到CordovaWebView中,JavascriptInterface名字為:_cordovaNative。
d. Cordova的JavascriptInterface
在創建ExposedJsApi時需要CordovaWebView的PluginManager對象和NativeToJsMessageQueue對象。因為所有的JS端與Android native代碼交互都是通過ExposedJsApi對象的exec方法。
在exec方法中執行PluginManager的exec方法,PluginManager去查找具體的Plugin並實例化然後再執行Plugin的execute方法,並根據同步標識判斷是同步返回給JS消息還是非同步。由NativeToJsMessageQueue統一管理返回給JS的消息。
e. 何時載入Plugin,如何載入
Cordova在啟動每個Activity的時候都會將配置文件中的所有plugin載入到PluginManager。那麼是什麼時候將這些plugin載入到PluginManager的呢?
在b中說了最後會調用CordovaWebView.loadUrl(),對,就在這個時候會去初始化PluginManager並載入plugin。PluginManager在載入plugin的時候並不是馬上實例化plugin對象,而是只是將plugin的Class名字保存到一個hashmap中,用service名字作為key值。
當JS端通過JavascriptInterface介面的ExposedJsApi對象請求Android時,PluginManager會從hashmap中查找到plugin,如果該plugin還未實例化,利用java反射機制實例化該plugin,並執行plugin的execute方法。
2.Cordova插件
在『1』中已經接觸了些Cordova插件的東西,這裡總結下Cordova的插件
Cordova插件只是一個普通的java類,沒有什麼特殊之處。插件中的execute方法只是Cordova框架的一個規定。
Cordova為了方便於插件的管理,所以引進了一個PluginManager來管理插件。在ExposedJsApi中,PluginManager起一個代理作用。
在原生態的WebView開發中,我們可以給WebView添加一個JavascriptInterface對象來使JS可以訪問android的代碼;在Cordova也有一個這樣的對象ExposedJsApi。
在ExposedJsApi中,它將請求轉發給我們的PluginManager,這個時候PluginManager會根據給的service的名字來查找具體的Plugin並執行。
所以,我認為Cordova插件是android端的API,提供給JS。
在Cordova雖然有JavascriptInterface對象ExposedJsApi,但在JS端並不是真正通過android提供的window.JavascriptInterface.request這種方式來請求。在JS端,Cordova是通過JS的prompt()函數觸發ChromeClient中的onJsPrompt方法,通過onJsPrompt去獲取到請求,再將請求轉發給ExposedJsApi。
註:在Cordova中,Java端和JavaScript端都準備了代碼來使用特殊URL(” + service + ‘#’ + action + ‘#’ + callbackId + ‘#’ + argsJson;)的方式交互請求,但並沒有真正使用。
3.Cordova的數據返回
Cordova中通過exec()函數請求android插件,數據的返回可同步也可以非同步於exec()函數的請求。
在開發android插件的時候可以重寫public boolean isSynch(String action)方法來決定是同步還是非同步。
Cordova在android端使用了一個隊列(NativeToJsMessageQueue)來專門管理返回給JS的數據。
1)同步
Cordova在執行完exec()後,android會馬上返回數據,但不一定就是該次請求的數據,可能是前面某次請求的數據;因為當exec()請求的插件是允許同步返回數據的情況下,Cordova也是從NativeToJsMessageQueue隊列頭pop頭數據並返回。然後再根據callbackID反向查找某個JS請求,並將數據返回給該請求的success函數。
2)非同步
Cordova在執行完exec()後並不會同步得到一個返回數據。Cordova在執行exec()的同時啟動了一個XMLHttpRequest對象方式或者prompt()函數方式的循環函數來不停的去獲取NativeToJsMessageQueue隊列中的數據,並根據callbackID反向查找到相對應的JS請求,並將該數據交給success函數。
註:Cordova對本地的HTML文件(file:// 開頭的URL)或者手機設置有代理的情況下使用XMLHttpRequest方式獲取返回數據,其他則使用prompt()函數方式獲取返回數據。
4.Android代碼訪問JS
翻了Cordova的官方文檔和Cordova代碼,發現Cordova並未提供一種方式來讓我們在Android中去訪問JS。現在想來可能是這樣的道理(個人觀點),因為Cordova框架的性質就是一個用HTML+JS來開發APP的,相當於java用的虛擬機層(比喻不是很恰當),所以Cordova未提供Android訪問JS的方式。
如果需要Android訪問JS,只有使用原生態WebView開發的方式
loadUrl(「javascript:xxx」)
因為在Cordova框架中需要訪問JS的時候也是使用的這種方式,如下(Activity的onResume事件):
public void handleResume(boolean keepRunning, boolean activityResultKeepRunning)
{
// Send resume event to JavaScript
this.loadUrl(“javascript:try{cordova.fireDocumentEvent(‘resume’);}catch(e){console.log(‘exception firing resume event from native’);};”);
// Forward to plugins
if (this.pluginManager != null) {
this.pluginManager.onResume(keepRunning);
}
// Resume JavaScript timers (including setInterval)
this.resumeTimers();
paused = false;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304295.html