AIR兼容HTML及AIR程序更新與調(diào)用本地類庫方案的評(píng)估報(bào)告_第1頁
AIR兼容HTML及AIR程序更新與調(diào)用本地類庫方案的評(píng)估報(bào)告_第2頁
AIR兼容HTML及AIR程序更新與調(diào)用本地類庫方案的評(píng)估報(bào)告_第3頁
AIR兼容HTML及AIR程序更新與調(diào)用本地類庫方案的評(píng)估報(bào)告_第4頁
AIR兼容HTML及AIR程序更新與調(diào)用本地類庫方案的評(píng)估報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、AIR3兼容HTML5及控制外設(shè)的評(píng)估報(bào)告2012-03-261 評(píng)估內(nèi)容Ø Adobe AIR3運(yùn)行時(shí)對(duì)HTML5的支持n HTML5標(biāo)簽n JavaScript Enginen SVGn WebWorkersn Client-side Databasen Offline detection and cachingn XMLHttpRequest with cross-origin requestsn Cross-document messagingn Web storagen Web socketsn Server-sent DOM eventsn Geolocationn Dr

2、ag-and-drop supportn Formsn History state / back buttonn WidgetsØ Adobe AIR3 Native-Extensions (原生擴(kuò)展)n 擴(kuò)展方式的易用性n 支持的語言n AIR3 FOR C APIn AIR3 FOR JAVA APIn 支持情況Ø Adobe Alchemy n 實(shí)現(xiàn)方式n 支持情況Ø AIR 桌面應(yīng)用程序的安裝和更新n 安裝n 更新2 相關(guān)名詞解釋l Adobe AIR3Adobe AIR3 運(yùn)行時(shí)使開發(fā)人員可以跨平臺(tái)和設(shè)備,包括個(gè)人計(jì)算機(jī)、電視、Android、Black

3、Berry 和 iOS 設(shè)備,部署通過 HTML、JavaScript、ActionScript、Flex、Adobe Flash® Professional 和 Adobe Flash Builder® 創(chuàng)建的獨(dú)立應(yīng)用程序。l HTML5HTML標(biāo)準(zhǔn)自1999年12月發(fā)布的 HTML 4.01 后,后繼的 HTML 5 和其它標(biāo)準(zhǔn)被束之高閣,為了推動(dòng)web標(biāo)準(zhǔn)化運(yùn)動(dòng)的發(fā)展,一些公司聯(lián)合起來,成立了一個(gè)叫做 Web Hypertext Application Technology Working Group (Web 超文本應(yīng)用技術(shù)工作組 - WHATWG) 的組織,HTM

4、L5草案的前身名為 Web Applications 1.0,於2004年被 WHATWG 提出,於2007年被 W3C 接納,并成立了新的 HTML 工作團(tuán)隊(duì)。HTML 5 的第一份正式草案已于2008年1月22日公布。HTML 5有兩大特點(diǎn):首先,強(qiáng)化了 Web 網(wǎng)頁的表現(xiàn)性能。其次,追加了本地?cái)?shù)據(jù)庫等 Web 應(yīng)用的功能。l SVG可縮放矢量圖形(Scalable Vector Graphics,SVG)是基于可擴(kuò)展標(biāo)記語言(XML),用于描述二維矢量圖形的一種圖形格式。SVG由W3C制定,是一個(gè)開放標(biāo)準(zhǔn)。另SVG還是Static Var Generator靜止無功發(fā)生器的簡(jiǎn)稱。l We

5、bWorkersHTML5 規(guī)范也提供了一個(gè)名為Web Workers 的新API。Web Workers(通常稱為“worker”)可以讓我們?cè)诤笈_(tái)執(zhí)行計(jì)算量相對(duì)較大以及執(zhí)行時(shí)間較長(zhǎng)的腳本,而不會(huì)影響瀏覽器的主用戶界面。l Web storageWeb Storage實(shí)際上由兩部分組成:sessionStorage與localStorage。 sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁面才能訪問并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話級(jí)別的存儲(chǔ)。 localStorag

6、e用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過期的。假如你需要存儲(chǔ)的只是簡(jiǎn)單的用key/value對(duì)即可解決的數(shù)據(jù)則可以使用Web Storage。l Geolocation(地理位置定位)Geolocation于將用戶當(dāng)前地理位置信息共享給信任的站點(diǎn),這涉及用戶的隱私安全問題,所以當(dāng)一個(gè)站點(diǎn)需要獲取用戶的當(dāng)前地理位置,瀏覽器會(huì)提示用戶是“允許” or “拒絕”。l Server-sent DOM events服務(wù)器推動(dòng)技術(shù),HTML5規(guī)范中包含很多功能強(qiáng)大的特性,能夠?qū)g覽器變成功能齊全的RIA客戶端平臺(tái)。Server-Sent Event和WebSockets就是其中的兩個(gè)

7、特性,這兩個(gè)特性能夠幫助我們實(shí)現(xiàn)服務(wù)器將數(shù)據(jù)推送到客戶端的功能。l History state / back buttonDOM中的window對(duì)象通過window.history方法提供了對(duì)瀏覽器歷史記錄的讀取,讓你可以在用戶的訪問記錄中前進(jìn)和后退。從HTML5開始,提供了一系列的API供我們操作這個(gè)歷史記錄堆棧。l Adobe AIR3 Native-Extensions(原生擴(kuò)展功能)Adobe AIR允許應(yīng)用程序開發(fā)人員使用一組稱為Adobe AIR原生擴(kuò)展的工具擴(kuò)展運(yùn)行時(shí)的功能。從2.5版開始,此功能已為AIR for TV啟用,它現(xiàn)在已擴(kuò)展到移動(dòng)和桌面平臺(tái)。通過使用原生擴(kuò)展,您的應(yīng)

8、用程序可訪問目標(biāo)平臺(tái)的所有功能,即使運(yùn)行時(shí)本身沒有內(nèi)置的支持。原生擴(kuò)展允許您利用您設(shè)備的獨(dú)特和特定于平臺(tái)的功能,它們還允許您在ActionScript應(yīng)用程序中使用原生代碼,重用現(xiàn)有的平臺(tái)代碼,在線程中執(zhí)行操作來提高您應(yīng)用程序的處理能力,以及提供對(duì)原生平臺(tái)庫的訪問。原生擴(kuò)展的封裝和分發(fā)就像所有其他ActionScript庫一樣:您可以分發(fā)您自己的庫,以及使用其他開發(fā)人員發(fā)布的原生擴(kuò)展,可以將功能插入到您自己的應(yīng)用程序中。l Adobe AlchemyAlchemy 能夠編譯C/C+代碼為AS3字節(jié)碼(運(yùn)行在AVM2上)能夠運(yùn)行在Flash或者Flex平臺(tái),并且Adobe宣傳Alchemy能夠?yàn)?/p>

9、計(jì)算密集型任務(wù)提升性能(但是比原生C/C+慢)。比較有趣的一點(diǎn)是Alchemy是在開源 LLVM 編譯架構(gòu) 的基礎(chǔ)上創(chuàng)建的,LLVM為虛擬機(jī),架構(gòu)在AVM2(AS3 虛擬機(jī)環(huán)境)虛擬機(jī)下層。3 評(píng)估環(huán)境搭建Ø HTML5評(píng)估環(huán)境搭建n 運(yùn)行時(shí):下載最新AIR3.1n 下載Adobe Flash Builder 4.6 或 AdobeAIRSDK.zip(解壓)n 下載Adobe Dreamweaver CS5.5 oid=EBYEWn 下載AIR 對(duì)Dreamweaver 擴(kuò)展 “Adobe_AIR.mxp” Ø Adobe AIR3 Native-Extensions 評(píng)

10、估環(huán)境搭建n 下載安裝Adobe Flash Builder 4.6 n 下載并安裝 VC+ 6.0 或 VS2008 C+ VS 2010 C+ n 獲取擴(kuò)展window-x86本機(jī)擴(kuò)展用到的C 函數(shù)庫及頭文件C:Program FilesAdobeAIRSDKinclude FlashRuntimeExtensions.hC:Program FilesAdobeAIRSDKlibwin FlashRuntimeExtensions.libØ Adobe Alchemyn 下載Cygwin n Java 虛擬機(jī) http:/n 下載Adobe Flash Builder 4.6 或

11、 AdobeAIRSDK.zip(解壓)、SDK環(huán)境變量配置n 下載 Adobe Alchemy 4 評(píng)估過程Ø HTML5 評(píng)估過程n HTML5 新標(biāo)簽評(píng)估過程u 打開Adobe Dreamwaver CS5.5,新建Dreamwaver 站點(diǎn),配置站點(diǎn)名稱及目錄地址,點(diǎn)擊保存u 在該站點(diǎn)下,創(chuàng)建測(cè)試HTML文件,index.html,創(chuàng)建好后打開index.html,可以看到這只是一個(gè)普通的html文件u 我們將在該文件的<BODY>區(qū)域中,加入HTML5的相關(guān)新的標(biāo)簽<body> <header> <h1>HTML5 布局頭部標(biāo)

12、簽 Header</h1> </header> <nav> <h3>HTML5 導(dǎo)航標(biāo)簽NAV</h3> <a href="roles/index.html">Backbone Demo</a> <a href="#">link2</a> <a href="#">link3</a> </nav> <section> <article> <header> &l

13、t;h1>HTML5 article 標(biāo)簽 </h1> </header> <p>article 標(biāo)簽用于展示 論壇帖子 報(bào)紙文章 博客條目 用戶評(píng)論</p> <footer> <h2>HTML5 布局標(biāo)簽footer</h2> </footer> </article> </section> <footer > <article> <footer> <address> 使用HTML5 address標(biāo)簽+article組合

14、<br> Written by W3S<br /> <a href="mailto:">Email us</a><br /> Address: Box 564, Disneyland<br /> Phone: +12 34 56 78 </address> </footer> </article> </footer> <br /><br /><br /> <p>HTML5 audio

15、標(biāo)簽 不被AIR支持</p> <audio src="mobile.wav"></audio> <br> <p>HTML5 bdi標(biāo)簽 反轉(zhuǎn)文字 "Here is some Hebrew text that should be written from right-to-left."</p> <bdo dir="rtl">Here is some Hebrew text that should be written from right-to-left

16、.</bdo><br><br> 這是用canvas實(shí)現(xiàn)的 <br/> <canvas id="diagonal" style="border:1px solid; width:200px; height:200px; " > </canvas> <br /> 這是用變換的方式在canvas上繪制對(duì)角線 <br/> <canvas id="diagonal2" style="border:1px solid; width:30

17、0px; height:300px;"> </canvas> <br/> <p>HTML5 標(biāo)簽command </p> <menu> <command onclick="alert('Hello World')"> Click Me!</command> </menu><br> <p>HTML5 標(biāo)簽 datalist 用于檢索可能的值例如:選車 請(qǐng)輸入BMW或Ford或Volvo 不被AIR3支持</p> &

18、lt;input list="cars" /> <datalist id="cars"> <option value="BMW"> <option value="Ford"> <option value="Volvo"> </datalist> </br> <p>HTML5 標(biāo)簽mark 高亮顯示</p> <p>Do not forget to buy <mark>mil

19、k</mark> today.</p> <br> <p>HTML5 標(biāo)簽定義度量衡 meter</p> <meter min="0" max="20">5</meter><meter>2 out of 10</meter><meter>30%</meter></br> <p>HTML5 下載進(jìn)度標(biāo)簽 progess 不被AIR3 支持</p> The object's downlo

20、ading progress: <progress> <span id="objprogress">76</span>% </progress> <br> <p>HTML5 標(biāo)簽video</p> <video src="movie.ogg" controls="controls">your browser does not support the video tag</video> <br> <p>HT

21、ML5 支持SVG 在AIR3 不被支持</p> <embed src="1.svg" height="300" width="300" type="image/svg+xml" pluginspage=" style="border: 1px solid black; padding:5px;"/></br></body>Air程序的入口網(wǎng)頁u 將這個(gè)站點(diǎn)的頁面發(fā)布為AIR項(xiàng)目,點(diǎn)擊“站點(diǎn)”->“AIR Application S

22、ettings”(如未發(fā)現(xiàn)這個(gè)菜單功能,請(qǐng)檢查是否安裝了AIR FOR Dreamwaver的擴(kuò)展包),彈出如下提示框Air 生成發(fā)布的簽名文件 P12Air打包包括的文件及文件夾u 簽名文件生成u 創(chuàng)建AIR 文件u 生成Html5Air3Demo.air 雙擊安裝n JavaScript Engine 評(píng)估過程n SVG 評(píng)估過程u HTML5 構(gòu)造SVG 對(duì)象<object type="image/svg+xml" data="*/data.svg" width="20px" height="20px"

23、></object>如要支持動(dòng)態(tài)創(chuàng)建請(qǐng)使用以下方式<object type="image/svg+xml,+svg" data="*/data.svg" width="20px" height="20px"></object>u JS動(dòng)態(tài)創(chuàng)建(function() var userAgent = navigator.userAgent;var isWebKit = /webkit/i.test(userAgent);SvgHelper = function(containe

24、rId, width, height) this.container = document.getElementById(containerId);this.width = parseInt(width) + 'px'this.height = parseInt(height) + 'px'this.svg = '<?xml version="1.0" encoding="utf-8"?>'+'<svg version="1.1" xmlns="htt

25、p://2000/svg" '+'xmlns:xlink="/1999/xlink" width="' +this.width + '" height="' + this.height + '">'SvgHtotype = /* 構(gòu)造SVG*/getSvg: function() if (this.svgObject) return this.svgObject;this.svgObject =

26、 createElement('object', width: this.width,height: this.height,type: 'image/svg+xml', position : "ABSOLUTE",left: 0,top: 0, this.container);,/* 測(cè)試函數(shù)*/drawCircle: function() this.getSvg();this.svg += "<rect x="0" y="0" rx="5" ry="5&

27、quot; width="50" height="50" fill="green" stroke="red"/>"/* 重繪*/repaint: function() var svgObject = this.getSvg();svgObject.data = 'data:image/svg+xml,'+ this.svg +'</svg>'if (isWebKit) this.container.appendChild(svgObject);functi

28、on createElement(tagName, tagProp, tagStyle, container) var tagElement = document.createElement(tagName);if (tagProp) for (var prop in tagProp) tagElementprop = tagPropprop;if (tagStyle) for (var prop in tagStyle) tagElement.styleprop = tagStyle;if (container) container.appendChild(tagElement);retur

29、n tagElement;)();u SVG 文件n WebWorkers 評(píng)估過程u 參閱文檔 u 主程序var worker = new Worker("worker.js");u 調(diào)用worker.jsonmessage = function (evt) for (var i=0; i<100000000; i+) postMessage(i); Worker.onmessage(); ; ; n Client-side Database 評(píng)估過程u 參閱文檔 u HTML5 允許開發(fā)者使用一個(gè)簡(jiǎn)單卻強(qiáng)大的JavaScript API來存儲(chǔ)關(guān)系的加密格式。開發(fā)人

30、員可以使用標(biāo)準(zhǔn)的SQL語句創(chuàng)建表,插入、更新、刪除行、選擇,最強(qiáng)大的是客戶端數(shù)據(jù)API可以構(gòu)造基于交易事務(wù)的程序。u 通過API 創(chuàng)建數(shù)據(jù)庫或使用現(xiàn)有的庫,灰色強(qiáng)調(diào)部分為API函數(shù)var db;var shortName="MyDB"var verson="1.0"var displayName="MyDB"var maxSixe=65535;db=openDatabase(shortName, version, displayName, maxSize);u 一個(gè)檢查表的事務(wù)db.transaction( function(tran

31、saction) transaction.executeSql('CREATE TABLE IF NOT EXISTS table' +' (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +' date DATE NOT NULL, food TEXT NOT NULL, ' +' calories INTEGER NOT NULL);'););u 刪除指定ID數(shù)據(jù)db.transaction( function(transaction) transaction.executeS

32、ql('DELETE FROM entries WHERE id=?;', id, null, errorHandler); );u 添加數(shù)據(jù)db.transaction( function(transaction) transaction.executeSql('INSERT INTO entries (id,date, calories, food) VALUES (1, "7/31/2011", "ggg","ssss");', callBackFun, errorHandler); ); db.

33、transaction( function(transaction) transaction.executeSql( 'INSERT INTO entries (date, calories, food) VALUES (?, ?, ?);', date, calories, food, callBackFun, errorHandler ); );u 查詢語句db.transaction( function(transaction) transaction.executeSql( 'SELECT * FROM entries WHERE date = ? ORDER

34、BY food;', currentDate, function(transaction, result) for (var i = 0; i < result.rows.length; i+) var row = result.rows.item(i); var newEntryRow = $('#entryTemplate').clone(); newEntryRow.removeAttr('id'); newEntryRow.removeAttr('style'); newEntryRow.data('entryId&

35、#39;, row.id); newEntryRow.appendTo('#date ul'); newEntryRow.find('.label').text(row.food); newEntryRow.find('.calories').text(row.calories); newEntryRow.find('.delete').click(function() var clickedEntry = $(this).parent(); var clickedEntryId = clickedEntry.data('

36、entryId'); deleteEntryById(clickedEntryId); clickedEntry.slideUp(); ); , errorHandler ); );n Offline detection and caching (離線檢測(cè)和緩存) 評(píng)估過程u 參考 u 頁面屬性應(yīng)用,manifest 為文本文件,羅列出緩存文件的清單<html manifest="test.manifest"> .</html>u 構(gòu)建需要緩存的文件清單,灰色部分為描述文件必須的開頭方式CACHE MANIFEST# wanz app v1#

37、 指明緩存入口CACHE:index.htmlstyle.cssimages/logo.pngscripts/main.js# 以下資源必須在線訪問NETWORK:login.php# 如果index.php無法訪問則用404.html代替FALLBACK:/index.php /404.htmlu 相關(guān)APIcache = window . applicationCache返回應(yīng)用于當(dāng)前window對(duì)象文檔的ApplicationCache對(duì)象cache = self . applicationCache返回應(yīng)用于當(dāng)前shared worker的ApplicationCache對(duì)象 shar

38、ed workercache . status返回當(dāng)前應(yīng)用的緩存狀態(tài),status有五種無符號(hào)短整型值的狀態(tài):UNCACHED = 0;IDLE = 1;CHECKING = 2;DOWNLOADING = 3;UPDATEREADY = 4;OBSOLETE = 5;cache . update()調(diào)用當(dāng)前應(yīng)用資源下載過程cache . swapCache()更新到最新的緩存,這個(gè)不會(huì)使得之前加載的資源突然被重新加載。圖片不會(huì)重新加載,樣式和腳本也不會(huì)重新渲染或解析,唯一的變化是在此之后發(fā)出請(qǐng)求頁面的資源是最新的n Web storage 評(píng)估過程u 不得不說Web Storage 是由兩部

39、分組成:LocalStorage、Session Storage 。sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁面才能訪問并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話級(jí)別的存儲(chǔ)。 localStorage用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過期的。u 先來看一個(gè)LocalStorage的測(cè)試,在這個(gè)測(cè)試中Save后,該值是被持久化到本地存儲(chǔ),即使session清除,也一樣不會(huì)被影響saveButton.addEventListener('click

40、', function ()   window.localStorage.setItem('value', area.value);  window.localStorage.setItem('timestamp', (new Date().getTime();, false);textarea.value = window.localStorage.getItem('value');n Server-sent DOM events(服務(wù)器推送技術(shù)) 未評(píng)估n Web Socket 評(píng)估過程u 使用API 調(diào)用WEB

41、SOCKET 連接Var socket = new WebSocket('ws://echo');socket.onopen = function(event)   socket.send('Hello, WebSocket');socket.onmessage = function(event) alert(event.data); socket.onclose = function(event) alert('closed'); n Drag-and-drop support 評(píng)估過程

42、u Native Drag & Drop 拖放document.addEventListener('dragstart', function(event)   event.dataTransfer.setData('text', 'Customized text');  event.dataTransfer.effectAllowed = 'copy', false);u Desktop Drag-In(File API)document.querySelector('#dropzone'

43、;).addEventListener('drop', function(e)   var reader = new FileReader();  reader.onload = function(evt)     document.querySelector('img').src = evt.target.result;  ;  reader.readAsDataURL(e.dataTransfer.files0);, false);u Desktop Drag-OutHTML-JS:var file

44、s = document.querySelectorAll('.dragout');for (var i = 0, file; file = filesi; +i)   file.addEventListener('dragstart', function(e)     e.dataTransfer.setData('DownloadURL', this.dataset.downloadurl);  , false);n Forms 評(píng)估過程u HTML5 提供很多類型:例如:email、date、Rang

45、e、Search、Tel、Color等u 構(gòu)建代碼n Widgets 未嘗試評(píng)估Ø Adobe AIR3 Native-Extensions 評(píng)估過程n 原理說明,本機(jī)擴(kuò)展體系結(jié)構(gòu)圖由擴(kuò)展圖我們可以看出,實(shí)現(xiàn)本機(jī)擴(kuò)展需要3個(gè)核心部分的處理:1. 需要ActionScript 定義擴(kuò)展接口類2. 需要綁定擴(kuò)展資源3. 需要針對(duì)要操作的設(shè)備及庫,實(shí)現(xiàn)對(duì)應(yīng)的本機(jī)實(shí)現(xiàn),本機(jī)實(shí)現(xiàn)依賴于OS然后根據(jù)系統(tǒng)和功能需要的不同,AIR提供的相關(guān)擴(kuò)展API 分為FOR JAVA API ,FOR C API ,for Android Java Apin 本測(cè)試目的在于,測(cè)試windows-X86 平臺(tái)的本

46、機(jī)擴(kuò)展,測(cè)試前準(zhǔn)備這里不再贅述,請(qǐng)參考Adobe AIR3 Native-Extensions 環(huán)境搭建n 聲明AS 擴(kuò)展類公共接口,需要通過FalshBuilder4.6 創(chuàng)建一個(gè)AS的類庫程序我們通過ExtensionContext.createExtensionContext();創(chuàng)建擴(kuò)展上下文,該方法需要兩個(gè)參數(shù)param1: extensionID param2:上下文類型用來標(biāo)識(shí)擴(kuò)展作用信息。extensionID 擴(kuò)展ID 需要與擴(kuò)展描述文件相匹配。ExtensionContext 的 call() 方法采用以下參數(shù): functionName。該字符串表示本機(jī)實(shí)現(xiàn)中的一個(gè)函數(shù)。

47、選擇 functionName 字符串是否與其表示的本機(jī)函數(shù)的名稱相同。在本機(jī)實(shí)現(xiàn)中,應(yīng)在該 functionName 字符串與本機(jī)函數(shù)之間建立關(guān)聯(lián)??稍?FREContextInitializer() 方法的輸出參數(shù)中設(shè)置這一關(guān)聯(lián)??蛇x參數(shù)列表。每個(gè)參數(shù)都傳遞給本機(jī)函數(shù)。參數(shù)可以是基元類型(如 int),也可以是任何 ActionScript 對(duì)象。ExtensionContext 的 call() 方法的返回值是基元類型或任何 ActionScript 對(duì)象。返回的對(duì)象的子類取決于本機(jī)函數(shù)的返回值。如:extension.xml擴(kuò)展描述文件中的platform 為本機(jī)操作系統(tǒng)平臺(tái)Nativ

48、eLibrary 為本機(jī)實(shí)現(xiàn)的庫Initializer 初始化方法n 本機(jī)實(shí)現(xiàn) C這里我使用的是VS2010 VC+,新建一個(gè)win32 動(dòng)態(tài)鏈接庫項(xiàng)目,TestDemo,并將FlashRuntimeExtensions.h 與 FlashRuntimeExtensions.lib 導(dǎo)入到工程此時(shí)在源代碼文件夾建立cpp源文件,TestDemo.cpp 并引用FlashRuntimeExtensions.h 頭文件,如提示無法使用頭文件,請(qǐng)修改項(xiàng)目的預(yù)編譯屬性我們開始實(shí)現(xiàn)代碼部分,請(qǐng)查看ADOBE FOR C API函數(shù)/ TestDemo.cpp : 定¡§義°

49、? DLL 應(yīng)®|用®?程¨¬序¨°的Ì?導(dǎo)Ì?出?函¡¥數(shù)ºy。¡ê/#include "stdafx.h"#include "FlashRuntimeExtensions.h"#include <stdio.h>#include <stdlib.h>extern "C"extern "C" _declspec(dllexport) void initializ

50、er(void* extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet); FREObject SumDemo(FREContext ctx, void* funcData, uint32_t argc, FREObject argv)int a;int b;FREObject w=0;FREGetObjectAsInt32(argv0,&a);FREGetObjectAsInt32(argv1,&b);int32_t c = a*b;FR

51、ENewObjectFromInt32(c,&w);return w;void contextFinalizer(FREContext ctx)return;void contextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction* functions)*numFunctions = 1;FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRE

52、NamedFunction) * (*numFunctions); = (const uint8_t*) "SumDemo"func0.functionData = NULL;func0.function = &SumDemo;*functions = func;void initializer(void* extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)* ctxInitializer = &contextInitiali

53、zer;*ctxFinalizer = &contextFinalizer;編譯成功后,產(chǎn)生TestDemo.dll文件,同時(shí)在AS3的擴(kuò)展接口類庫編譯后產(chǎn)生TestDemo.swc文件。下面我們需要進(jìn)行擴(kuò)展的打包操作,會(huì)用到AIR 的adt 。我們建立擴(kuò)展打包的文件夾,將要打包的文件放到這個(gè)文件夾中文件清單描述:1. Catalog.xml (從生成的TestDemo.swc中解壓出來 )2. Library.swf (從生成的TestDemo.swc 中解壓出來)3. Extension.xml (手寫-UTF-8編碼,內(nèi)容請(qǐng)參考上面圖示)4. TestDemo.dll (這個(gè)就是

54、剛才我們建立的dll庫)5. TestDemo.swc(AS3 的擴(kuò)展接口項(xiàng)目)6. Yfcui.p12 (這個(gè)是簽名密鑰,可以用Dreamwerver cs5.5+AIR 擴(kuò)展來生成) 7. Package.bat (一個(gè)adt命令的批處理程序,這個(gè)是偷懶不想每次都敲命令)8. TestDemo.ane (這個(gè)東東就是我們最后要輸出的擴(kuò)展包ANE ,想知道內(nèi)容可以用壓縮軟件打開看看,沒有執(zhí)行命令前是沒有的哦),所以你應(yīng)該可以拿到的是前6個(gè)文件n ADT 打包命令,也就是package.bat里的內(nèi)容Adt -package -storetype pkcs12 -keystore yfcui.

55、p12 -storepass jijicyf -target ane TestDemo.ane extension.xml -swc TestDemo.swc -platform Windows-x86 library.swf TestDemo.dlln 最后一步,讓你的AIR項(xiàng)目使用擴(kuò)展,在AIR項(xiàng)目屬性窗口中引入n 創(chuàng)建測(cè)試函數(shù),由于我們是通過AS3的擴(kuò)展接口來訪問,因此就和訪問本地對(duì)象一樣n 運(yùn)行測(cè)試結(jié)果返回在控制臺(tái)Ø Adobe Alchemy 評(píng)估過程n 環(huán)境準(zhǔn)備請(qǐng)參考,評(píng)估環(huán)境搭建之Adobe Alchemyn 安裝好cygwin后,桌面會(huì)出現(xiàn)應(yīng)用圖標(biāo) ,雙擊圖標(biāo)會(huì)出現(xiàn)一

56、個(gè)linux的命令交互界面,相關(guān)linux命令請(qǐng)參考對(duì)應(yīng)的命令手冊(cè)1. 首先我們驗(yàn)證下準(zhǔn)備工作是否做好,我們用cd 命令來到下載Adobe Alchemy的文件夾2. cd d:/alchemy 回車3. 輸入 ./config4. 輸入 source /cygdrive/d/alchemy/alchemy-setup5. 輸入 alc-on,這步做環(huán)境部分就完了6. 構(gòu)建C 語言的類文件,頭文件路徑D:alchemy-cygwin-v0.5aavm2-libcinclude 里面有很多其它相關(guān)語言類庫或文件/Simple String Echo example/mike chambers#include <stdlib.h>#include <stdio.h>/Header file for AS3 interop APIs/this is linked in by the compiler (when using flaccon)#include "AS3.h"/Method exposed to ActionScript/Takes a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論