show code block

2017年10月17日 星期二

Android方法(BuildType、Flavors、variants) — 簡易使用Flavors不同開發環境

前言:


如果你們公司需要不同的開發環境來做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的版本就行了。
當然他有分bugrelease版本
release版本有牽扯到 發布問題的key
單純demo就不說了。

然後如果你在程式內有寫DB,會需要做額外設定。

詳情請見
https://stackoverflow.com/questions/14368867/permission-denial-opening-provider

如果我有用到的話再做討論XD

有問題歡迎提出。

沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...