干貨|深度講解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常用命令。大家還想看什么內容的文章也可以留言告訴我們哦!

** _ _
來霍格沃茲測試開發學社,學習更多軟件測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、接口自動化測試、測試框架、性能測試、安全測試、持續集成/持續交付/DevOps,測試左移、測試右移、精准測試、測試平台開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力
QQ交流群:484590337
公眾號 TestingStudio
點擊獲取更多信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM