運營商登錄付費接入ANE打包心得


轉自:http://www.shadowkong.com/archives/1042

項目進行到了接入運營商的階段。而國內除了91等幾家聲名顯赫的運營商會提供已經做好的ANE給ADOBE 的移動開發者之外。其他的運營商一般只會提供IOS封裝庫 或者是Android 的JAR 封裝庫。這對於Air For Android 開發的移動應用來說。接入這些運營商就需要應用開發者自己實現ANE。

這幾天一直在做android運營商的接入。這里就先把這幾天的心得先發上來。大概下一次就會把Air For IOS Of ANE 的心得一並發在這里。

針對Android的ANE打包:

配置JAVA android開發環境 配置各自系統變量等略過。

首先說說我這次拿到運營商提供的JAR庫的結構。(如果你拿到的SDK組成和我這次的大同小異,那你可以看完省很多彎路  如果你拿到的SDK比我拿到的復雜 那你僅僅可以參考其中的一些資源打包等方法。很多情況還是有不同的)

我這次運營商提供的有 :

A.JAR庫文件一個;

B.還有布局文件庫(res文件夾下的一堆UI布局文件);

C.原生android寫的DEMO一個;

D.開發文檔若干;

接下來說說我從拿到SDK到實現ANE登錄接入的過程(由於打包ANE主意事項非常非常的多,稍微錯一步  如果沒有及時發現,就會郁悶一整天):

1> 這里我們需要動手術的只有 A,B ;C只是作為我們實現AS接口的時候的JAVA端編碼結構參考DEMO;拿到手后 提醒下大家 應該把D 開發文檔仔細研讀,我今天就因為這個問題差點和運營商接頭的CODER打了一架。淡定淡定。脾氣還是不夠好。(因為我問一個資源的路徑 都說了整整一個下午 對方才知道我要的是什么。。也許是我的表達能力實在不行,好吧 )。

2> 把開發文檔仔細又仔細的讀過一遍之后  我整理了一下思路,我的思路是:自己寫一個JAR實現和AS的拓展接口,在自己寫的JAR中調用運營商提供的第三方庫。從自己寫的這一個JAR為跳板 實現接入的最終目的。我相信大家的思路基本都是一樣的。

3> 分析第三方JAR 和布局文件。把第三方JAR解壓發現里面含有圖片等資源,(我對android原生開發不太了解,不過據我搞原生開發的朋友說 在JAR中打入資源圖片 是一種不可取的方式。),我們都知道 ANE打包的大部分都是源碼,是針對源碼的拓展。網上很多教程的打包ANE 其實導出自己寫的JAR方式都是有誤的,其實正確的方法是 取在BIN文件夾中 的那個自動生成的JAR,這個JAR最純粹 不包含其他雜質。如果是用ECLIPSE直接右鍵項目打包出來的JAR的話  也是可以用的,但是這個包包含了太多太多沒有用到的東西。這樣根本是不利於維護的,如果下一位開發者要對你做的ANE進行維護(平台SDK更新 ANE同步更新等情況),解壓出來你的一堆東西  會困惑不已的。

所以打包JAR 這里推薦直接 是拿ECLIPSE自動生成的那個 純代碼無雜質的JAR。注意即使是對於有資源的第三方JAR,取的自生成JAR 依然是去BIN文件夾下自動生成的那個,不要去導出JAR  那會大很多,針對移動設備來說 APK大小 和用戶的下載量是能構成正比的。

自己構建的連接AS的JAR庫編碼結構直接找開頭的傳送門去看入門教程。這里全部都略過。

4> 打包成最后的一個JAR,可能很多人疑惑,不是已經自動寫了一個JAR么 怎么還要打包成最后一個JAR,原因是這和ANDROID開發的機制有關,這和我們AIR開發不一樣,我們AIR開發使用那個SWC  在打包APK的時候 這個SWC都會自動會加進去,但是這里android調用JAR  僅僅是保留調用而已。也就是說 我們的JAR 調用了 運營商的第三方JAR 之后  生成的JAR 僅僅是幾個源碼文件而已,並沒有包含這個第三方JAR。

這里把 我們寫的JAR  第三方JAR 打包成最后一個JAR  就是這個ANE 生成的最需要注重的部分。在幾天的摸索之后,發現天地會某兄台的方式可以拓展並使用。原帖傳送,使用這里方法提供的命令行如下:

@echo off
::轉到當前盤符
%~d0
::打開當前目錄
cd %~dp0
::你做的主JAR包的路徑
set MainJar=MYANEJavaLib.jar
::第三方JAR包的路徑
set ExternalJar=3rdApiLib.jar
::第三方JAR包頂級包名稱
set packageName=com
echo =========== start combin ==============
::解壓第三方包
jar -xf %ExternalJar%
::合並主JAR包
jar -uf %MainJar% %packageName%
::如果還有別的頂級包可以接着合並,例如:
::jar -uf %MainJar% %packageName2%
::jar -uf %MainJar% org
::jar -uf %MainJar% cn
echo =========== over ==============
echo 再點一下就結束了--小Q
pause

我們就在最后的合並中拓展下。最后的合並頂級包中,在我解壓出來的運營商的JAR中 是有好幾個頂級包的,如圖

 

其中ASSETS 就是所包含的資源文件夾,我們不需要打進去,其中另外的兩個 也是源碼文件夾。一並打進去。只要修改打包命令行就可以了。現在把資源文件夾提出來。接下來說資源的處理

5> 打包ANE重中之重之  打包資源。

打包資源是我搜索的所有朋友都會遇到的問題。在ADOBE的官方教程中 提到的也 只是只言片語。毫無教程可言。但是對於這個問題是不是沒有辦法了呢。其實並不是。接下來是我總結的資源圖片 和布局文件的處理方式。說是打包 其實也不算是打包。其實有方法可以避免資源問題,那就是和運營商溝通,使用動態路徑取資源。在初始化SDK的時候  傳入資源文件路徑 等 是最完美的解決方式。但是但是但是但是。。有那個運營商會聽你說呢?答案是根本沒有。

我們總是不能讓運營商聽我們的話。而只能選擇自己的方法解決問題,因為老大的期限擺在那里。你拖一分 挨罵的幾率就大一分。

打包資源文件 分為兩種:

A,這一種在ADOBE的官方文檔中有一句話提到了。就是關於RES文件夾下的文件,處理方式是在打包ANE的時候 把RES文件夾全部復制到響應平台的文件夾下,例如Android-ARM,Android-x86,Windows-x86 ,下(不要告訴我 你不知道這幾個文件夾怎么來的。。如果實在不知道 請點開文章開頭的傳送門。)

就像這樣:

這是91的打包方式,91的接入把資源全部放到res文件夾下,這種情況下即使91不提供ane  實現91的ane也是最最簡單的;

B,如我這次遇到的情況,資源在外面。在ASSETS文件夾下。我們都知道ASSETS是android項目默認的資源文件夾?(不知道真假 但是我看過的幾個項目都是這樣的),這種情況下的解決方式是(感謝A閃提醒)把ASSETS下的文件或者文件夾(注意注意注意!!並不是連同ASSETS文件夾 而是ASSETS文件夾下的所有文件 文件夾)復制到你的AIR項目的src文件夾下 就是源文件文件夾下(注意注意注意注意!!是你的項目的src文件夾 不是ane文件夾)。這樣打包APK的時候 會把資源放在你ane可以調用的地方。

總結的來說就是:打包ANE的時候  資源如果是ASSETS的話 就放在ane外部 並不是打包進去ane。

OK  總結完畢。

附打包ane命令:

“XX:\XXX\Adobe Flash Builder 4.6\sdks\AIR3.5\bin\adt” -package -s
toretype PKCS12 -keystore qlwx.p12(密匙文件) -storepass 1234(密匙密碼) -target ane XXX.ane extension.xml -swc *.swc -platform Android-ARM -C Android-ARM .
 
注意注意注意注意。命令括號不能作為命令。。是解釋用的要去掉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM