最近做了一個基於AIR平臺的ANE,趟坑無數,自己記錄一下流程
一,平臺介紹
1, ANE(全名Adobe AIR Native Extension)本機擴充套件,就是對Air執行的本機的功能的擴充套件,因為 Flash Air可以開發各種跨平臺的專案<windows,iOS,安卓...> ;由於Flash可能沒有提供實現一些特定需求功能的API或者平臺不提供對外的API介面,導致Flash專案不能實現想要實現一些功能,或者呼叫平臺的底層API。這時候通過ANE橋接原平臺的方法的方式來實現一些flash平臺不能實現的功能<開啟硬體裝置(攝像頭,開啟相簿,獲取定位資訊),獲取硬體資訊...
二,開發環境及工具
2.1,開發環境:
mac OS10.13.6
2.2,開發工具:
Xcode10.0(每個iOS開發都在使用的工具,就不用多介紹了吧)
FlashBuilder4.7(Flash Builder是Adobe公司的Flash Builder的最新一代產品,Flash Builder將構成應用程式的資源(資料夾和檔案)組合到一個容器中,專案包含一組屬性,這些屬性控制應用程式的構建方式、構建的應用程式所在的位置、除錯的處理方式以及該專案於工作空間中其他專案的關係)下載地址: ofollow,noindex">FlashBuilder下載地址 (提示,如果用瀏覽器下載,速度慢的無法忍受,如果用下載工具下載,速度還可以)。
Flash Builder後續就簡稱FB了。
2.3,SDK配置
FB4.7下載之後,可以試用60天,至於破解方法自己去度娘那裡找,FB4.7下載之後自帶的AirSDK的版本是3.1,Flex SDK的版本是4.6,在後續的調取真機來除錯的時候會有很大的麻煩,所以最好先把SDK都先升級一下。
2.3.1,更新Air SDK
下載時不要點選上面的那個DownLoad Now,那個是獨立的Adobe AIR SDK包,包含的有一些除錯開發工具,咱們可以點我畫圈的那個連結直接下載。 AirSDK下載地址

1
2.3.2,將已下載的最新SDK覆蓋到FB上去
將已經下載好的SDK(截止到我發文,最新的SDK版本應該是31.0)解壓放置到本地,路徑/Users/user/download/sdks/NewAirSDK
接下來需要認清下面2個路徑的airSDK ,
/Applications/Adobe FlashBuilder4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK 路徑是AIRSDK;
/Applications/Adobe Flash Builder 4.7/sdks/4.6.0 路徑是Flex SDK包含AIRSDK。
建議在做下一步操作前先將這兩個資料夾做一下備份。有備無患嘛。
開啟終端 使用ditto命令(MAC終端已經有了這個工具了,直接使用吧)來合併資料夾
ditto /Users/user/download/sdks/NewAirSDK /Applications/Adobe Flash Builder 4.7/sdks/4.6.0 ditto /Users/user/download/sdks/NewAirSDK /Applications/Adobe FlashBuilder4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK
這時候咱們就已經把最新的Air SDK給更新到了FB上
2.3.3 下一步是更新Flex的版本
FB下載之後自帶的Flex版本是4.6.0,如果不升級最新版,到後面建立Flex手機專案來進行打包的時候,可能會報出“swf version is lower Rooter SWF version ”這樣的錯誤。但是如果你的專案是ActionScript的手機專案的話,應該就不用更新這個。

2
我是直接下載下面的那個二進位制檔案,然後安裝。安裝目錄選擇在 /Applications/Adobe Flash Builder 4.7/sdks下新建一個資料夾4.16.1
這個時候,咱們才算是把安裝環境配置好,簡單吧!
三,開始製作ANE
3.1 開始製作打包ANE使用的SWC檔案
FB->檔案->新建-> ActionScript庫專案

3
選擇工程建立的路徑和專案名稱,注意下面的包括AirSDK 的勾一定要勾選上,然後下一步,完成。

4
FB->檔案->新建-> ActionScript類

5
點選完成之後,在生成的as檔案中開始愉快的coding

6
最後command +B編譯之後,在bin資料夾下生成SWC檔案。 FB的工作就可以暫時告一段落了。其實在最開始的時候選擇建立Flex庫專案也是可以的,在Flex庫專案裡再建立AS類,最終目的是生成SWC檔案。
3.2 開始建立打包中要用到的.a檔案

