Gradle prodcutFlavors 多渠道

路歌發表於2017-03-07

今天有個任務,處理一下專案的多渠道,這一塊之前也沒做過

其中有個知識點查了好久也沒找到,可能是關鍵詞沒找對吧 =.=

雖然其中大部分東西都能從網上搜到,但還是把它寫出來好了,當筆記了

主工程依賴了一個模組,叫它 lib 好了

然後 lib 是個工具庫,裡面接了很多第三方的庫,各種支付什麼的,然後為了以後方便,為這個庫加個多渠道這樣

先修改 lib 庫的 build.gradle,新增

android {
    publishNonDefault true
    productFlavors {
        channel1 {
        }
        channel2 {
        }
    }
}複製程式碼

然後再修改主工程的 build.gradle,網上搜到的基本都是這麼做的

android {
    productFlavors {
        channel1 {
        }
        channel2 {
        }
    }
}
configurations {
    channel1ReleaseCompile
    channel1DebugCompile
    channel2ReleaseCompile
    channel2DebugCompile
}

dependencies {
    channel1ReleaseCompile project(path: ":lib", configuration: 'channel1Release')
    channel1DebugCompile project(path: ":lib", configuration: 'channel1Debug')
    channel2ReleaseCompile project(path: ":lib", configuration: 'channel2Release')
    channel2DebugCompile project(path: ":lib", configuration: 'channel2Debug')
}複製程式碼

這樣沒問題,但是試了下,應該可以有另外一種方法,個人感覺方便點

主工程 build.gradle 不改,只在 lib 的 build.gradle 里加一句

android {
    defaultPublishConfig 'channel1Debug'
}複製程式碼

不過這樣如果就沒有對主工程進行一些配置了就是

之後對某個渠道增加一些特殊依賴並移除一些依賴

加依賴很簡單

channel1Compile '...' // 就給 channel1 單獨加了個依賴了複製程式碼

但現在如果大多數渠道都需要一個庫,而少數渠道不需要,雖然也可以通過一個個單獨新增的方式,但是這樣就顯得太麻煩了

就這個沒能在網上找到,之後是對著文件一個類似的知識點琢磨出來的

configurations {
    channel2Compile.exclude group: 'com.example.lib'
}複製程式碼

這樣就可以了


歡迎大家來我的部落格看看

相關文章