我的手機雖然是 Android 2.2 的,但是硬體等級不夠高,無法安裝 Flash Player ,因此對這個問題也沒有積極找答案。寒假時拿到一臺測試用,跑 Android 2.2 的平板,有機會好好的試試,到目前為止算有一點小成果,我選擇偷懶的方式,既然在 Browser 中可以玩原有的 SWF 檔,那就直接利用 Android 的 WebView 來載入打包在一起的 Flash 檔案即可。我原有的 Flash 程式只要把原來用相對路徑載入設定和相關檔案的方式,改為較嚴僅的絕對路徑就不會有找不到檔案的問題(雖然這樣一句話簡單帶過,可是花了不少時間才找出問題)。下面就來看看如何用我寫的 swfLoader.apk 來載入 Flash。
功能特性
swfLoader 只是一個幫我們在客製化的網頁瀏覽器中產生 Flash embed 語法的小工具而已,所以系統本身基本上一定要能播放 Flash ,這個工具才有用。另外,是否只能載入我寫的 Flash 程式?其實,不需要載入外部設定檔、圖片檔或聲音檔......的 Flash 應該沒有問題,否則,可不可以順利的執行,關鍵在於原來的 Flash 動態載入外部檔案時的路徑是否有轉換為「絕對路徑」。
swfLoader 基本上有以下的功能:
- 動態載入選單設定檔,可在裡面自訂要載入的 Flash SWF 檔案清單。
- 要載入的 Flash 檔案可以儲存在 SDCard 或是在 apk 中,但以 SDCard 中的檔案優先。
swfLoader.apk 在 Android x86 中的樣子 |
選單設定
swfLoader 的選單設定檔檔名為 index.txt,儲存在 apk 的 assets 目錄中,格式很簡單:
- 一行是選單中的一個選項。
- 每一行以半形逗號當分隔符號 ,總共分隔為兩個欄位。
- 第一個欄位是選項的名稱;第二個欄位是要載入的 .swf 檔檔名,相對於目前的目錄,或是 SD Card 裡的 Flash 資料夾。
修改 APK 的內容
下面以語文高手足球版為例,說明如何將自訂題庫的 Flash 遊戲放入 swfLoader.apk 中:
(5)將語文高手的 football 資料夾拖到 7-zip 的 assets 中來「加入檔案」。將要新增的Flash拖曳到 assets 資料夾中 |
如果有詢問是否加入 apk 中,當然要選「是」囉! |
(6) 將 swfLoader.apk assets 資料夾中的選單設定檔「 index.txt 」拉到 Windows 桌面準備修改。
將 apk 中的 index.txt 設定檔拉到桌面上準備修改 |
(7) 開啟桌面上的 index.txt 檔案,在裡面加入選單的名稱和 swf 檔案的路徑。
由於我們原來將 football.swf 放在名為 football 的資料夾,也就是「football/football.swf」,所以我們在 index.txt 裡加入底下這一行:
由於我們原來將 football.swf 放在名為 football 的資料夾,也就是「football/football.swf」,所以我們在 index.txt 裡加入底下這一行:
語文高手,football/football.swf
修改設定檔,在裡面加上一行語文高手的設定 |
如果詢問是否要將檔案置入 apk 中,當然要選「是」 |
(9) 儲存 swfLoader.apk (關閉 7-zip)
以上是將自己的 Flash 遊戲加入 swfLoader.apk 中的的程序,我們已經更動了 apk 的內容,它的電子簽章便會有問題,所以接著我們要重新簽署,這樣別人拿到時才能安裝。
重新簽署 APK 檔
(1) 將下載回來的 SignApk.zip 解壓縮。
將 SignApk.zip 解壓縮 |
(3) 開兩個檔案總管,讓我們可以同時看到修改過的 swfLoader.apk 和 auto_signapk.bat ,然後將我們已經加入新題庫的 swfLoader.apk 以滑鼠拖曳並對準 auto_signapk.bat 再放開。
利用 auto_signapk.bat 去呼叫 signapk.jar 的 JAVA 程式來簽署 apk |
,這樣前述已經修改過的 swfLoader.apk 用 auto_signapk.bat +signapk.jar 重新加入電子簽章。如果成功,應該會多一個 swfLoader-new.apk ,接著就可以把修改過的 apk (swfLoad-new.apk)放到網路上或 SD card 上重新安裝(如果出現安裝不成功的訊息,先手動移除已安裝過的,再重新安裝一次,應該就會成功)。
重新安裝完,可以看到已加入「語文高手」的選單 |
將 Flash 儲存在 SD Card 上
swfLoader.apk 在讀取完 apk assets 目錄中的選單設定檔 index.txt 會產生選單供使用者選取要載入哪一個 swf 檔:
- 如果 Android 有插記憶卡,它會先去 SD Card 中名為的「flash」的目錄中先找看看要載入的 swf 檔案是否存在,如果有就直接用記憶卡中的版本。
- 記憶卡中如果找不到要載入的 swf 檔,就會改讀取 apk assets 目錄中的,找到了就載入。
- 如果兩處都找不到設定指定要載入的 swf 檔,就會出現找到 xxx.swf 的錯誤訊息。
程式下載
- swfLoader.apk Android 2.x 適用 (2012.02.12 更新)
- swfLoader3.apk Android 3.0 以上適用 (2012.07.10 更新)
- SignApk (在相關連結的文章中)
相關連結
更新紀錄
- 2012.07.10 由於 Android 3.0 以後的版本並無法使用 API 為 2.x 的 swfLoader ,改用 3.0 的 API ,在AndroidManifest.xml 的 application tag 中加入了 android:hardwareAccelerated="true" 的屬性,把 minSdkVersion 改為 11 ,重新編譯為 swfLoader3.apk,在 Android 4.04 中測試過,可以使用。
- 2012.02.12 釋出第一版
雄老師您好:
回覆刪除剛剛安裝您的swfLoader,不知道是不是安裝在手機的緣故,若手機螢幕直向改為橫向顯示內容就消失,變成選單模式,要在按選單後內容才會跑出來,好像直向的螢幕才可以顯示出內容,無法橫向顯示內容
yangsterling 您好:
回覆刪除無論手機或平板應該都會遇到您提的問題,我的程式沒有處理裝置旋轉時會讓程式重新載入的部份,因此比較建議固定一個方向使用。
至於直向或橫向應該都可以使用,我沒在手機上用過,只在平板上測試
雄老師您好~
回覆刪除我是大三要生大四的專題生,我們希望在HTC Sensation(2.3.5)上面開發一個應用程式,而該程式要能載入我們做好的flash(類似導覽,到特定位置就載入我們的flash來幫放),不知道您能不能給我們一些意見或指教,或者能夠跟您用同樣的方式將flash給包入???具體我還是不太了解應該怎樣做才好,再麻煩您答覆,非常感謝~
顏銓您好,
回覆刪除在 Android 上如何載入 Flash,網路上有很多可參考的資料,而且也可以找到 source codes,這應該是您要的 keywords :
android swf
webview swf
請問這程式可以在android 4.0.4上使用嗎
回覆刪除Vento 您好:
回覆刪除理論上, 如果您 Android 中的 Browser 可以看得到 Flash 的動畫, 應該就可以用。
不過, 我只在 2.x & 3.x 上試過, 還沒有機會在 4.x 上測試。