2021-03-26|閱讀時間 ‧ 約 6 分鐘

記 android app 開啟錯誤

    這次錯誤在Android 11 發生
    去年12月底 , 有客戶反應 , 在 android 11 的手機 , 公司 app 開不起來
    或開起來跑很久 , 空白頁..........登入畫面空白
    之類奇怪的問題
    一開始用 Android studio 的模擬器試 , 沒問題
    看來需要實機了
    於是就開始與手機農場的奮戰之路

    Visual Studio App Center
    後來在這手機農場嘗試 , 幸運的 , 它剛好有 Pixel 5 的手機 (Pixel 5 也是出問題的機型)
    一開始是用 Appium , 因為 support ionic cordova (公司 app 用的框架)
    但是照著 doc 做 , mvn 一直無法 build 起來
    後來問了同事 , 同事建議放棄 , 他說 mvn 很多雷(難怪以前 IRI 我也 build 不起來.......)
    直接用 Android studio 內建的 UI Test framework : Espresso

    困難
    這邊真的要感謝同事 , 有專門在寫原生 Android APP 就是不一樣
    公司 app 是用 ionic cordova , 前端語言是 Angular
    一一來說明遇到的困難點
    1. 首先 , ionic 是用 webview 執行 Angular build 出來的 code , 在 App Center 內 , 它的執行 log 不包含 js , html , 相關訊息只有 java 相關訊息會被記錄 , js 和 html 需要另外處理
    2. Angular build 出來的 code 會被重新打包和混淆 , 就算可以拿到 error 的 function call stack , 也對修正問題沒有意義
    3. ionic cordova 產生 android 的專案 , 不像從 Android studio 新建專案一樣  目錄結構有出入 , 測試相關需要自己處理
    4. Espresso 要用 kotlin 或 java 寫測試腳本 , 兩個都沒學過

    魔改
    有鑑於以上種種困難 , 正規手法也不行啦 , 要走點邪道
    Espresso 要測要用 android studio , 可是 ionic build 出來不是正規的
    那就補東西讓它是正常的
    具體來說 , 就是改 platform/android/app/ 底下的 build.gradle
    把測試相關的依賴補進去 , 詳細參考 Espresso 文件
    然後在 /app/src 內補上 androidTest/xx/aa..../test.?
    test.? 隨便命名 , ? 是 kt 或 java
    xx 是 kotlin 或 java 二選一 , 要跟 test.? 的副檔名一樣
    aa.... 請比照 /app/src/main/xx/ 下的目錄 , 取一樣的目錄名
    在最後的目錄內的檔案 , 就是 test.?
    這樣 platform 下的 android 用 android studio 開啟 , 就是正規的專案結構
    接著在 test.? 右鍵執行測試 , 測試完 platform/android/app/build/output 內
    會有 App Center 需要的兩個 apk 檔

    log server
    對於 App Center 無法紀錄 webview 內 js , html 執行情況
    這邊用額外的 log server 來處理
    簡單來說 , 就是遇到 error 就用 fetch 丟到 log server 紀錄
    由於有公司 aws 的帳號 , log server 直接用 api gateway +lambda 處理掉
    接著 , Angular 的 component , 可以註冊整個組件共用的 error handler
    所以就在那 handler 把 error 傳給 log server
    另外 , 有些錯誤是透過 console 輸出的 , 這些也要記錄到 log server
    參考此篇文章 :
    https://stackoverflow.com/questions/19846078/how-to-read-from-chromes-console-in-javascript
    魔改了 console , 放到 ionic 專案下 , src/index.html 的 head 內
    至於 Espresso 的測試腳本 , 拿官方 example 抄 XD
    需要注意是要用 onWebView() 來進行測試
    由於 app 是用 ionic 的 UI framwork (標籤是 ion-x) , 不太好測試
    建議用 ionic server 觀察 html tag , 來看如何找到特定的標籤來操作

    Pixel 5 開啟轉很久的原因..........
    經過上面開發後 , 在 log server 內發現
    開 DB 失敗 , 查了一下 , 是廢棄不用的 sqlLite plugin 造成的
    移除掉就沒事了.........
    至於其它 Android 11 手機的問題 , 以後再來處理XD

    結尾
    這次問題累死我了 , 前後糾纏快三個月
    上面這些足足花了快三星期 , 直到今天才有進展
    所以寫一篇文記錄血淚XD

    分享至
    成為作者繼續創作的動力吧!
    談 coding,談工作,談職場的心情~~
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    發表回應

    成為會員 後即可發表留言