跳到主要內容

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

留言

jotarun寫道…
謝謝分享
可惜我的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 服務並不支援。
祝大家學習愉快

轉載請註明出處

奶綠的 github.io Source Code

Android完全入門篇-01 安裝SDK與裝置USBDriver

大家好,我是奶綠茶
筆者以 Windows 系統來介紹安裝
1. 下載 Android SDK
http://developer.android.com/sdk/index.html
有分 32 位元和 64 位元的版本
為了教學方便,筆者將檔案放置在 D:\ 下
壓開後會有
eclipse資料夾:Eclipse程式碼編譯器
sdk:Android 開發用的 SDK
SDK Manager.exe:sdk管理用的軟體


2. 開啟手機的"開發人員選項"
部份手機該選項被隱藏起來了
要開啟的話,點選"關於手機"
接著連點"版本號碼"七次,就會重新開啟該功能
接著再開啟"USB偵錯"功能
接上你的 USB 線後
這樣你的電腦才能透過 USB 線來偵錯手機的資訊
3. 為裝置安裝 adb usb driver
因為各家廠牌的 Driver 都不同也不通用,所以需要自行 Google 找 Driver
可以用"XXX廠牌 型號 adb usb driver"關鍵字來找
例:HTC Newone adb usb driver
接著找到 我的電腦 / 內容


裝置管理員

會看到一個金嘆號未知的裝置, 按右鍵更新驅動程式軟體

選擇"瀏覽電腦上的驅動程式軟體"

完成後就會看到裝置啟動,並出現 XXX Android ADB Interface

4.測試是否連接成功
進入到第一步下載的 sdk 資料夾裡
D:\adt-bundle-windows-x86_64-20131030\sdk
然後在 platform-tools 資料夾上按住 Shift 鍵,然後再按滑鼠右鍵
選擇"在此處開啟命令視窗"
(此功能只有 Win7 之後的版本才支援, XP使用者就要自行輸入 dos 指令進入到資料夾)
輸入 adb devices
如果看到一串數字,並顯示 device 就表示連線成功
5.新增環境變數(選擇性設定)
為了方便的使用 adb 指令
可以為 windows 設定變數
開啟我的電腦 / 內容 / 左邊的"進階系統設定"
點選下方 環境變數

下方系統變數,找到 Path的選項,按下編輯

在變數值欄位的最後方加入
;D:\adt-b…

前端攻城屍自動化教學 1 (入門軟體篇, 使用 prepros)

大家好,我是奶綠茶
寫程式的最高原則,就是要"懶"
"懶"指的是 "雜事交由電腦幫你完成"
你就可以專心在程式面上
比如說:
uglifyjs JS 自動幫你把 JS 壓成一行
自動幫你轉 sass/ scss
程式碼一存檔,html 就自動 reload
如果這些事還要手動處理就真的麻煩了

新手可以直接使用現成的軟體
https://prepros.io/
這是一套永久免費的軟體(如果覺的好用也支持一下作者)
免費版和正式版的功能都一樣,差在免費版三不五時會貼心的提醒你要不要付費

1. 下載軟體, 支援 PC(不支援 XP ) 和 Mac
2. 安裝, 一直下一步下一步下一步
3. 啟動軟體



4. 把你的專案資料夾拉進 prepros

5. 點選你的 js 檔
可以看到有五個選項
Auto Compile:當你存檔時是否要自動編譯,當然是要打勾呀。
SourceMaps:產生 sourcemap 檔,通常會搭配下方的 UglifyJS。
Uglify JS:幫你把 js 壓縮成一行。
Convert ES6 to ES5:將 ES6 的語法自動轉成 ES6。
Mangle Variables:將非全域變數的名字打亂。
筆者通常都是全勾。



6. 點選你的 css 檔
AutoCompile:是否存檔自動編譯
AutoPrefixCSS:自動加入 css3的 -web-kit 等前綴字。
SourceMaps:產生 sourceMap檔。
CompressCSS:將 css 壓縮成一行
Enable Cssnext:這個我還沒認真研究


7. 點選你的 html,接下右鍵
可以看到一個 Live Preview This File
按下後會啟動一個 localhost 的網頁,之後只要有修改 js, css ,都會自動 reload

8. 加掛 Proxy
live reload 預設只能跑 html, 如果想要執行 php 或是 asp.net 的話
可以在設定裡面開啟 Live Preview Custom Server

9. 其他
Prepros 也整合了 FTP ,可以讓你方便的直接上傳檔案

轉載請註明出處
SourceCodeDownload