跳到主要內容

Adobe AIR for Mobile( Android 篇)

大家好,我是奶綠茶
今天來教大家如何發怖你的 Flash app , 到 Mobile 上,
軟體需求:
Adobe Flash CS5.5 或是 Adobe Flash Builder4.5
在這以 Flash CS5.5 來做教學
開啟新檔,選擇 AIR for Android

製作方法就和一般的 flash 寫法都一樣
但要注意一些小細節,
1:儘量使用點陣圖而不要用相量
Flash CS5.5 在物件的面版上,提供了新的方法,讓你可以在編譯後,幫你把 MovieClip 直接輸出成點陣圖

使用這個功能,該 MovieClip 就變成了一張圖檔, 裡面的功能會失效
另一個方法是全選你的相量物件,按一下右鍵後,會出現 Convert to Bitmap

2:不要使用 filter, blend mode, alpha
這些都是很吃效能的動作

Publish


General:
Output file:要輸出的 apk 檔名
App name:你的 app 名稱,會出現在 Android 上 icon 的名稱
App ID:這個跟上傳到 android Market 上會有很重要的關係
當你第一次上傳 apk 後, 之後每次更新的 apk 檔, 該 App ID 都要一樣,否則不能上傳
Version:一樣和上到到 android Market 有關,新的 apk 版本號要比前一版高才能上傳。
Version label:這個只是顯示用。
Aspect ratio:可以指定是 Portrait (直), Landscape(橫) 或是 Auto(自動)
Full screen:打勾的話,你的 app 會滿版,沒有的話,上面會保留 Android 的 Tital Bar
Auto orentation:是否自動旋轉。
Render mode:一般 flash 都是透過 CPU 在運算, 在 Mobile 上,可以選擇 GPU 加速。
Included files:編譯成 apk 時,同時把另外的檔案也加入,如圖片或是 sqlite等。

Deployment:

Certificate:驗證檔, 你可以按最右邊的 Create 產生一個屬於自己的驗證檔
Password:你的驗證檔密碼
Android deployment type:
在這雖然有 Emulator 的選項,但更新到 AIR2.6 後,裝上去執行都會出現 Error,如果有人測成功的話再麻煩告知方法。
還是乖乖選擇 Device release 吧
Get AIR runtime from:如果使用者安裝你的 apk , 發現沒有 AIR runtime 時,會到那兒下載
預設就選 Google Android Market吧

Icons:
Android 有三種 Size , 36x36 , 48x48, 72x72

Permissions:
這裡跟 Android 的 Permissions 是一樣的,只是目前 AIR for Android 還沒有那麼多可以選
如果你有需要用到特別的功能,都需要在這兒打勾才可以使用
比如說你要使用 Camera , 就要選  CAMERA
要錄音,就要選 RECORD_AUDIO

安裝 Android SDK
http://developer.android.com/sdk/index.html
接上你的 Android 手機, 按下發怖, 就可以成功上傳到你的手機上了。


關於 catchAsBitmap 和 catchAsBitmapMatrix
在 AIR2.6 裡
所有的 DisplayObject 多了一個 catchAsBitmapMatrix 可以使用
看一下 官方文件的說明
簡單來說,就是你的物件只有 move, rotation, alpha , scale 等動作時
可以開啟這樣的屬性,會讓你的效能更佳
而另一個 cacheAsBitmap 指的是如果物件只有移動的話,開啟該屬性效能會更佳
所以我就針對
什麼都不開啟
開 cacheAsBitmap
開 cacheAsBitmap和 cacheAsBitmapMatrix
並配合二種動作方試來做測試


測試的結果:
什麼都不開,二種動作都會 lag
只開 cacheAsBitmap, 在只有移動時,效能優,但如果加上 rotation 之類的話,比什麼都不開還要慢
開 cacheAsBitmapMatrix, 效能最優
祝大家學習愉快,
下一篇來分享 AIR for iOS

測試影片



補充一下:
你的 Android 手機必需是 2.2 以上版本
同時 CPU 是 v6 以上,才能安裝 AIR runtime.

