一、Adobe Edge
為吉安等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及吉安網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、做網(wǎng)站、吉安網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
目前還處于預(yù)覽階段的Adobe
Edge是用HTML5、CSS、JavaScript開發(fā)動態(tài)互動內(nèi)容的設(shè)計工具。內(nèi)容可以同時兼容移動設(shè)備和桌面電腦。Edge的一個重要功能是
Web工具包界面,方便確保頁面在不同瀏覽器中的架構(gòu)一致性,此外Edge還將整合TypeKit這樣的字體服務(wù)。
動畫和圖形可以添
加到HTML元素中,程序也能通過Edge自身的代碼片段庫或者JavaScript代碼進行擴展。動畫可以在獨立的時間線上進行嵌套,還能實現(xiàn)互動功
能。符合可以服用并通過API和代碼片段控制。通過Edge設(shè)計的內(nèi)容可以兼容iOS和Android設(shè)備,也可以運行在火狐、Chrome、
Safari和IE9等主流瀏覽器。
二、Adobe Dreamweaver CS6
Adobe
Dreamweaver CS6作為一個Web設(shè)計軟件,提供了對HTML網(wǎng)站和移動程序的可視化編輯界面。其Fluid
Grid排版系統(tǒng)整合CSS樣式表功能,提供自適應(yīng)版面的跨平臺兼容性。開發(fā)者可以完全實現(xiàn)Web設(shè)計的可視化操作,無需為代碼所困。
用戶不但還能在Live View中預(yù)覽,還提供多屏幕預(yù)覽功能。開發(fā)者可以通過MultiScreen預(yù)覽面板查看HTML5內(nèi)容的渲染效果。Live View通過WebKit渲染引擎支持HTML5。
三、Adobe ColdFusion 10
ColdFusion是用來開發(fā)企業(yè)Web程序的服務(wù)器端技術(shù),通過Websockets、互動表單、視頻和地理標簽等HTML5技術(shù)創(chuàng)建富媒體用戶體驗。
四、Sencha Architect 2
在開發(fā)移動和桌面應(yīng)用的工具中,Sencha的定位是HTML5可視化應(yīng)用開發(fā)。開發(fā)團隊可以在一個單一集成的環(huán)境中完成應(yīng)用的設(shè)計、開發(fā)和部署。開發(fā)者還可以開發(fā)Sencha Touch2和Ext JS4 JavaScript應(yīng)用,并實時預(yù)覽。
五、Sencha Touch 2
Sencha Touch2是移動應(yīng)用框架,也被看作是Sencha的HTML5平臺。開發(fā)者可以用它開發(fā)面向iOS、Android和Blackberry、Kindle Fire等多種平臺的移動應(yīng)用。
六、Dojo Foundation Maqetta
來自于IBM的一個項目,Dojo Foundation Maqetta是為桌面和移動設(shè)備開發(fā)HTML5應(yīng)用的開源工具,支持在瀏覽器中查看HTML5界面。用戶體驗設(shè)計師可以通過拖放組裝UI樣板
七、微軟Visual Studio 2010 ServicePack 1
雖然一開始并不支持HTML5,但微軟在2011年三月發(fā)布的Visual Studio 2010 SP1中提供了IntelliSense,追加了針對HTML5的一些元素。
八、JetBrains WebStorm 4.0
作為擁有HTML編輯器的JavaScript集成開發(fā)環(huán)境,WebStorm4.0提供了開發(fā)web應(yīng)用的HTML5樣板。開發(fā)者可以在創(chuàng)建HTML文檔時可獲得對HTML5文件的支持。例如砍伐者鍵入。開發(fā)者還可以在chrome瀏覽器中實時預(yù)覽HTML文檔。
九、Google Web Toolkit
該開發(fā)工具用于開發(fā)瀏覽器應(yīng)用,但庫中支持很多HTML5功能。包括對客戶端或web存儲的支持。其他HTML5功能還包括支持Canvas可視化,以及音頻和視頻widget。
十、DCloud HBuilder
HBuilder是當(dāng)前最快的HTML開發(fā)工具,強大的代碼助手幫你快速完成開發(fā),最全的語法庫和瀏覽器兼容性數(shù)據(jù)讓瀏覽器碎片化不再頭痛。
Cordova是一個廣泛使用的Hybrid開發(fā)框架,它提供了一套js和Native交互規(guī)范
在Cordova的 SystemWebViewEngine 類中可以看到
private static void exposeJsInterface(WebView webView, CordovaBridge bridge) {
if ((Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1)) {
Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");
// Bug being that Java Strings do not get converted to JS strings automatically.
// This isn't hard to work-around on the JS side, but it's easier to just
// use the prompt bridge instead.
return;
}
webView.addJavascriptInterface(new SystemExposedJsApi(bridge), "_cordovaNative");
}
因此當(dāng)Android系統(tǒng)高于4.2時,Cordova還是使用 addJavascriptInterface 這種方式,因為這個方法在高版本上安全而且簡單,低于4.2的時候,用什么方法呢?
答案是 WebChromeClient.onJsPrompt 方法
WebView可以設(shè)置一個 WebChromeClient 對象,它可以處理js的3個方法
onJsAlert
onJsConfirm
onJsPrompt
這3個方法分別對應(yīng)js的 alert 、 confirm 、 prompt 方法,因為只有 prompt 接收返回值,所以js調(diào)用一個Native方法后可以等待Native返回一個參數(shù)。下面是 cordova.js 中的一段代碼:
/**
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
*/
module.exports = {
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
},
setNativeToJsBridgeMode: function(bridgeSecret, value) {
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
},
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
}
};
然后只要在 onJsPrompt 方法中使用 CordovaBridge 來處理js的prompt調(diào)用
/**
* Tell the client to display a prompt dialog to the user. If the client returns true, WebView will assume that the client will handle the prompt dialog and call the appropriate JsPromptResult method.
* p/
* Since we are hacking prompts for our own purposes, we should not be using them for this purpose, perhaps we should hack console.log to do this instead!
*/
@Override
public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {
// Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.
String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);
if (handledRet != null) {
result.confirm(handledRet);
} else {
dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {
@Override
public void gotResult(boolean success, String value) {
if (success) {
result.confirm(value);
} else {
result.cancel();
}
}
});
}
return true;
}
如果我們目前的項目是Android的,但是接下來我們希望部分頁面可以使用Flutter進行開發(fā),甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們該如何實現(xiàn)呢?
假設(shè)你現(xiàn)在Android項目的目錄的結(jié)構(gòu)是這樣的
這時候如果你想創(chuàng)建一個Flutter模塊,使得Android模塊和Flutter模塊之間可以進行交互,我們可以通過Android Studio新建一個Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為
也就是說,最終你的項目結(jié)構(gòu)會是這樣的
接下來在Android Module的 build.gradle 文件中添加flutter依賴
先創(chuàng)建一個Flutter頁面
這里比較重要的是 window.defaultRouteName 這個字段,這個字段可以接收從Native傳遞過來的參數(shù) (下文我們會介紹原生傳遞參數(shù)的方法),也就是說通過這個字段我們就可以進行Flutter頁面的路由的分發(fā)
我們可以直接在Android的 MainActivity 中啟動一個 FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對應(yīng)Flutter層的 window.defaultRouteName
注意:需要在 AndroidManifest.xml 注冊 FlutterActivity
自己創(chuàng)建一個 FlutterAppActivity 繼承自 FlutterActivity
在 MainActivity 中啟動 FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊 FlutterAppActivity )
兩種啟動方式的區(qū)別
如果單純只是想打開一個Flutter頁面,兩種方式實際上基本沒有太大區(qū)別,第一種方式也許還會更簡單一點。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調(diào)用,如果使用復(fù)寫 FlutterActivity 的方式更有利于我們在 FlutterActivity 中注冊我們的Native插件,所以實際開發(fā)中一般推薦使用第二種方式
擴展思考
initialRoute 從名稱上看起來是Flutter提供給我們進行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實際上他就是一個字符串,我們不僅僅可以傳遞一個路由名稱,有時候我們也可以通過這個參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進行解析,這樣我們就可以通過這個參數(shù)做更多的事情
activity_main.xml
FrameLayout 用于承載Flutter組件
MainActivity.java
使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中
運行結(jié)果
上半部分是原生的TextView,下半部分是Flutter的Text組件
本節(jié)主要介紹了Native和Flutter之間的頁面跳轉(zhuǎn),以及同一個頁面中Native與Flutter組件的組合。接下來會介紹如何編寫Android插件與Flutter進行數(shù)據(jù)交互
Cordova是一個廣泛使用的Hybrid開發(fā)框架,它提供了一套js和Native交互規(guī)范
在Cordova的 SystemWebViewEngine 類中可以看到
private static void exposeJsInterface(WebView webView, CordovaBridge bridge) {
if ((Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1)) {
Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");
// Bug being that Java Strings do not get converted to JS strings automatically.
// This isn't hard to work-around on the JS side, but it's easier to just
// use the prompt bridge instead.
return;
}
webView.addJavascriptInterface(new SystemExposedJsApi(bridge), "_cordovaNative");
}
因此當(dāng)Android系統(tǒng)高于4.2時,Cordova還是使用 addJavascriptInterface 這種方式,因為這個方法在高版本上安全而且簡單,低于4.2的時候,用什么方法呢?
答案是 WebChromeClient.onJsPrompt 方法
WebView可以設(shè)置一個 WebChromeClient 對象,它可以處理js的3個方法
onJsAlert
onJsConfirm
onJsPrompt
這3個方法分別對應(yīng)js的 alert 、 confirm 、 prompt 方法,因為只有 prompt 接收返回值,所以js調(diào)用一個Native方法后可以等待Native返回一個參數(shù)。下面是 cordova.js 中的一段代碼:
/**
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
*/
module.exports = {
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
},
setNativeToJsBridgeMode: function(bridgeSecret, value) {
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
},
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
}
};
然后只要在 onJsPrompt 方法中使用 CordovaBridge 來處理js的prompt調(diào)用
/**
* Tell the client to display a prompt dialog to the user. If the client returns true, WebView will assume that the client will handle the prompt dialog and call the appropriate JsPromptResult method.
* p/
* Since we are hacking prompts for our own purposes, we should not be using them for this purpose, perhaps we should hack console.log to do this instead!
*/
@Override
public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {
// Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.
String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);
if (handledRet != null) {
result.confirm(handledRet);
} else {
dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {
@Override
public void gotResult(boolean success, String value) {
if (success) {
result.confirm(value);
} else {
result.cancel();
}
}
});
}
return true;
}
原生開發(fā)
?原生開發(fā)是在Android、IOS移動平臺上利用各自的開發(fā)語言、開發(fā)API、開發(fā)工具進行App軟件開發(fā)。例如Android是利用Java或者kotlin,使用Eclipse、Android studio、idea等工具開發(fā);IOS是利用Objective-C或者Swift,使用Xcode工具等進行開發(fā)。
原生開發(fā)的優(yōu)點:
可訪問手機所有功能(如GPS、攝像頭等)、可實現(xiàn)功能齊全;
運行速度快、性能高,絕佳的用戶體驗;
支持大量圖形和動畫,不卡頓,反應(yīng)快;
比較快捷地使用設(shè)備端提供的接口,處理速度上有優(yōu)勢。
原生開發(fā)的缺點:
開發(fā)周期長; ?
制作費用高昂,成本較高; ?
可移植性比較差,一款原生的App,Android和IOS都要各自開發(fā),同樣的邏輯、界面要寫兩套; ?
內(nèi)容限制(App ? Store限制); ?
獲得新版本時需重新下載應(yīng)用更新。
混合開發(fā)
混合開發(fā),是指在開發(fā)一款A(yù)pp產(chǎn)品的時候,為了提高效率、節(jié)省成本而利用原生與H5的開發(fā)技術(shù)的混合應(yīng)用。通俗點來說,這就是網(wǎng)頁的模式,通常由“H5云網(wǎng)站+APP應(yīng)用客戶端”;兩部分構(gòu)成。
混合開發(fā)是一種取長補短的開發(fā)模式,原生代碼部分利用插件或者其它框架為H5提供容器,程序主要的業(yè)務(wù)實現(xiàn)、界面展示都是利用與H5相關(guān)的技術(shù)進行實現(xiàn)的。很多APP都是利用混合開發(fā)模式而成的。 ?
混合開發(fā)優(yōu)點:
開發(fā)效率高,節(jié)約時間。同一套代碼Android和IOS基本上都可使用; ?
更新和部署比較方便,每次升級版本只需要在服務(wù)器端升級即可,不再需要上傳到App ? Store進行審核; ?
代碼維護方便、版本更新快,節(jié)省產(chǎn)品成本; ?
比web版實現(xiàn)功能多; ?
可離線運行。?
混合開發(fā)缺點: ?
網(wǎng)絡(luò)要求高:混合APP數(shù)據(jù)需要全部從服務(wù)器調(diào)取,每個頁面都需要重新下載,因此打開速度慢,網(wǎng)絡(luò)占用高,緩沖時間長,容易讓用戶反感。 ?
Cordova是一個廣泛使用的Hybrid開發(fā)框架,它提供了一套js和Native交互規(guī)范
在Cordova的SystemWebViewEngine類中可以
看到私有靜態(tài)void exposeJsInterface(WebView webView,CordovaBridge橋){
if((Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1)){
Log.i(TAG,“自Android版本以來已禁用addJavascriptInterface()橋接?!保?
//錯誤是Java Strings不會自動轉(zhuǎn)換為JS字符串。
//在JS方面解決這個問題并不困難,但是更容易
使用提示橋來代替。
返回;
}
webView.addJavascriptInterface(新SystemExposedJsApi(橋), “_cordovaNative”);
}
因此當(dāng)Android系統(tǒng)高于4.2時,Cordova還是使用addJavascriptInterface這種方式,因為這個方法在高版本上安全而且簡單,低于4.2的時候,用什么方法呢?
答案是WebChromeClient.onJsPrompt方法
WebView可以設(shè)置一個WebChromeClient對象,它可以處理js的3個方法
onJsAlert
onJsConfirm
onJsPrompt
這3個方法分別對應(yīng)js的警告,確認,提示方法,因為只有提示接收返回值,所以js調(diào)用一個Native方法后可以等待Native返回一個參數(shù)。下面是cordova.js中的一段代碼:
/ **
*實現(xiàn)ExposedJsApi.java的API,但使用prompt()進行通信。
*這是在JellyBean之前使用的,其中addJavascriptInterface()被禁用。
* /
module.exports = {
exec:function(bridgeSecret,service,action,callbackId,argsJson){
return prompt(argsJson,'gap:'+ JSON.stringify([bridgeSecret,service,action,callbackId]));
},
setNativeToJsBridgeMode:function(bridgeSecret,value){
prompt(value,'gap_bridge_mode:'+ bridgeSecret);
},
retrieveJsMessages:function(bridgeSecret,fromOnlineEvent){
return prompt(+ fromOnlineEvent,'gap_poll:'+ bridgeSecret);
}
};
然后只要在onJsPrompt方法中使用CordovaBridge來處理js的提示調(diào)用
/ **
*告訴客戶端向用戶顯示提示對話框。如果客戶端返回true,則WebView將假定客戶端將處理提示對話框并調(diào)用相應(yīng)的JsPromptResult方法。
* p /
*由于我們出于自己的目的黑客提示,我們不應(yīng)該為此目的使用它們,也許我們應(yīng)該破解console.log來代替!
* /
@Override
public boolean onJsPrompt(WebView視圖,String origin,String message,String defaultValue,final JsPromptResult result){
//與@JavascriptInterface橋不同,此方法始終在UI線程上調(diào)用。
String processedRet = parentEngine.bridge.promptOnJsPrompt(origin,message,defaultValue);
if(processedRet!= null){
result.confirm(processedRet);
} else {
dialogsHelper.showPrompt(message,defaultValue,new CordovaDialogsHelper.Result(){
@
Override public void gotResult(boolean success,String value){
if(success){
result.confirm(value);
} else {
result.cancel( );
}
}
});
}
return true;
}
當(dāng)前標題:android混合開發(fā)框架,Android框架
分享鏈接:http://aaarwkj.com/article38/dssjpsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計公司、標簽優(yōu)化、做網(wǎng)站、外貿(mào)建站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)