1.as3中的ExtensionContext是其核心類,負責與Java代碼的互動。
ExtensionContext需要調用createExtensionContext方法建立和初始化Java端的本地代碼。
而是用call方法可以調用具體的Java代碼並獲得返回結果。同時Extension還會接受從java代碼拋出的事件。
產生的jar會在extension.xml標識
2.本地java項目部分
關鍵介面 FREExtension 是java端自訂代碼的入口,產生ane時,會在extension.xml裡設定這個入口類
關鍵類 FREContext(儲存"key":FREFunction的索引值映射)
關鍵介面 FREFunction 只有一個call方法需要實現,
3.flash調用java流程:
1)extContext = ExtensionContext.createExtensionContext(EXTENSION_ID,""); //EXTENSION_ID要與extension.xml中的id標籤一致
這行代碼會使得java裡的FREExtension被new,接著FREContext被new ,索引值映射生效
2)extContext.call(字串)//這個字串就是java 的FREContext裡定義的索引值的鍵,這時相關的FREFunction就會被new 並自動調用call方法
4.java返回資料給flash:
1)flash裡:extContext.addEventListener(StatusEvent.STATUS,onStatusHandler);
2)java裡:FREContext.dispatchStatusEventAsync("code", "level");
3)onStatusHandler(e:StatusEvent){e.code 就=="code",e.level=="level"}
5.產生ANE檔案
隨便建立一個目錄作為工作目錄(AneBuild),並為其建立子檔案夾Android-ARM
將Flex Library項目中自動產生的.swc檔案和extension.xml複製到AneBuild目錄下
以ZIP方式解壓.swc檔案擷取catalog.xml和library.swf檔案並存到Android-ARM檔案夾下
拷貝AneTestNative.jar到Android-ARM檔案夾下
拷貝自己的簽名檔案.p12到AneBuild檔案夾下
最終結果
AneBuild:Android-ARM檔案夾、.swc檔案、extension.xml、.p12檔案
Android-ARM:catalog.xml、library.swf、AneTestNative.jar
使用命令提示字元進入到AneBuild檔案目錄下,使用adt命令對上述檔案打包
[plain] view plaincopy
"D:developAdobeAdobe Flash Builder 4.5sdks4.5.0-air3.0binadt" -package -storetype PKCS12 -keystore linxcool.p12 -storepass 08002615 -target aneTest.ane extension.xml -swc *.swc -platform Android-ARM -C Android-ARM .
linxcool.p12:簽名檔案
08002615:簽名密碼
aneTest.ane:產生的ANE檔案名稱
6.製作ane時的swc注意:flash builder4.6需要在編譯器附帶參數中加入“-swf-version 13”否則打包ane時會出現Invalid swc file.The extension NameSpace requires the swf verison to be 13 or lower
7,如果ane打包時,Android-ARM/res檔案夾下有這個的檔案:dpay_btn_gray_press.9.png,那麼flash builder發布apk時就會出錯:aapt tool failed:Error:C盤下的應用程式臨時檔案找不到圖片!
8.如果java項目的lib裡有檔案夾,如armeabi,那麼在打包ane的時候,也要放在Android-ARMlibs下
9.bat批處理命令學習:
(1)得到當前.bat檔案的所在目錄:set root_directory=%~dp0
(2)輸出:echo
(3)使用變數:%root_directory%
10.FREFunction call方法只有兩個參數call(FREContext arg0, FREObject[] arg1) ,不管flash裡傳來多少參數,都被放在FREObject[] arg1中
FREObject用來封裝flash的對象,返回參數給flash,用的也是這個類型