轉載請註明出處
SourceCodeDownload

留言

Unknown寫道…
謝謝分享
可惜我的android不能裝air..
匿名表示…
奶綠茶老師您好,我有一個問題想要請教您:

我現在使用Flex Builder4.5寫Android的程式,是一個網路電話的程式. 程式的架構是"ViewNavigatorApplication" , 所以一定會有很多的View. 因為是網路電話,所以跟server常常會有資訊交換,例如撥號,來電...等等.

我想問的問題是如何在這些view(s)快速交換資料? 因為有很多資料是要傳到不同的view (parentApplication->view),也會回傳到程式的最上層(view->parentApplication), 目前我只知道用navigator.pushView可以帶資料到不同的view(可是一次好像只能一筆?),不過這樣不就代表一定要換view才能傳送資料? 請問奶綠茶老師有什麼方法可以讓這些view之間互相交換資料..這個問題困擾我很久,也找了蠻多文章,不過到目前為止還沒有找到解決方法,所以想說來這邊請教奶綠茶老師,請老師幫幫忙,謝謝!!
milkmidi寫道…
試試看使用 Singleton Pattern
http://milkmidi.blogspot.com/2009/03/designpatternssingleton.html
應該可以很方便的決解你的問題
chunte表示…
奶綠茶老師您好,謝謝您的回覆!! 這兩天我看了一些關於singleton pattern的文章,也包含您部落格裏面的文章,雖然不是非常了解,但已經有個大致的概念了.

不過我不曉得singleton是否適用於我的程式...
如我上面提到,因為手機版本需要使用很多的view來切換不同畫面, 在我的root view會處理server傳過來的data(從其他.as告訴server要傳什麼資料過來),再根據這些data來控制其他view要怎麼動作,例如我現在可以從其中一個畫面撥號出去,但是當對方把電話接起來時,server會傳送一個命令過來告知我通話已建立,但我在撥號的那一個view就會收不到這筆通知的資訊,造成我撥號的view一直在顯示正在撥號..對方一接起來就出現錯誤,錯誤是發生在root view,所以讓我感覺不太像是要用singleton的作法....


然後想再問老師幾個問題:
(1)不同的view可以呼叫對方的function嗎? 我今天寫了一個小程式,view2是使用者輸入書字要做加法,view1接收使用者從view2所輸入的數字來做加法,再把結果從view1回傳給view2顯示結果,結果顯示錯誤.(num1 num2 sum 都是view2的元件)

parentApplication.view.cal(num1,num2);
sum=parentApplication.view1.num3;

結果顯示以下錯誤:
ReferenceError: Error #1069: Property view1 not found on TEST2 and there is no default value.

錯誤是在parentApplication.view.cal 這一行, 想請問老師如果要不同的view之間互項傳遞資料和互用對方的function要怎麼解決?

(2)在用view navigator時常會出現Error #1009
上次找到錯誤的原因是因為view裡面的元件為null,也就是系統把它砍掉了,是不是有什麼方式能保持每一個view的元件都存在?

不好意思,問題蠻多的,這些都是困擾我蠻久的問題,不過只有這樣講老師可能也很難理解我的問題點到底怎麼解決,如果之後有需要的話再把程式碼給老師看,用看的應該會比較清楚程式的架構,到時候再跟奶綠老師詳細討論.

麻煩你了~! 謝謝!
milkmidi寫道…
當程式碼出現呼叫 parent 的函式就是不好的寫法
你的問題可以用 Singleton 解決
Singleton 除了可以記錄變數,也可以當作發送事件者,
root View 接到事件後,
透過 Singleton 轉發送事件
子 View 在 createComplete時,就對 Singleton 注冊該事件,
這樣就人人可以知道。

比較好的寫法,還是用 MVC 寫會更適合。
希望這樣有決解你的問題
我自己在寫 Mobile 或是 Web 時,都很常用 Singleton。
chunte表示…
"root View 接到事件後,
透過 Singleton 轉發送事件
子 View 在 createComplete時,就對 Singleton 注冊該事件,
這樣就人人可以知道。"

這句話真是讓我眼睛為之一亮啊~! 看到這句話彷彿我的程式就快完成了...XD!!

不曉得奶綠老師有沒有比較推薦的一些線上資源或是書籍,雖然有看過一些網路上的文章,但還是不太了解,第一次碰singleton和MVC,不曉得如何才能從基本的了解他們...

P.S:再請問老師一個問題,VIEW之間的FUNCTION可以互相呼叫嗎??
milkmidi寫道…
這一本很不錯,
http://www.tenlong.com.tw/items/9867794524?item_id=33235
買回來 K 一下。
MatisHsiao寫道…
AIR 2.6要使用Android模擬器要手動編譯APK檔,您可以參考我這篇文章
http://matishsiao.blogspot.com/2011/08/flashcs-5andorid-apk.html
milkmidi寫道…
感謝提供,馬上來讀一下
匿名表示…
請問一下
flash 發佈android 之後
文字欄位無法輸入中文
但是可以輸入數字和英文
這問題可以解決嗎
milkmidi寫道…
我沒遇到這樣的問題也
請問你的手機是什麼型號呢
匿名表示…
我的是 htc sensation
丹尼爾寫道…
老師你好,請教您一個問題
我用CS5.5寫了一個android的遊戲,
裡面有用了SQLite的資料庫,
在電腦上執行時完全功能都正常,
可是一旦轉成apk之後,安裝進手機都沒辦法使用資料庫內的資料,
請問我該怎麼寫才能讓程式讀取到資料庫呢??
附上我的部份程式碼,麻煩您指點一下,謝謝
var conn:SQLConnection = new SQLConnection();
var folder:File = new File(File.applicationDirectory.resolvePath("MyData.db").nativePath);
var runSQL:SQLStatement = new SQLStatement();
runSQL.sqlConnection = conn;
var bstmp:int = 0;
runSQL.parameters["@bbs"] = bbs;
conn.open(folder,SQLMode.READ);
runSQL.text = "SELECT logs FROM bslog WHERE bs = @bbs";
runSQL.execute();
var result:SQLResult = runSQL.getResult();
var row:Object = result.data;
bstmp = row.logs;
conn.close();
if (bstmp == 0 || bssg < bstmp)
{
bwin.patxt.text = "最佳紀錄:" + bssg.toString() + "步";
runSQL.parameters["@bbs"] = bbs;
runSQL.parameters["@logs"] = bssg;
conn.open(folder,SQLMode.UPDATE);
runSQL.text = "UPDATE bslog SET logs = @logs WHERE bs == @bbs";
runSQL.execute();
conn.close();
}
else if (bssg > bstmp)
{
bwin.patxt.text = "最佳紀錄:" + bstmp.toString() + "步";
}
壘包寫道…
我也有與丹尼爾同學同樣的問題...
轉成apk在手機上執行就沒辦法呼叫資料庫的資料
要怎麼解決呢???

謝謝老師
壘包寫道…
我的程式碼如下:
http://codepad.org/uBsl2i52

我是call AMFPHP呼叫我已經寫好的PHP class
然而這個class會幫我做查詢dababase的相關資訊

我可以在電腦上弄成swf檔執行,但是轉到手機上我的respoder就沒反應...

請問這是跟crossdomain.xml有關嗎??
milkmidi寫道…
To 丹尼爾
應該是要讀的到
先查查看是不是載入的 .db 路徑有誤

To 壘包:
AIR 可以跨網域呼叫,
是不是 Android 的 INTERNET permission 沒開啟呢
壘包寫道…
哇真的沒錯...
一開啟就可以了

我竟然忘記最重要的權限...結果想好久

非常感謝老師
壘包寫道…
呃...老師抱歉
我發現可以的原因是因為我有寫個小捷徑測試,忘記註解掉,所以才誤以為有成功。但實際上我用去call PHP裡面的程式還是失敗的...

