從配置Product Flavor拆解Gradle

什麼情況下我們使用Product Flavor

1、 需要用相似的代碼創建不同的產品,或者爲不同產品分配專有屬性,或者設置不同的產品引入不同的包
2、 設置不同代碼或引用
這種情況下不管對不對app內容做修改,我們都需要使用Product Flavor,確保你一臺手機能上能安裝多個渠道的app,即使看起來他們長得一樣,比較通用的一個案例是手遊。
使用這個東西看着很簡單,覺得分分鐘上手,然而其實有各種坑,本文就是踩坑手冊

1、如何劃分渠道?

android{
//增加如下配置
	flavorDimensions("app", "ar") //注意這裏聲明的下面一定要有,沒有編譯就會報錯
    productFlavors {
        app_fir {
            dimension "app"
        }
        app_google {
            dimension "app"
        }
        app_ar {//如果刪除該渠道,flavorDimensions中的ar也要刪掉
            dimension "ar"
        }
    }
}

2、僅劃分渠道

這種情況下代碼層級還是跟原有的編碼結構沒有變化,只需要寫一個單例類用於判斷當前渠道,剩下的操作就根據值自己寫吧。
關鍵代碼如下

 String TAG = BuildConfig.FLAVOR; //這個裏面得出的結果和你在Product Flavor中定義的“app_fir ”是一致的

3、根據不同渠道顯示不一樣的內容

這個就稍微複雜點了,實際上我找了不少博客研究了挺久的,最後搞通了,先上圖
在這裏插入圖片描述
上面這個五顏六色框子的圖片就是我的項目結構圖,其實東西很少,主要是爲了測試。
項目一定要在“project”下才能看見全貌,增加的分支和main要有同級目錄,也就是說java和res如果用得到一個都不能少,用不到就不用寫了。
你這樣寫完之後,其實編譯是編譯不過去的,爲啥?因爲此處有坑阿!他會給你提示一個**“錯誤:類重複 ”**的錯誤,那啥原因呢?因爲你沒有指定渠道,它默認把所有代碼合在一起了就發現同名文件夾下有多個同名類。
那咋解決呢?通過Build Variant配置Build Types,其實還有第二種辦法註釋掉其他的選擇,但這樣不方便測試。
在這裏插入圖片描述
這是找了幾個博客才找到的,但問題看完我是懵逼的,平時寫代碼側邊這一溜都是關上的,完全沒注意還能選擇渠道
選完了就正常了。

Product Flavor裏面的屬性都是做什麼用的?

lavorDimensions "app"//維度
productFlavors {
        app_fir {
            applicationId "com.test.package" //包名
            dimension "app" //所屬維度
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei", app_name: "AppForHUAWEI"]
        }       
    }

1、applicationId 配置包名
2、dimension 配置所屬維度
3、manifestPlaceholders 此項目涉及到AndroidManifest的配置

 <meta-data
       android:name="UMENG_CHANNEL"
       android:value="${UMENG_CHANNEL_VALUE}" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章