前言:
如果你們公司需要不同的開發環境來做App測試,可以試試看這個。
flavors and buildType
這個的效果是什麼呢?
可以讓你把測試環境給分開。
有什麼特別的嗎?
當然有特別,這三個App其實是同一個。
那為什麼要設成三個呢?
可以拿來當切換環境用,一個開發團隊內通常會有測試區lab和正式區。
如果在做檢查的時候,正式區和測試區切來切去非常的不方便。
你的程式大概會長這樣
每次切換都要重新選擇註解,再build一次。
中間等待的時間就白白浪費了,所以可以使用flavors來同時build起不同的開發環境。
這邊指讓你最簡易程度上的完成實作。
當然還有其他的玩法,詳情請見其他地方 or flavors and buildType
重點程式碼:
再gradle內
defaultConfig { ... resValue "string", "app_label", "default_name" buildConfigField "String", "initAPI", "defult_value" } productFlavors { dev { applicationId "com.example.branchOne" versionName "MyApp_dev" resValue "string","app_name","DEV_APP" buildConfigField "String", "initAPI", "\"https://www.google.com.tw/\"" } RC { applicationId "com.example.branchTwo" versionName "MyApp_RC" resValue "string", "app_name", "RC_APP" buildConfigField "String", "initAPI", "\"開發環境一\"" } PUB { applicationId "com.example.branchThree" versionName "My App" resValue "string","app_name","PUB_APP" buildConfigField "String", "initAPI", "\"正式版\"" } }
上面的initAPI參數都應該是你們自己的api網址,在引號內的\"不能少
介紹一下裡面在幹嘛的
applicationId 每個app要獨立出來都必須有自己的androidId,如果androidId一樣系統會判定你為同一個APP
resValue 這是指會在下圖的地方看到dev pub rc 你設定的文字都會跑到這裡
buildConfig 看下圖,她會出現在和resValue很近的地方
再buildConfig內,程式碼會自動生成
public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "com.example.branchTwo"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = "RC"; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "MyApp_RC"; // Fields from product flavor: RC public static final String initAPI = "開發環境一"; }
你會發現它自動生成了 initAPI,此時開發環境一就會是一串網址。
如何使用initAPI呢?
在要call這串網址的地方BuildConfig.initAPI就行了。
因為我們有在gradle > defaultConfig內設定初始值
如果你在productFlavors內沒有設定buildConfigField "String", "initAPI", "正式版"
會自動幫妳生成defult_value這個string
使用方式:
把畫面帶到android studio的左下角 有一個build Variants 在這裡切換你想要build的版本就行了。
當然他有分bug和release版本
release版本有牽扯到 發布問題的key
單純demo就不說了。
然後如果你在程式內有寫DB,會需要做額外設定。
詳情請見
https://stackoverflow.com/questions/14368867/permission-denial-opening-provider
如果我有用到的話再做討論XD
有問題歡迎提出。
沒有留言:
張貼留言