我有照老師的方式開啟那個permission,但還是不行...我還需要設定哪個部份呢?? 奇怪哩...囧
milkmidi寫道…
應該要可以才對
先試一般的 URLLoader 去試載一個 txt
看成不成功
然後再查一下 Server 端是不是有檔來源
丹尼爾寫道…
老師你好~我檢查過我的檔案本身都是OK的了~
但是他還是查詢不到我的資料庫檔案~
但是我在ADOBE上面查詢過相關的問題
裡面有寫到"發佈預先填入的資料庫"
但是對於"請使用來自 AIR 套件的檔案做為「範本」資料庫"這句話不是很能理解
請問這句話是十麼意思呢??
我該怎麼把我的資料庫檔案改成"範本資料庫"呢?
附上當時查詢的網址
http://help.adobe.com/zh_TW/AIR/1.1/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7d3c.html
再次的麻煩您了
壘包寫道…
用loader去讀個TXT檔是失敗的
但是很神奇,為什麼弄成swf檔loader可以執行
反而在手機上執行app,loader卻沒反應...

我困惑了- -...
milkmidi寫道…
因為沒開啟 Android Internet 權限 ?
壘包寫道…
恩...我發現老師說的對,internet這個權限確實要開啟,這樣debug在手機上就能正確的呼叫amfphp跟loader。

不過這些成功的要素是我在學校Lab測試的,換到家裡就不行,即使有開權限。

我想是不是因為我的Web Server&Database架在學校的關係呢?導致它只能認Lab的網域??我有試著在amfphp資料夾裡面的service加加看crossdomain.xml,不過還是失敗...

不好意思又麻煩老師了!!
milkmidi寫道…
因為你要跟叫網路資源,就一定要開啟 Internet 的權限,
現在就是確定不是你的程式問題
差差 Server 端是不是有檔呼叫來源
壘包寫道…
好!!我會再試試看
非常感謝老師
通樂超人寫道…
請想問奶老師,我目前使用Develop進行開發 AIR for Android,不過我碰到解析度上的問題。

如:Sony XPERIA X10解析度是480*820,可是XPERIA S 解析度高達1280。

想請問奶老師,有什麼解決方式嗎?
milkmidi寫道…
就像做網站一下
要自己想辦法定位
通樂超人寫道…
不好意思,不太懂老師的意思。我目前開發的大小是480*800,我改如何讓解析度更大的手機也能正常顯示?
milkmidi寫道…
要自己寫程式判斷使用者的解悉度
然後物件的座標也要跟者使用者的解悉度一起更改
通樂超人寫道…
老師不好意思,那這樣子的話 是不是需要多張不同解析度的圖片?
milkmidi寫道…
是的,
不過通常會做一個比較通用的 size
然後再用程式去縮放
匿名表示…
不好意思 我想請問一下
就是我是在FLASH CS5.5的環境下案CTRL+ENTER
進行對資料庫連結和增刪改查的測試
這時候都沒有問題
可是發佈到 ANDROID平板上的時候 就不能使用資料庫
想請問一下是甚麼問題

這個網誌中的熱門文章

超好用的無限免費網頁空間,無廣告,無流量限制

大家好,我是奶綠茶 今天來教大家如何申請一個無限免費速度又快的網頁空間 1 首先到  https://github.com/ 申請帳號(一直下一步,下一步,下一步) 2 到你的個人頁,切換上方的 tab 到 Repositories, 按下右鍵的 new 3 Repository name 一定要是這樣的格式 username.github.io 我的 github 網址是 github.com/milkmidi 那就要輸入 milkmidi.github.io 選擇 public, 這樣別人才看的到 private 有其他用途, 而且要付費才能使用 完成後按下 Create repository 5 安裝 SourceTree github 並不支援 FTP 或是網頁上傳,一定要透過指令碼 在這我們選用有圖型介面的軟體,方便大家學習 https://www.sourcetreeapp.com/ 下載並安裝 啟動後登入你的 github 帳號 6 clone 你的 github io 專案 右上角有個 Clone or download 點選後 複製 https 連結(不要選到 ssh ) 7 將 https 的連結貼到 SourceTree 8 上傳 html 到本機 github.io 資料夾,放一個 index.html 切換到 SourceTree, 這時會看到 Unstaged files 的欄位 選擇 Stage All 9 git 要求每次的 Commit, 都一定要打說明文字(好習慣) 輸入完成後,按下右邊的 Commit 10 發佈(Push),這樣就完成啦 可以到你的 http://milkmidi.github.io/ 去查看檔案有沒有出來 其他 Commit 可以想像是做一個記錄,你可以很多的 Commit 最後再一次 Push 上去 github 原本是給程式設計師用的版本控管服務 免費版提供無限空間讓你放檔案,但一定要是 public 想要有私有的 Project ,就只能付費 github.io 只能放靜態檔案,php, aspx 服務並不支援。 祝大家學習愉快 轉載請註明出處 奶綠的 gi...

