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。
為什麼會看到廣告
avatar-img
10會員
16內容數
記錄分享如何做軟體自動測試
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Scott Hsiao的沙龍 的其他內容
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
安裝 sudo apt update sudo apt upgrade ​sudo apt install g++-12 gcc-12 sudo apt install g++-11 gcc-11 驗證安裝​ gcc-12 --version 成功訊息​ gcc-12 (Ubuntu 12.3.
Thumbnail
在Spring Cloud微服務中,透過Maven與Docker,將專案打包成Docker Image,並部署。 安裝Maven apt install maven​ 安裝Docker apt install docker.io 啟動Docker service docker s
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
Thumbnail
MacOS 請先安裝「Homebrew」。開啟「終端機」,輸入底下指令: brew cask install​ docker 載入Docker App後,點擊Next,輸入MacOS登入密碼。安裝完成後,輸入底下指令查看版本資訊: ​docker -v Linux 開啟「終端機
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
安裝 sudo apt update sudo apt upgrade ​sudo apt install g++-12 gcc-12 sudo apt install g++-11 gcc-11 驗證安裝​ gcc-12 --version 成功訊息​ gcc-12 (Ubuntu 12.3.
Thumbnail
在Spring Cloud微服務中,透過Maven與Docker,將專案打包成Docker Image,並部署。 安裝Maven apt install maven​ 安裝Docker apt install docker.io 啟動Docker service docker s
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
Thumbnail
MacOS 請先安裝「Homebrew」。開啟「終端機」,輸入底下指令: brew cask install​ docker 載入Docker App後,點擊Next,輸入MacOS登入密碼。安裝完成後,輸入底下指令查看版本資訊: ​docker -v Linux 開啟「終端機
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin