App 自動化測試(四)ReDroid 容器安裝 Google Play 套件、App下載安裝

閱讀時間約 14 分鐘

前言

前幾篇聊到作業系統、Docker 跟 Android 容器的準備,再來就是替 Android 容器開啟 Google Play 套件並安裝待測 App 供後續手動或者自動測試使用。

Google Play 套件處理

標準的 ReDroid 容器是沒有包含Google Play 套件的需要另外安裝,以下也是按照教學文操作,有點出入,不過大致符合。

下載並準備 Google Play 套件

OpenGapps下載 GApps,這邊選擇 x86_64架構的 Android 11 最小化的pico 版本,會得到一包 ZIP 壓縮檔,裡面包含許多小的子套件,如果沒有裝過 lzip,可以用以下指令裝一下
sudo apt install lunzip
直接下載的指令
$ wget https://master.dl.sourceforge.net/project/opengapps/x86_64/20220503/open_gapps-x86_64-11.0-pico-20220503.zip
$ unzip open_gapps-x86_64-11.0-pico-20220503.zip -d gapps
檢視解壓縮的檔案可以看到這樣的目錄結構
$ tree gapps/ -d
gapps/
├── Core
├── GApps
├── META-INF
│   └── com
│       └── google
│           └── android
└── Optional
再來是最繁瑣的一個步驟,要重建 System 結構。
首先將 Core / GApps 內的所有 tar.lz 解壓縮到另外一個目錄去,如果對於解壓LZ不熟,可以看這篇
$ cd gapp
$ mkdir unizipped
$ cd unizipped/
$ rm setupwizardtablet-x86_64 -fr
$ cat ../Core/*.lz | tar --lzip -xvf - -i
$ cat ../GApps/*.lz | tar --lzip -xvf - -i
再來建立要上傳設備的 System 目錄,然後把解開的檔案一一放回去,這邊不是直接放回去就好,要做一點處理,把 common 或者 nodpi 前的路徑去掉。特別要注意的就是 setupwizard 用 default 就好。
scott@osboxes:~/Downloads/gapps/unzipped$ find . -name common | xargs cp -t system -r
scott@osboxes:~/Downloads/gapps/unzipped$ cp system/common/common/* system/common/. -r
scott@osboxes:~/Downloads/gapps/unzipped$ rm system/common/common -fr
scott@osboxes:~/Downloads/gapps/unzipped$ find . -name nodpi | xargs cp -t system -r
scott@osboxes:~/Downloads/gapps/unzipped$ cp system/common/* system/. -r
scott@osboxes:~/Downloads/gapps/unzipped$ cp system/nodpi/* system/. -r
scott@osboxes:~/Downloads/gapps/unzipped$ rm system/nodpi -fr
scott@osboxes:~/Downloads/gapps/unzipped$ rm system/common -fr
先看期望結果
scott@osboxes:~/Downloads/gapps/unzipped$ tree system/
system/
├── app
│   ├── GoogleCalendarSyncAdapter
│   │   └── GoogleCalendarSyncAdapter.apk
│   ├── GoogleContactsSyncAdapter
│   │   └── GoogleContactsSyncAdapter.apk
│   ├── GoogleExtShared
│   │   └── GoogleExtShared.apk
│   └── GoogleTTS
│       └── GoogleTTS.apk
├── etc
│   ├── default-permissions
│   │   ├── default-permissions.xml
│   │   └── opengapps-permissions-q.xml
│   ├── permissions
│   │   ├── com.google.android.dialer.support.xml
│   │   ├── com.google.android.maps.xml
│   │   ├── com.google.android.media.effects.xml
│   │   ├── privapp-permissions-google.xml
│   │   └── split-permissions-google.xml
│   ├── preferred-apps
│   │   └── google.xml
│   └── sysconfig
│       ├── dialer_experience.xml
│       ├── google_build.xml
│       ├── google_exclusives_enable.xml
│       ├── google-hiddenapi-package-whitelist.xml
│       └── google.xml
├── framework
│   ├── com.google.android.dialer.support.jar
│   ├── com.google.android.maps.jar
│   └── com.google.android.media.effects.jar
├── priv-app
│   ├── AndroidAutoPrebuiltStub
│   │   └── AndroidAutoPrebuiltStub.apk
│   ├── AndroidMigratePrebuilt
│   │   └── AndroidMigratePrebuilt.apk
│   ├── CarrierSetup
│   │   └── CarrierSetup.apk
│   ├── ConfigUpdater
│   │   └── ConfigUpdater.apk
│   ├── GoogleBackupTransport
│   │   └── GoogleBackupTransport.apk
│   ├── GoogleExtServices
│   │   └── GoogleExtServices.apk
│   ├── GoogleFeedback
│   │   └── GoogleFeedback.apk
│   ├── GoogleOneTimeInitializer
│   │   └── GoogleOneTimeInitializer.apk
│   ├── GooglePackageInstaller
│   │   └── GooglePackageInstaller.apk
│   ├── GooglePartnerSetup
│   │   └── GooglePartnerSetup.apk
│   ├── GoogleRestore
│   │   └── GoogleRestore.apk
│   ├── GoogleServicesFramework
│   │   └── GoogleServicesFramework.apk
│   ├── Phonesky
│   │   └── Phonesky.apk
│   ├── PrebuiltGmsCore
│   │   └── PrebuiltGmsCore.apk
│   └── SetupWizard
│       └── SetupWizard.apk
└── product
│   └── overlay
│      └── PlayStoreOverlay.apk
└── system
30 directories, 36 files

安裝 Google Play 套件

取得 root 權限,重新連結後移除舊有套件
adb connect localhost:5555
adb -s localhost:5555 root
adb connect localhost:5555
adb -s localhost:5555 shell "rm -rf system/priv-app/PackageInstaller"
推送整理好的 system 到裝置中
adb -s localhost:5555 push system /
adb -s localhost:5555 shell "pm grant com.google.android.gms android.permission.ACCESS_COARSE_LOCATION"
adb -s localhost:5555 shell "pm grant com.google.android.gms android.permission.ACCESS_FINE_LOCATION"
adb -s localhost:5555 shell "pm grant com.google.android.setupwizard android.permission.READ_PHONE_STATE"
adb -s localhost:5555 shell "pm grant com.google.android.setupwizard android.permission.READ_CONTACTS"
adb reboot
重新啟動 ReDroid 容器
sudo docker ps -a 
sudo docker restart <容器ID>
$ adb connect localhost:5555
connected to localhost:5555
$ adb devices
List of devices attached
localhost:5555	device

註冊裝置

新版 Google Play 要認證裝置並取得證書才能使用,自製的虛擬裝置也可以,但要上 Google 網站認證:
方法就是透過 ADB 取得裝置 ID,手動申請,過幾分鐘就會開通
$ adb -s localhost:5555 root
$ adb connect localhost:5555
$ adb -s localhost:5555 shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \
    "select * from main where name = \"android_id\";"'
之後重新啟動容器並連接裝置
$ sudo docker restart redroid11
$ adb connect localhost:5555
$ scrcpy -s localhost:5555
就可以開心從虛擬裝置中透過 Google Play 去下載所需的 App

待測 App 處理

待測的 App 可以從兩個面向看,一是有沒有上架 PlayStore,二是有沒有原始開發團隊支持。
有沒有開發團隊支援的差別在於,後續測試 App 時需要知道關鍵的 Activities 跟 Components,有的話直接問比較快,沒有的話就要暴力拆解猜測。

下載 App

有上架 PlayStore 在 Google Play 框架裝好後,就能直接從市集取用。沒有的話要手動從非官方網站獲得,就會有暴露被植入惡意木馬的風險。
前者就略過,自行上市集下載即可,後者可以用的網站有:
  1. Evozi APK Downloader:貼上 Play Store 網站的連結就可以幫你下載
  2. APK Pure:知名的第三方下載源
  3. APK Mirror:知名的第三方下載源
再次提醒,使用非官方下載,要提防安全風險。

安裝 App

這邊使用 ADB 就能簡單完成
adb -s localhost:5555 install "jp.naver.line.android.apk"

執行並檢視 Log

這邊一樣透過 ADB 獲得裝置的即時 Log
adb logcat

小結

這一系列把作業系統、容器、安卓容器跟官方市集都講完了,接下來就會真正進入測試工具 Appium。
為什麼會看到廣告
9會員
13內容數
記錄分享如何做軟體自動測試
留言0
查看全部
發表第一個留言支持創作者!
Scott Hsiao的沙龍 的其他內容
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
每當我學習新東西,總是感到無比的興奮。相較於買車出遊,我更喜歡透過摸索新事物來擴展自己的眼界。 ▋透過閱讀擴展視野 我主要透過購買書籍來進行探索,這也多虧父母從小到大提供的經濟支持。從幼稚園到博士畢業,我大概購買了四五千冊的書籍。父親甚至在我的房間外搭了一個鐵皮屋,專門用來存放我各式各樣
Thumbnail
Relay.app 是簡單強大的自動化 No Code 工具,支援約百種數位工具,操作介面簡單易上手。內建串接 OpenAI,只要簡單輸入指令,即可獲得 AI 生成回覆!更棒的是,可以整合真人決策進入自動化工作流程,使人力介入不再中斷自動化,打造更全面完整工作流程,提升團隊協作,專案管理更有效率!
Thumbnail
你知道,義大利經濟學家帕雷托(Vilfredo Pareto)提出的帕雷托法則,又以80/20法則、或八二法則著名,用在人極其一生努力賺錢又邊花錢的過程中,世界上有80%的人感慨財富不足、都在羨慕那20%財富自由的人;自問即便財務目標沒有設立很高,為何依然錢存不到自己要的目標?! 在陪伴協助許
Thumbnail
工作時常會需要固定發廣告信,或業務開發信的話,可以考慮用google app script,呼叫gmail 的方式來處理。
Thumbnail
2023台灣用戶十大愛用LINE功能出爐!根據LINE團隊觀察自2022年12月至2023年11月,最受台灣用戶青睞的LINE功能就是解放主題富翁時間的「主題自動輪播」,第二名則是運用AI技術自動生成個人照片的「個人檔案工作室」,第三名為台灣暨全球首發的「父親節聊天室特效」。
Thumbnail
這是我跟chatgpt協作整理出來的一些知識: 蠻神奇的事情是我記得CHATGPT無法連網,他居然能知道我這個專案是做 投資建議訊號推送的telegrambot機器人,我完全沒有頭緒他怎麼知道的
Thumbnail
語言學習如果只限於課堂,很容易變得枯燥乏味。身處科技時代的我們,早就習慣用手機完成生活中的大小事,越南語的學習也可以搬到手機裡!跟大家分享9款學習越南語App,主要用遊戲化的方式學習,設置了各種遊戲關卡,還有機器人學伴陪伴你一起學越南語。另外,更需要多樣化的測驗來檢測自己的程度到哪裡。
Thumbnail
日文有所謂的高低音(類似英文的重音),很像中文發聲系統的第一聲和第三聲。高低音唸反了,在日文可是會把「神」(唸「咖米」)講錯成「頭髮」(唸「卡咪」)的,所以擁有標示重音的字典是很重要的事。自從看見網友說日本知名字典網站已取消單字的重音標示,我就趕快找了其他替代的重音兼發音字典,有一家app我特中意。
Thumbnail
今天和各位介紹一款完全免費的自學漢字app-Noodle Chinese,利用動畫的方式帶著學生寫字,來降低初學者對漢字的恐懼。另外Noodle Chinese本身就有字典的功能,在查字典的同時,也能直接創立自己的生字包,並且開始練習寫字!
Thumbnail
今天想和各位老師介紹一款來自介面設計相當精美的單字APP Drops最近新推出的寫字APP- Scripts。利用每天短短的五分鐘,透過不同的練習方式來寫字,能讓學生在無壓力的情況下學習新的生字!同時Scripts色彩豐富、操作簡單,也很適合一開始接觸漢字的學習者使用!
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
每當我學習新東西,總是感到無比的興奮。相較於買車出遊,我更喜歡透過摸索新事物來擴展自己的眼界。 ▋透過閱讀擴展視野 我主要透過購買書籍來進行探索,這也多虧父母從小到大提供的經濟支持。從幼稚園到博士畢業,我大概購買了四五千冊的書籍。父親甚至在我的房間外搭了一個鐵皮屋,專門用來存放我各式各樣
Thumbnail
Relay.app 是簡單強大的自動化 No Code 工具,支援約百種數位工具,操作介面簡單易上手。內建串接 OpenAI,只要簡單輸入指令,即可獲得 AI 生成回覆!更棒的是,可以整合真人決策進入自動化工作流程,使人力介入不再中斷自動化,打造更全面完整工作流程,提升團隊協作,專案管理更有效率!
Thumbnail
你知道,義大利經濟學家帕雷托(Vilfredo Pareto)提出的帕雷托法則,又以80/20法則、或八二法則著名,用在人極其一生努力賺錢又邊花錢的過程中,世界上有80%的人感慨財富不足、都在羨慕那20%財富自由的人;自問即便財務目標沒有設立很高,為何依然錢存不到自己要的目標?! 在陪伴協助許
Thumbnail
工作時常會需要固定發廣告信,或業務開發信的話,可以考慮用google app script,呼叫gmail 的方式來處理。
Thumbnail
2023台灣用戶十大愛用LINE功能出爐!根據LINE團隊觀察自2022年12月至2023年11月,最受台灣用戶青睞的LINE功能就是解放主題富翁時間的「主題自動輪播」,第二名則是運用AI技術自動生成個人照片的「個人檔案工作室」,第三名為台灣暨全球首發的「父親節聊天室特效」。
Thumbnail
這是我跟chatgpt協作整理出來的一些知識: 蠻神奇的事情是我記得CHATGPT無法連網,他居然能知道我這個專案是做 投資建議訊號推送的telegrambot機器人,我完全沒有頭緒他怎麼知道的
Thumbnail
語言學習如果只限於課堂,很容易變得枯燥乏味。身處科技時代的我們,早就習慣用手機完成生活中的大小事,越南語的學習也可以搬到手機裡!跟大家分享9款學習越南語App,主要用遊戲化的方式學習,設置了各種遊戲關卡,還有機器人學伴陪伴你一起學越南語。另外,更需要多樣化的測驗來檢測自己的程度到哪裡。
Thumbnail
日文有所謂的高低音(類似英文的重音),很像中文發聲系統的第一聲和第三聲。高低音唸反了,在日文可是會把「神」(唸「咖米」)講錯成「頭髮」(唸「卡咪」)的,所以擁有標示重音的字典是很重要的事。自從看見網友說日本知名字典網站已取消單字的重音標示,我就趕快找了其他替代的重音兼發音字典,有一家app我特中意。
Thumbnail
今天和各位介紹一款完全免費的自學漢字app-Noodle Chinese,利用動畫的方式帶著學生寫字,來降低初學者對漢字的恐懼。另外Noodle Chinese本身就有字典的功能,在查字典的同時,也能直接創立自己的生字包,並且開始練習寫字!
Thumbnail
今天想和各位老師介紹一款來自介面設計相當精美的單字APP Drops最近新推出的寫字APP- Scripts。利用每天短短的五分鐘,透過不同的練習方式來寫字,能讓學生在無壓力的情況下學習新的生字!同時Scripts色彩豐富、操作簡單,也很適合一開始接觸漢字的學習者使用!