奶綠茶新書上市_密技公怖_程式碼下載

奶綠茶第一本 Flash 書籍上市啦 博客來書籍館 Flash 3D 特效宅急便 - 商業範例隨學隨 把我對 Flash 的研究與熱愛, 全寫在其中 本書的前幾章, 特別安排 ActionScript3.0 的許多範例 好讓你一步步瞭解 as2 和 as3 的差別 再安排製作動畫不可缺少的 Tweener 類別和一些常用的數學動畫公式 最後當然就來到本書的重點 PV3D 啦 從 PV3D 的原理, 基本架構一點一點的介紹 再透過許多實用的範例, 從中瞭解 PV3D 製作的小技巧 有任何書籍相關的問題, 也請不吝指教 感謝一路走來, 幫助過我的前輩們, 邦邦、Ticore、神魂、Maso、Erin 旗標出版社 小編 Bready 米蘭數位所有夥伴 米蘭數位ActionScript Team:Jason,Ash,Mark 本書大鋼: 1.ActionScript3.0概論 分析AS3的概念與語法, 從基本的滑鼠事件、外部載入、氣泡事件介紹起 適合熟悉AS2, 想轉戰AS3的人員。 2.程式碼製作動畫 使用簡單的數學公式, 套用到程式裡, 脫離死版的影格動畫。 3.製作動畫的好夥伴:Tweener 除了套用數學公式外, Tweener類別也能加速我們開發出更多的動畫效果, 不需辛辛苦苦的找公式。 4.自定類別 AS3的精神, 是在於強大的物件導向, 當然也要熟悉類別的寫法與使用。 5.Flash3D - Papervison3D 如果在Flash玩轉3D效果, PV3D是最好學, 最快上手的3D Flash Engine, 從簡單的3D概念, PV3D類別, 事件等。 6 漫天飛舞的Paper3DWorld效果 7 迷你旋轉木馬式秀圖效果 8 最經典! CoverFlow 圖像展示效果 9 天旋地轉 TiltViewer效果 10 FlatWall3D電視牆效果 11 經典旋轉木馬 Carousel3D 秀圖效果 12 光源材質展示與簡易型的方塊彈跳效果 13 載入外部3D模型與動畫 14 超立體旋轉九宮格 Box3DWorld 15 空間感與透明感兼具的 SpaceGallery 16 螺旋式 SpiralCarouse 影像展示 17 Flash10 3D功能 18 Flash效...

奶綠茶photoGalleryV3.5

奶小茶的photoGalleryV3.5原始檔 2007/12/30 更新小Bug,請重新下載 線上Demo: http://milkmidi.com/photogallery/galleryv3.html 1.支援SWFAddress,讓FLASH可以有上一頁下一頁和每張獨立網址的功能 2.圖片路徑圖說經由XML來設定 3.背景依據顯示圖片,自動變化成最接近的顏色 4.非商業用途,歡迎使用並修改(如果覺得我製作的好,也煩請加入我的logo) 5.可結合後端伺服器 00.art 相本集資料夾 com 奶綠茶的Class檔 swfaddress SWFAddress資料夾 swfobject swfobject資料夾 XML galleryV3.fla 原始檔 index.html 主檔html SWFAddress.as SWFaddressEvent.as Source Code Download 解壓密碼:回覆文章,即可看見Password