7
建立Xcode工程, 將自己已經封裝好的功能模組的庫檔案打包進來,(我在這個demo中是把友盟的統計功能給整合進來,如果有同學不知道怎麼封裝靜態庫的,可以去網上查詢一下資料,在這裡推薦兩篇, xcode製作iOS靜態庫SDK<包含第三方.a或者.framework靜態庫> ,iOS靜態庫SDK製作),將封裝好的庫檔案的.a檔案和暴露介面的.h檔案引入到新建立的專案中,再將FlashRuntimeExtensions.h檔案引入到專案中。這個檔案的路徑如下圖所示

8
最後重寫新建專案的.h和.m檔案,使得Ai r平臺可以通過ANE檔案呼叫到OC的方法

.h檔案中暴露出的方法

.m檔案中方法的實現

.m中方法的呼叫和實現

設定Scheme為release
選擇Generic iOS Device,Command+B,編譯成功生成打包所需的.a檔案
3.3 製作打包所需的 platform.xml檔案和extension.xml
現在要開始另外一個工作,建立 platform.xml檔案,在這裡設定你在.a檔案中需要依賴的框架,比如我在引入的友盟,需要引入四個庫分別是 CoreTelephony.framework, libz.tbd , libsqlite.tbd 和 SystemConfiguration.framework ,一定按照格式寫,要不然後面生成ANE檔案時會報錯

platform.xml
另外一個重要的檔案:extension.xml, 這個檔案非常重要,連線了swc檔案、.a檔案;id 是在咱們在AS庫工程中定義的id,必須與此檔案對應,如果想要ANE檔案在安卓機型上也可以使用,就需要在這裡加入安卓使用的jar包,和安卓的platform,因為我做的這個只要在iPhone上執行,所以extension.xml檔案裡的東西稍微簡單一些。

extension.xml
至此,打包ANE的準備工作已經基本完成了,準備開始下一步吧
3.4 打包ANE檔案
建議新建一個資料夾,資料夾內包含以下檔案 ,其中library.swf檔案是由.swc 改名.zip解壓後生成的檔案

createANE所需的檔案
adt -package -target ane UMForANE.ane extension.xml -platform iPhone-ARM library.swf libUMForANE.a -swc ASUMForANE.swc -platformoptions platformoptions.xml
ADT 工具包含在 AIR SDK 的 bin 資料夾中,將檔案的路徑新增到 PATH 環境變數中,使用終端打包,最終生成UMForANE.ane檔案。
至此,製作ANE檔案就大功告成了,還是有點繁瑣的,怕麻煩的朋友可以使用一位大神做的一個Xcode外掛, xcode-template-ane ,將其安裝在Xcode中,這個外掛大概是2012年完成的一個東西,安裝完成後建立一個ANE靜態庫模板專案,他會幫你建立 platformoptions.xml platformoptions.xml 和.h檔案以及.m檔案中的大部分程式碼,還有最後的打包的過程都已經用指令碼寫好了,我剛開始沒有跟大家說用這個模版,是因為我用這個模版(使用最新的AIR SDK)最後生成ANE檔案的那一步,一直是build success但是ANE檔案不能產生。百思不得其解,如果大家對這個過程感興趣,可以移步這位大神的這篇文章 Flash Air ANE for iOS 整合最新版本的友盟統計SDK.framework功能 ;
四,建立工程來驗證ANE的使用
重新開啟FB,建立Flex手機專案向專案中新增ane擴充套件庫

建立flex手機專案

選擇最新的SDK

新增ANE檔案
點選完成之後,就建立flex手機專案成功,並且咱們把ANE檔案匯入到了這個工程中去!
修改工程的XML檔案,將咱們前面一直強調的唯一的ID,新增到XML檔案中

修改XML檔案中的ID
在mxml檔案中新增簡單的測試程式碼

新增測試程式碼
在工程上右鍵點選,進入屬性,選擇Flex構建打包,開始匯入用唯一的ID,在蘋果開發平臺上建立的配置檔案,和對應的P12 檔案,將其匯入

新增構建打包所需要的證書和配置檔案
點選確定之後,連線真機,在工程上點選執行。

真機執行畫面
點選view上的按鈕

點選之後修改按鈕狀態

同時在友盟的後臺觀察到資料變化
至此,才算是 把整個ANE的流程走通,第一次寫文章,原來把自己走過的流程全部變成文字和圖片也這麼難!給自己留下點筆記,省的以後忘記,也歡迎大家來交流!
五,參考資料
1, https://www.jianshu.com/p/175f07e1cc1a
2, http://www.voidcn.com/article/p-ttlcfffw-bhs.html
3, https://www.jianshu.com/p/155a3cfb765e?utm_source=itdadao&utm_medium=referral
4, https://www.jianshu.com/p/62a682792db8
5, https://blog.csdn.net/u010784415/article/details/18038443