1. 程式人生 > 其它 >乾貨|深度講解APP結構,看完後你學會了?

乾貨|深度講解APP結構,看完後你學會了?

本文節選自霍格沃茲測試學院內部教材

我們要學習App結構,那麼就是一定先了解APK包的結構。

什麼是APK

APK 是 Android Package 的縮寫,其實就是 Android 的安裝包。通過將 APK 檔案直接傳到 Android 模擬器或
Android 手機中執行即可安裝。

APK 檔案其實是 zip 格式,但字尾名被修改為 apk,通過 Android Studio 可以看到 APK 內部的檔案。

APK結構

知道什麼是 APK 之後,接下來再來看看 APK 裡面的結構是怎麼樣的。

下面拿雪球 APK 來舉例。

  • lib/ 目錄

存放的是一些 so 檔案。so 檔案是二進位制檔案,用來相容各種型別的 CPU。

Android 開發中,在打包釋出應用時會選擇應用適配的 CPU 架構平臺,在引用第三方庫時也遇到根據不同 CPU 架構引入相應的 so 包。Android
主要包括這幾種 CPU 架構:armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,大多數情況下只需要支援
armabi 與 x86 的架構即可。

不同的 CPU 架構決定了 app 可以執行在哪些裝置上。比如我們的手機裝置一般來說用的是 arm 架構,而我們的模擬器一般來說是 x86 架構。如果
app 只支援 arm 架構的話,那麼就只能安裝在真機上,模擬器上安裝就會不成功。如果是兩種架構都支援的話,那麼就是真機和模擬器都可以安裝了。

  • res/ 目錄

res 目錄是工程資源目錄,存放的是各種資原始檔,包括介面佈局,圖片,字串等。

  • assets/ 目錄

assets 目錄用來存放配置檔案。

  • classes(n).dex 檔案

DEX 編譯 Java 的 Class 檔案,生成 classes.dex 檔案。

  • resources.arsc 檔案

resources.arsc 檔案是編譯後的二進位制資原始檔。

  • AndroidManifest.xml 檔案

AndroidManifest.xml 檔案是 Android
的清單檔案,是每個應用都必須定義和包含的。它描述了應用的名字、版本、許可權、引用的庫檔案等等資訊。

移動端App分類

app 可以分為下面這些型別

  1. Native App:原生 app 手機應用程式,使用原生的語言開發的手機應用。比如系統自帶的計算器、鬧鐘就是原生 app。

  2. Hybrid App:混合型 app 手機應用程式,混合使用原生的程式和 HTML5 頁面開發的手機應用。現在大部分的 app 都是這種混合型的,比如微信,支付寶等等。

  3. Web App:基於 Web 的 app 手機應用程式,完全使用 HTML5 頁面加前端 js 框架開發的手機應用。比如在瀏覽器中開啟美團,這個頁面就是網頁 Web App。

Native App

對於 Native APP 來說,一個頁面上有下面這些型別的物件。

Activity

Activity 是 Android 四大元件之一,用於展示一個與使用者互動的介面。Activity 是存放 View
物件的容器,也是介面的載體,可以用來展示一個介面。

Window

Window 是 Android 中的視窗,表示頂級視窗,也就是主視窗。它提供標準的使用者介面策略,如背景、標題、區域、預設按鍵處理等。

View

View 就是一個個檢視的物件。檢視,是使用者介面元件的基本構建塊,它在螢幕中佔用一個矩形區域,它是所有 UI 控制元件的基類,如一個按鈕或文字框。View
負責圖形介面渲染及事件處理。

ViewGroup

ViewGroup 是 Android 中的檢視組。包含多個 View,也可以包含 ViewGroup。

檢視介面元素

對於 Android 來說,要檢視 app 介面的元素需要用到工具幫忙,常用的工具有 uiautomatorviewer。這是 Android SDK
自帶的工具,使用起來非常簡單。它可以獲取到整個介面的佈局,我們通過它就可以很容易的檢視介面當中的元素和元素的屬性了。

元素屬性

左側就是我們同步過來的介面,可以在介面上直接選擇元素,然後右面就會展示介面佈局和對應元素的屬性。

佈局

瞭解 app 的介面佈局,可以讓我們做自動化測試的時候更容易去定位頁面上的元素。

這裡的佈局就是指介面元素排布的方式。介面上的佈局方式都有以下這些方式:

  • 線性佈局(LinearLayout):所有子檢視在單個方向(垂直或水平)保持對齊

  • 相對佈局(RelativeLayout):每個檢視的位置可以指定為相對於同級元素的位置。例如在另一個檢視的左側或下方,或相對於父級區域的位置,例如在底部、左側或中心對齊

  • 幀佈局(FrameLayout):座標原點是螢幕的左上角,位置固定,只需為控制元件指定大小即可,用來顯示一個單一的檢視

  • 絕對佈局(AbsoluteLayout):能夠指定其子檢視的確切位置

  • 表格佈局(TableLayout):通過畫表表格的方式來實現佈局,整個頁面就相當於一張大的表格,控制元件就放在每個 Cell 中

常見屬性

  • index:元素索引

  • text:顯示文字

  • resource-id:元素id

  • class:類名

  • package:包名

  • content-desc:描述文案

  • checkable:是否可以選擇

  • checked:是否已經選擇

  • clickable:是否可以點選

  • enabled:是否可用

  • focusable:是否可以聚焦

  • fucused:是否已經聚焦

  • scrollable:是否可以滾動

  • long-clickable:是否可以長選擇

  • password:是否為密碼輸入框

  • selected:是否已選擇

  • bounds:元素位置座標

在這些屬性當中,對於測試有意義的有 text、resource-id class 和 content-
desc,其餘的暫時不用太關注。這幾個屬性在後面做自動化的時候,可以用來定位元素。

App結構講解就先講到這裡啦,下期我們分享adb常用命令。大家還想看什麼內容的文章也可以留言告訴我們哦!

** 推薦學習**

內容全面升級,4 個月 20+ 專案實戰強化訓練,資深測試架構師、開源專案作者親授 BAT 大廠前沿最佳實踐,
帶你一站式掌握測試開發必備核心技能( 對標阿里P6+,年薪50W+ )! 直推 BAT 名企測試經理,普遍漲薪 50%+!

⬇️ 點選“閱讀原文”,提升測試核心競爭力!

閱讀原文