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 網站認證:

Register (google.com)

方法就是透過 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。


留言
avatar-img
留言分享你的想法!
jack liu-avatar-img
2024/06/21
大大你好!我卡在成功完成设备注册,scrcpy -s localhost:5555时候无法拉起界面,请问是什么原因?谢谢
派大星-avatar-img
2024/03/21
你好,我在安裝後發現有點卡,我猜可能是沒有使用硬體加速的緣故,請問該如何啟用顯卡硬體加速?謝謝。我的顯卡是AMD R9 270X
avatar-img
Scott Hsiao的沙龍
10會員
16內容數
記錄分享如何做軟體自動測試
Scott Hsiao的沙龍的其他內容
2023/05/24
前言 上篇把定位講完,不過實務上很少真的用手刻,大多用錄製或者軟體輔助,先講XPATH主要是讓大家有個底,就像最近的AI風一樣,好玩是一回事,做出來的東西還是要人看得懂知道哪裡可能有問題。 這篇就會著重介紹如何錄製腳本並轉換成可以執行的程式。
Thumbnail
2023/05/24
前言 上篇把定位講完,不過實務上很少真的用手刻,大多用錄製或者軟體輔助,先講XPATH主要是讓大家有個底,就像最近的AI風一樣,好玩是一回事,做出來的東西還是要人看得懂知道哪裡可能有問題。 這篇就會著重介紹如何錄製腳本並轉換成可以執行的程式。
Thumbnail
2023/05/12
前言 前八篇把各個環節分段介紹,接下來就是學以致用的時候,本篇會用自己的 App 做一系列的測試。
2023/05/12
前言 前八篇把各個環節分段介紹,接下來就是學以致用的時候,本篇會用自己的 App 做一系列的測試。
2023/05/12
前言 基本準備差不多了,也能跑自己的測試,再來就是關於測試腳本的核心:元素定位跟動作,本篇會著重介紹 XPATH 定位的部分
2023/05/12
前言 基本準備差不多了,也能跑自己的測試,再來就是關於測試腳本的核心:元素定位跟動作,本篇會著重介紹 XPATH 定位的部分
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
本文教你如何在配備 M1 晶片的 MacBook Air 上安裝Flutter,以同時開發Android和iOS apps。
Thumbnail
本文教你如何在配備 M1 晶片的 MacBook Air 上安裝Flutter,以同時開發Android和iOS apps。
Thumbnail
今天要來介紹如何在Fedora 作業系統上安裝Android Studio,小魚實際安裝Android Studio後發現步驟其實蠻簡單的。 然後整個安裝過程記錄在這篇文章,如果有不會安裝Android Studio的初學者可以參考這篇文章。 android studio 安裝 首先到an
Thumbnail
今天要來介紹如何在Fedora 作業系統上安裝Android Studio,小魚實際安裝Android Studio後發現步驟其實蠻簡單的。 然後整個安裝過程記錄在這篇文章,如果有不會安裝Android Studio的初學者可以參考這篇文章。 android studio 安裝 首先到an
Thumbnail
這篇文章教你如何在本機使用 Gitea 架設 Git Server。內容涵蓋了安裝 Docker、設定和安裝 Gitea 的 dokcer-compose.yml、Gitea 的安裝流程,以及如何刪除安裝的 Gitea。文章也包含了一個 Docker 的彩蛋,教你如何清理安裝或未清理的緩存。
Thumbnail
這篇文章教你如何在本機使用 Gitea 架設 Git Server。內容涵蓋了安裝 Docker、設定和安裝 Gitea 的 dokcer-compose.yml、Gitea 的安裝流程,以及如何刪除安裝的 Gitea。文章也包含了一個 Docker 的彩蛋,教你如何清理安裝或未清理的緩存。
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
Thumbnail
簡介 因常會在新機器跑container,藉此紀錄安裝過程,順便寫下腳本安裝懶人包 安裝docker 檢查系統中是否已經安裝了docker 執行:ps -ef |grep docker 如上圖所示,說明系統中並沒有安裝docker 添加docker-ce倉庫 安裝yum倉庫管理工具 配置docker
Thumbnail
簡介 因常會在新機器跑container,藉此紀錄安裝過程,順便寫下腳本安裝懶人包 安裝docker 檢查系統中是否已經安裝了docker 執行:ps -ef |grep docker 如上圖所示,說明系統中並沒有安裝docker 添加docker-ce倉庫 安裝yum倉庫管理工具 配置docker
Thumbnail
工作日常中 Gmail 信箱總伴隨著海量信件與附件往返,有時候附件收到後都要再逐一上傳到公司內部雲端資料夾,或手動儲存到個人的雲端硬碟,方便未來查找與協作。現在只要 Gmail 信箱的信件包含附檔,NoCode 幫你自動同步儲存至 Google 雲端硬碟資料夾建檔,再也不用手動儲存或擔心遺忘建檔啦!
Thumbnail
工作日常中 Gmail 信箱總伴隨著海量信件與附件往返,有時候附件收到後都要再逐一上傳到公司內部雲端資料夾,或手動儲存到個人的雲端硬碟,方便未來查找與協作。現在只要 Gmail 信箱的信件包含附檔,NoCode 幫你自動同步儲存至 Google 雲端硬碟資料夾建檔,再也不用手動儲存或擔心遺忘建檔啦!
Thumbnail
Fedora Workstation 使用快一年至近至近體驗還不錯,最近在想Fedora有沒有可能跟arch那樣從最基礎Linux系統一點一滴安裝自己所需的軟體就好,沒想到Fedora也有提供這種安裝方法。那如何最小化安裝Feodra系統請繼續看下去。
Thumbnail
Fedora Workstation 使用快一年至近至近體驗還不錯,最近在想Fedora有沒有可能跟arch那樣從最基礎Linux系統一點一滴安裝自己所需的軟體就好,沒想到Fedora也有提供這種安裝方法。那如何最小化安裝Feodra系統請繼續看下去。
Thumbnail
說明Flutter 骨架(skeleton)專案範例的架構與在各平台執行的顯示畫面
Thumbnail
說明Flutter 骨架(skeleton)專案範例的架構與在各平台執行的顯示畫面
Thumbnail
說明如何在Windows系統中安裝 Flutter 與 Visual Studio Code 的開發環境
Thumbnail
說明如何在Windows系統中安裝 Flutter 與 Visual Studio Code 的開發環境
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News