標籤:
開發環境:FlashBuilder4.7 AIR13.0 Eclipse
由於我懶得陪安卓的開發環境所以我下載了包含安卓SDK Manager的Eclipse,其實直接用FlashBuilder開發ANE也是可以的,由於後面需要進行調試,個人認為使用Eclipse和FlashBuilder協作調試還是較為方便的。 首先不得不說ANE的製作對於技術的要求遠不如對打包流程的細心要求高,寫這篇部落格的時候我剛剛完成《百萬手辦王》項目接入TrueChina平台的ANE製作,耗時2天,基本上遇到了大大小小無數的坑,本篇文章主要記錄的開發ANE過程中需要注意的事情和怎麼利用Eclipse和FlashBuilder一起來調試安卓ANE原生代碼。 由於Adobe的AIR13.0對ANE的打包進行了不錯的最佳化,不需要手動的合并JAR檔案,並且可以支援R*模式取得資源,這對ANE的開發人員來說是個福音。 本文不介紹ANE的一些基礎編程,這裡備忘一個Adobe的官方教程http://www.adobe.com/cn/devnet/air/articles/ane-android-devices.html上面的這個教程還是寫的比較詳細的,但是有些細節沒有仔細說明,本文是對他的描述作補充。 下面是ANE打包可能出錯的地方。extension.xml中
GameMain-app.xml中
ExtensionContext.as中
一定要確保上面標註的ID要保持一致。如果不一致當然編譯不會報錯,但是你的ANE肯定是運行不起來了。
請務必確定在GameMain-app.xml中加入了許可權和activity 的描述,一定要確保和SDK提供的保持一致,如果出錯和漏填會導致程式的奔潰或者ANE沒反應之類的問題。
下面是JAR檔案的打包需要注意的事項:
上面標註的地方要注意,首先得是一個庫檔案,然後匯入sdk的庫。
編寫好代碼取bin目錄下的*.jar,這裡面的JAR檔案最為乾淨。
AS庫所注意的問題,他得是個flex庫(as庫不知道行不行,反正flex庫是一定可以的)確保勾選包含ADOBE AIR庫!
下面是打包ANE所需要的準備這裡同樣提供Adobe官方的文檔http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2e74ffb4130044f3619-7ff8.html#WSA61FD03D-6F46-4ff9-A77A-9D47C47501F3這是E文的,中文版的缺少以下的描述 真的真的是說的太簡單了,害的我嘗試了好多次。下面是詳細說明AIR4.0開始ANE對安卓的R*機制提供了支援,從根本上解決了資源ID不正確,第三方包沒法讀取資源的問題。而且你不再需要對jar包進行手動的合并了:如把你需要的所有jar除了FlashRuntimeExtensions.jar,(這個ANE打包過程中會自動添加)放在同一個檔案夾中就可以了。 下面是我的打包命令@echo off::轉到當前盤符%~d0::開啟目前的目錄cd %~dp0set FLEX_SDK="D:\Program Files (x86)\FlashDevelop\Tools\flexsdk\bin\adt.bat" %FLEX_SDK% -package -target ane com.tmtbe.truechina.ane extension.xml -swc TrueChinaANEAS.swc -platform Android-ARM -platformoptions platform-android.xml -C android . -platform default -C default . 可以從打包命令中發現多了一個叫 -platformoptions的參數和一個對應的platform-android.xml。下面詳細介紹platform-android.xml的結構。先貼出一個範例 <platform xmlns="http://ns.adobe.com/air/extension/13.0"><description>An optional description.</description><copyright>2011 (optional)</copyright><packagedDependencies><packagedDependency>alipay.jar</packagedDependency><packagedDependency>android-support-v4.jar</packagedDependency><packagedDependency>true_sdk_lib.jar</packagedDependency></packagedDependencies><packagedResources><packagedResource><packageName>com.alipay.android.app.sdk</packageName><folderName>true-res</folderName></packagedResource></packagedResources></platform> <packagedDependencies>標籤對應的是所有的依賴庫,就是放置jar檔案夾中除了充當AS和Java橋樑作用的我們自己寫的那個JAR除外的所有的JAR。(這就是為什麼你需要手動打包JAR的原因了)<packagedResource>標籤描述的是哪個包對應什麼資源。這個很重要填寫了這個就可以支援R*模式擷取資源了。<packageName>對應一個包名稱,ADT會在這個包中產生一個額外的R.java。這樣第三方包就可以通過R*擷取資源了<folderName>對應一個檔案夾名稱,(名稱不限制可自訂)這個檔案夾包含<packageName>這個包所需的所有資源。<packageName>中包名的快速的定位: 第三方庫中/gen中可以很快看出這個R.java的位置。所以我的<packageName>中填寫了com.alipay.android.app.sdk。 我們反編譯一下apk可以發現設定了-platformoptions 後ADT會在我們定義的<packageName>下產生一個額外的R,這樣我們的第三方庫就可以得到資源了。這是AIR的R 這是根據xml產生的額外的R 本篇就到這了~下篇介紹原生代碼的調試。
ANE接入平台心得記錄(安卓)