2012年2月13日 星期一

Android : 以 swfLoader.apk 打包我的 Flash 作品 (2012.07.10更新)

2012年2月13日 星期一
有人在問,我的 Flash 作品可以透過網路在 Android 的瀏覽器上使用,那要如何將題庫改成自訂的,並且離線讓學生在 Android 上使用呢?
我的手機雖然是 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 中:
(1) 先將語文高手  football.zip、swfLoader.apk、SignApk.zip 下載回來。
(如果已有現成的,此步驟就省略)
下載圖中所需要的三個檔案
(2) football.zip 解壓縮以後,將語文高手 football 資料夾中的題庫及設定都修改並儲存好。
將 football.zip 解開並置入自己需要的題庫
(3) 將下載回來的 swfLoader.apk 以 7-zip (或其它檔案壓縮工具)開啟
以 7-zip 開啟 swfLoader.apk 準備加入自己的題庫
(4) 在 7-zip 中找到 swfLoader.apk 中的 assets 資料夾,對準 assets 快按兩下滑鼠進入。
找到 assets 並快按兩下進入
(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/football.swf
修改設定檔,在裡面加上一行語文高手的設定
(8) 把桌面上的 index.txt 檔案拉回到 7-zip 中 apk 的 assets 資料夾中儲存。
把選單設定檔 index.txt 拉入 apk 中更新
如果詢問是否要將檔案置入 apk 中,當然要選「是」

(9) 儲存 swfLoader.apk (關閉 7-zip)

以上是將自己的 Flash 遊戲加入 swfLoader.apk 中的的程序,我們已經更動了 apk 的內容,它的電子簽章便會有問題,所以接著我們要重新簽署,這樣別人拿到時才能安裝。

重新簽署 APK 檔

(1) 將下載回來的 SignApk.zip 解壓縮。
將 SignApk.zip 解壓縮
(2) 解壓縮完的 SignApk.zip 應該會多一個名為 SignApk 的資料夾,裡面會有一個檔名為「auto_signapk.bat」的批次檔。

(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 的錯誤訊息。


程式下載



相關連結



更新紀錄
  • 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 釋出第一版

6 則留言:

  1. 雄老師您好:

    剛剛安裝您的swfLoader,不知道是不是安裝在手機的緣故,若手機螢幕直向改為橫向顯示內容就消失,變成選單模式,要在按選單後內容才會跑出來,好像直向的螢幕才可以顯示出內容,無法橫向顯示內容

    回覆刪除
  2. yangsterling 您好:
    無論手機或平板應該都會遇到您提的問題,我的程式沒有處理裝置旋轉時會讓程式重新載入的部份,因此比較建議固定一個方向使用。
    至於直向或橫向應該都可以使用,我沒在手機上用過,只在平板上測試

    回覆刪除
  3. 雄老師您好~
    我是大三要生大四的專題生,我們希望在HTC Sensation(2.3.5)上面開發一個應用程式,而該程式要能載入我們做好的flash(類似導覽,到特定位置就載入我們的flash來幫放),不知道您能不能給我們一些意見或指教,或者能夠跟您用同樣的方式將flash給包入???具體我還是不太了解應該怎樣做才好,再麻煩您答覆,非常感謝~

    回覆刪除
  4. 顏銓您好,
    在 Android 上如何載入 Flash,網路上有很多可參考的資料,而且也可以找到 source codes,這應該是您要的 keywords :
    android swf
    webview swf

    回覆刪除
  5. 請問這程式可以在android 4.0.4上使用嗎

    回覆刪除
  6. Vento 您好:
    理論上, 如果您 Android 中的 Browser 可以看得到 Flash 的動畫, 應該就可以用。
    不過, 我只在 2.x & 3.x 上試過, 還沒有機會在 4.x 上測試。

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket