開發一套已有大量使用者的 APP 時通常都要小心一點

為了程式的穩定性與品質

我們都會建立各種環境來把關

像是 dev 開發環境,sit 整合測試環境,uat 情境測試環境,prod 正式環境… 之類的

雖然每個公司的環境不一樣,但卻是大同小異的

 

問題來了,如果各環境所需要的參數值不一樣

或是連接的 backend 不同的話

我們要怎麼去設定呢?

舉個例子,以下是改良前的方法

在 gradle.properties 中定義不同環境的 url 值

然後在 build.gradle 時候引用

這裡的作法是直接寫了好幾套不同的值,再依照程式運行的環境來手動變更

這樣做不僅麻煩,而且也無法保證會不會有人正式上版的時候忘記改

關於正式上版的包版程序,我認為人工介入的動作越少越安全

所以這是個較不推薦的方法

=========================================

 

其實 Android 本身就有提供環境區分的功能

我們就由上述這個例子來加以改善吧

首先我們要介紹 buildType

通常都有 debug,release 兩種

舉個實際用法,當我們打印 log 時

為了方便開發,有些 log 可能只想在開發版印出來就好,正式版不印

此時就可以利用 BuildConfig.DEBUG 這樣做

buildType 的功能當然不只這樣

我們在 build.gradle 中也可以依不同 buildType 來做設定,如下圖

 

再來就是 productFlavors,它的概念和 buildType 有點類似

但其目的是讓打包可以更符合自己的需求

比如這裡我們設了三個 productFlavors

我們在各 flavor 做想要的差異化設定

然後 build 的時候可以在 Build Variants 選擇版本

設定後如下圖,會有每個 flavor 的 buildType 可以選

然後在打包 apk 的時候也可以做選擇,甚至全選也行

最後的 apk 就會在 app/flavor name/buildType name/app-flavor-buildType.apk 如圖

 

以為這樣就結束了嗎?

還沒呢,我們若有一些圖片檔、設定檔,甚至是 java code 要依環境不同的話怎麼辦?

這就要提到資料夾結構了

在專案的 app/src/main 這個同層目錄上

我們可以建造不同 flavors 的資料夾,來存放不同的檔案

Android Studio 在 build 的時候會先去相對應名稱的資料夾找資源

沒有才會回 main 裡面找需要的資源

我們以 google-server 設定的 json 為例子,如下圖

 

最後要提一下 flavorDimensions 這個值

是從 Android Studio 3.0 之後開始,若使用 flavor 被要求必需實做的值

那這個值是什麼意思呢?

其實就是更多元的差異化打包,Dimensions 直翻為維度

我們可以從 build type 和 flavors 建構的平面二維種類加到立體的三維種類

可以想像是手機廠商有各類機型

然後每種機型又有各自的 build type 和 flavors 要打包的感覺。

 

以上就是 Android Studio 自配適各環境的用法

 

參考資料:https://developer.android.com/studio/build/build-variants
 

 

 

 

 

 

 

 

 

 

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(0) 人氣()