大家好,我是奶綠茶
Adobe AIR3.0 即將發怖
其中最酷的新功能就是可以呼叫原生的程式
在這奶綠茶我就以 Android 來做個 Demo。
1.呼叫 Android toast
2.呼叫 Android AlertDialog
3.呼叫 Android DatePickerDialog(非同步,並得到所選的日期回傳給 flash)
4.List Dialog
5.得到 DeviceID
教學Step:
1.下載 AIR3.0 SDK(目前是 RC 1 3.0.0.388)
http://labs.adobe.com/downloads/air3.html
2.安裝 FlashDevelop4
3.安裝 Ant (方便下 Command Line, 不裝也可以)
http://ant.apache.org/
4.安裝 AntPlugin for FD4
http://code.google.com/p/fd-ant-plugin/
5.FlashAction3
AIR3.0裡,多出了一個 ExtensionContext 類別,用來呼叫原生的程式碼
var extension:ExtensionContext = ExtensionContext.createExtensionContext("Native ID", null);
其中Native ID指的是你要呼叫的 id 名稱
同時要在你的 application.xml 宣告
<extensions>
<extensionID>milkmidi.air3.demo</extensionID>
</extensions>
結著就可以使用
extension.call("funcationName", ...params);
來呼叫
如果是同步的話,extendsion 就會直接 return 值
非同步的話,就使用 addEvetnListener( StatusEvent.STAUS ) 來偵聽
6.Android 端
使用 Eclipse 開啟新的 Android Project
將 AIR3.0 SDK 裡的 lib\android\FlashRuntimeExtensions.jar 加到 Complie Path 裡
7.Package Native Extensions
這裡我卡了很久,參考了許多文章和不斷的失敗,才有一些心得
要先寫一隻和 Native 呼叫用的 class, 並將其打包成 swc 格式
然後將 swc 解壓縮, 取得裡面的二個檔案
寫一隻 extension.xml 用來說明 Native , 長成這樣
<extension xmlns="http://ns.adobe.com/air/extension/2.5">
<id>milkmidi.air3.demo</id>
<versionNumber>1.0</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>milkmidi.air3.demo.jar</nativeLibrary>
<initializer>milkmidi.air3.demo.AIR3Context</initializer>
<finalizer>milkmidi.air3.demo.AIR3Context</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>
接著透過 Command line 的方法,將一堆東西打包成 xxx.ane
還好有善心人事將這一切的動作,包成了 Ant 用的 xml 格式
你只需要呼叫即可
原文如下
http://blog.aboutme.be/2011/09/12/air-native-extensions-hello-world-example-ant-script/
結論:
AIR3.0 可以呼叫原生的類別,但前提是”你還是需要自己寫原生的類別來給flash端呼叫”
想在 iOS 上用的話, 還是要乖乖寫一下 xCode。
但至少是一大進步, 其待正式版的到來。
參考文章:
http://www.leebrimelow.com/?p=2995
http://akabana.info/2011/08/11/air-native-extension-series/
http://www.adobe.com/devnet/air/articles/extending-air.html
轉載請註明出處:
http://milkmidi.blogspot.com/2011/09/air30-native-extensions-example-part1.html
AS source code
Android source code
Adobe AIR3.0 即將發怖
其中最酷的新功能就是可以呼叫原生的程式
在這奶綠茶我就以 Android 來做個 Demo。
1.呼叫 Android toast
2.呼叫 Android AlertDialog
3.呼叫 Android DatePickerDialog(非同步,並得到所選的日期回傳給 flash)
4.List Dialog
5.得到 DeviceID
教學Step:
1.下載 AIR3.0 SDK(目前是 RC 1 3.0.0.388)
http://labs.adobe.com/downloads/air3.html
2.安裝 FlashDevelop4
3.安裝 Ant (方便下 Command Line, 不裝也可以)
http://ant.apache.org/
4.安裝 AntPlugin for FD4
http://code.google.com/p/fd-ant-plugin/
5.FlashAction3
AIR3.0裡,多出了一個 ExtensionContext 類別,用來呼叫原生的程式碼
var extension:ExtensionContext = ExtensionContext.createExtensionContext("Native ID", null);
其中Native ID指的是你要呼叫的 id 名稱
同時要在你的 application.xml 宣告
<extensions>
<extensionID>milkmidi.air3.demo</extensionID>
</extensions>
結著就可以使用
extension.call("funcationName", ...params);
來呼叫
如果是同步的話,extendsion 就會直接 return 值
非同步的話,就使用 addEvetnListener( StatusEvent.STAUS ) 來偵聽
6.Android 端
使用 Eclipse 開啟新的 Android Project
將 AIR3.0 SDK 裡的 lib\android\FlashRuntimeExtensions.jar 加到 Complie Path 裡
public class AIR3Context extends FREContext implements FREExtension{ private static final String TAG = "[AIR3Context]"; @Override public FREContext createContext(String pType) { log(pType); // pType 的值會由 flash 端 ExtensionContext.createExtensionContext("ID" , ”這兒決定” ); return new AIR3Context(); } @Override public void initialize() { log("initialize()"); } @Override public Map將 Android 裡的 java 檔,打包成 .jar格式getFunctions() { //注冊 function 名稱。 HashMap result = new HashMap (); result.put("toast", new ToastFREFunction()); result.put("alertDialog", new AlertDialogFREFunction()); result.put("timePickerDialog", new TimePickerDialogFREFunction()); result.put("devices", new DevicesFREFunction()); result.put("itemListDialog", new ItemListDialogFREFunction()); result.put("googleMap", new GoogleMapFREFunction()); return result; } @Override public void dispose() { log("dispose()"); } private void log(Object o){ Log.i(TAG, o+""); } }
7.Package Native Extensions
這裡我卡了很久,參考了許多文章和不斷的失敗,才有一些心得
要先寫一隻和 Native 呼叫用的 class, 並將其打包成 swc 格式
然後將 swc 解壓縮, 取得裡面的二個檔案
寫一隻 extension.xml 用來說明 Native , 長成這樣
<extension xmlns="http://ns.adobe.com/air/extension/2.5">
<id>milkmidi.air3.demo</id>
<versionNumber>1.0</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>milkmidi.air3.demo.jar</nativeLibrary>
<initializer>milkmidi.air3.demo.AIR3Context</initializer>
<finalizer>milkmidi.air3.demo.AIR3Context</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>
接著透過 Command line 的方法,將一堆東西打包成 xxx.ane
還好有善心人事將這一切的動作,包成了 Ant 用的 xml 格式
你只需要呼叫即可
原文如下
http://blog.aboutme.be/2011/09/12/air-native-extensions-hello-world-example-ant-script/
結論:
AIR3.0 可以呼叫原生的類別,但前提是”你還是需要自己寫原生的類別來給flash端呼叫”
想在 iOS 上用的話, 還是要乖乖寫一下 xCode。
但至少是一大進步, 其待正式版的到來。
參考文章:
http://www.leebrimelow.com/?p=2995
http://akabana.info/2011/08/11/air-native-extension-series/
http://www.adobe.com/devnet/air/articles/extending-air.html
轉載請註明出處:
http://milkmidi.blogspot.com/2011/09/air30-native-extensions-example-part1.html
AS source code
Android source code
留言
之前拜讀過你的Robotlegs~幫了我不少忙~
這次又是你回答我~真該叫你聲大哥了阿~
回歸正題~"~
所以作出ane以後~
就只要adt -extdir去包~
就可以跑了嗎~
因為我本身是用FB FLEX開發的~
Debug模式一直失敗~
但一定要實機測。
不然發怖會不過