跟著 [ 愛利醬 ] 一起把 Android 測試自動化 – 番外篇(1)

    在作自動化測試的時候,常常會有機會要檢查除了功能之外的其它項目。e.g. maxSdkVersion、uses-feature…等的設定。這些設定都是放在專案內的 AndroidManifest.xml 檔案中。如果對這些名詞不太熟的話,推薦可以先去官方文件上確認一下。本篇會介紹幾個主流的工具來 parse AndroidManifest.xml 內的設定。
– aapt : 這個工具是內含在 sdk 中的 build-tools 裡,可以使用 aapt d badging xxx.apk 來 dump 出 AndroidManifest.xml 的內容。如果想要只確認某項設定 (這裡以 uses-feature 為例) 的話可以用 aapt d badging Android-DSfile.4.2-166.apk | grep “uses-feature:’android.hardware.wifi'"。
– apktool : 這個工具是個 jar 檔,專門用來反組譯 apk 檔的。下載的方式可以自行蒐尋一下,使用的方式為 apktool d xxx.apk,即可得到反組譯後的資料夾,再進入該資料夾用 cat AndroidManifest.xml 來取得想要得到的資訊。e.g. 如果想要確認該 apk 檔的 maxSdkVersion 則可用  cat AndroidManifest.xml | grep “maxSdk" 的指令來取得。
– zip tool : 一般的解壓縮工具直接打開 apk 檔,不過通常用這種方式拿到的 AndroidManifest.xml 通常會是亂碼,所以比較推薦用上述兩種方式。
    必須注意的昰,上述的前兩種工具 dump 出的資訊可能不相同,apktool 是產生出原始的 AndroidManifest.xml 檔案;而 aapt 是會幫你解析 AndroidManifest.xml 檔案中有的設定。e.g. 如果想在 Manifest 中設定 uses-feature: android.hardware.wifi 會有兩種方式,一個是照官方文件上直接設定  <uses-feature android:name="android.hardware.wifi">;
另一個則是透過設定 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 去 imply wifi 的設定。如果今天選用後者的方式設定,在 appt 中可以明確得到 uses-feature: name=’android.hardware.wifi’ 這個設定,但用 apktool 你就必須從 uses-permission 的設定去推斷。
    還有一個更慘忍的例子是,如果你要檢查的設定是 uses-feature-not-required 的話,你會發現 appt 從最新的 21 版以後就不再顯示了 (目前我從官方文件上還沒有查到為什麼要拿掉) 。那麼就無法單純的使用 appt 來自動檢查設定;而選用 apktool 又會碰到有可能要推斷 uses-permission 的情況,讓自動化變成兩難。其實光是parse AndroidManifest.xml 這邊就有很多自動化的議題值得討論。這邊只是針對我曾經遇過的問題當作例子解釋,歡迎大家有空也多分享相關的議題,那麼就期待下回的 番外篇吧。
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s