2019-07-14

如何要求 PhoneGap Build 在建置(build)專案時要求使用新一點的 android sdk 來建置

標題不太確定這樣用會不會怪,先主要說明一下狀況…

同事那有個案子的需求是要 app 在今年八月前更新內核 api 上 android 8(api 26) 和 ios 13(?…這我不確定,反正是要新一點的)。

但公司給的開發機,一支小米 4i 在不去刷 thirdparty rom 的情況下只能官方更新到 android 5 ,而一支 iphone 5 還 6 只能到 ios 10 ,所以我同事除了只能先發佈上架後請有支援比較新的系統的其他同事手機去試之外,他就想要在 mac mini 上來當作以後建置的環境。

mac mini 的操作和環境建置的問題先不論,主要是這個案子的 app 在之前的人在寫時是使用 phonegap 來開發,然後用 Adobe PhoneGap Build(以下簡稱 PGB) 來做線上建置(build)的。

但同事說他原本在 local 使用 cordova build android 的過程並沒有 fail ,然後將專案 zip 後上傳至 PBO 建置後的 app 在上架 google play 後,有測試的同事反應其中某個功能的相機是沒有反應的,同事讓我協助測試一下。


我在這之前沒有任何的 app 開發經驗,但本持著一個程式設計師的精神,只要 build 或 compile 的過程是有 log 的…一般不會太難找到錯誤。

所以,同事把 source code 給我後,我就在自己用的電腦中進行 debug 。

app 的程式中是有一些小問題,就先處理這一些小問題;後來發現在 local cordova build 後的 apk ,我拿來裝在自己的 HTC U11+ 上使用,在該功能上相機是正常,然後同事拿同樣的 apk 在他自己的三星手機上測也是 OK ,所以問題應該就在上傳 PBO 之後發生的。

還好, PBO build 是有 log 的,在檢視了 log 後有發現當 PBO 在載入 cordova-plugin-camera 時有出現
Installing "cordova-plugin-camera" at "4.0.3" for android Plugin doesn't support this project's cordova-android version. cordova-android: 6.1.2, failed version requirement: >=6.3.0 Skipping 'cordova-plugin-camera' for android
所以 "this project's cordova-android version" 原本以為是指這 app 中設定要求 android 版本是 6.1.2 太舊,因為此 plugin 已經要求要 6.3.0 以上了…但在查詢 app platform 版本(cordova platform ls)時發現其實該 platform 已經是 android 8.0.0 了,所以不太會是此問題。
(但在後續找資料的過程中才知道,其實 cordova/phonegap android version 並不是與 google 發佈的 android 7, 8, 8.1, 9 這個有關係,而是指 cordova/phonegap cli 的版本,而此版本會有相對應 google android 版本…一開時我根本就找錯方向)

後來我細看 PBO build log 有發現其實該 log 是 PBO 自己在做 cordova build 的過程,也就是說,PBO 其實不會使用所上傳 zip 檔中的 platform ,也就是說…其實 PBO 會自己替此專案再做一次 platform add android, ios ,然後 PBO 自己內部用的 android-cli version 是 6.1.2 …

為了要確認此問題,所以我去翻了 PBO 的 current-support 發現,原來在未指定的情況下,PBO 會預設使用 PhoneGap-cli-6.5.0 ,其對應的 android-phonegap version 是 6.1.2 ,也就是說…我得要指定 PhoneGap-cli 要 7.1.0 以上才會使用 android-phonegap version 6.3.0 。

所以就在 project root 下把
<preference name="phonegap-version" value="cli-8.1.1" />

加進 config.xml 中,再將專案包 zip 上傳 PBO build,然後就看 log 在 cordova-plugin-camera  就沒有被 skip 掉了,然後再試著用 PBO 包出來的 apk 來安裝在手機上測試相機功能就是正常的了。

不過如此就又發現另一個問題,就是修改上述指定的方式,然後再使用 PBO build 後的 app 在一啟動時會有一個 cordova/phonegap 的一個機器人的 loading page (或是叫 splashscreen)會一直存在且跳不過,然後是在 cordova-plugin-splashscreen 的 github 中有找到可以在 config.xml 中把加上
<preference name="AutoHideSplashScreen" value="true" />
雖然設定了這個,那個 loading page 會消失沒錯,但是存在 1 秒左右後自動消失,這樣也很奇怪;後來同事在該 plugin github 有找到
<preference name="SplashScreenDelay" value="0" />
來讓那個 loading page 隨即就消失(value 是毫秒),這樣就解決了 android camera 相關的問題。
但 iphone 的測試我就不確實正不正常了。

沒有留言: