本文節選自霍格沃茲測試學院內部教材
我們要學習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 可以分為下面這些類型
-
Native App:原生 app 手機應用程序,使用原生的語言開發的手機應用。比如系統自帶的計算器、鬧鍾就是原生 app。
-
Hybrid App:混合型 app 手機應用程序,混合使用原生的程序和 HTML5 頁面開發的手機應用。現在大部分的 app 都是這種混合型的,比如微信,支付寶等等。
-
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
點擊獲取更多信息