欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android Gradle多渠道打包的實現(xiàn)方法

 更新時間:2020年11月13日 09:29:54   作者:黃林晴_阿黃哥  
這篇文章主要介紹了Android Gradle多渠道打包的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

什么是多渠道打包以及多渠道打包可以做什么,這里就不做介紹了,相信看到這篇文章的你已經(jīng)了解了,多渠道打包的方式比較多,這里我們用Gradle多渠道打包方式。

和其他文章有什么不同

網(wǎng)上看到的大多數(shù)文章都只講解了

1.如何修改包名

2.如何修改變量的值

3.如何替換string中的資源

4.如何替換AndroidManifest中的資源

本篇文章會在上述知識點上增加

5.不同渠道如何使用不同的java文件

6.Base模塊化中如何使用多渠道

新建項目,在app下build.gradle中android下添加如下代碼:

productFlavors{
 baidu{
  applicationId "com.baidu"
  buildConfigField "String","BaseApi",'"http://baidu.com"'
  resValue "string","tip",'"hello this is form baidu"'
  manifestPlaceholders = [
    app_name:"百度APP"
  ]
 }
 sougou{
  applicationId "com.sougou"
  buildConfigField "String","BaseApi",'"http://sougou.com"'
  resValue "string","tip",'"hello this is form sugou"'
  manifestPlaceholders = [
    app_name: "搜狗APP"

  ]

 }
}

這里我們定義兩個渠道,一個渠道名稱是baidu,一個渠道名稱是sougou,通過applicationId直接指定應(yīng)用包名

不同渠道我們使用的請求地址不同,字段是BaseApi,我們可以通過buildConfigField指定BaseApi中的值,通過buildConfigField

指定的值,我們可以在系統(tǒng)生成的BuildConfig中獲取,比如我們獲取多渠道中定義的BaseApi:

String baseApi = BuildConfig.BaseApi;

我們來看下BuildConfig中的內(nèi)容

BaseApi是我們自己定義的,其他的都是默認(rèn)生成的,這里我們可以看到,應(yīng)用包名也是我們指定的。

resValue我們可以修改變量的值,這個值會生成在string.xml中,比如上面我們定義了一個tip變量,需要注意的是,這個變量不能出現(xiàn)在string.xml中,否則會提示資源重復(fù)。

如果要定義在配置文件中使用的值,則需要使用

manifestPlaceholders

我們分別修改app_name的值,在配置文件中使用占位符${} 使用,如下:

android:label="${app_name}"

接下來,我們將tip的值和BaseApi顯示在TextView上,分別運(yùn)行app的baidu渠道版本和sougou渠道版本

baidu渠道運(yùn)行如下:

sougou渠道運(yùn)行如下:

從運(yùn)行結(jié)果我們可以看出來,已經(jīng)達(dá)到我們想要的結(jié)果了。

如何使用不同的app圖標(biāo)

那么如何修改不同渠道的app圖標(biāo)呢,當(dāng)然我們可以在manifestPlaceholders中添加圖標(biāo)資源的占位符,但是我們這里使用另一種方法,

有時候我們不僅要替換圖標(biāo),可能要替換raw下的資源或者assets下的資源,這種情況下我們就需要

使用下面的方式:

在src目錄下新建與main同級且與渠道名稱一樣的文件包名,并且新建res資源目錄,放入圖標(biāo)使用的圖片資源,必須要與main中的名稱相同才可以覆蓋,如圖所示:

并且在gradle中設(shè)置sourceSet

sourceSets{
 baidu{
  res.srcDirs = ['src/baidu/res','src/baidu/res']

 }
 sougou{
  res.srcDirs = ['src/sougou/res','src/sougou/res']

 }

}

我們通過res.srcDirs就指定了不同渠道使用的資源文件,這里從網(wǎng)上隨便找了兩張截圖作為圖標(biāo)(如有侵權(quán),聯(lián)系刪除)

運(yùn)行兩個app,結(jié)果顯示如下:

moudle中如何配置多渠道

在實際的開發(fā)中,我們可能會有一個base模塊,不同渠道base模塊中引用的資源也不同,我們該如何配置呢?

我們新建basemoudle模塊,app依賴basemodule模塊

同樣,我們在模塊的gradl下 配置如下:

productFlavors {
 baidu {

  buildConfigField "String", "BaseMoudeDesc", '"這是base模塊百度的描述"'
  resValue "string", "basetip", '"i come form base_baidu"'

 }
 sougou {
  buildConfigField "String", "BaseMoudeDesc", '"這是base模塊搜狗的描述"'
  resValue "string", "basetip", '"i come form base_baidu"'

 }
}

因為我們的base模塊也有兩個渠道,所以app在依賴的時候,必須分渠道去依賴

baiduCompile project(path:':basemodule',configuration:'baiduRelease')
sougouCompile project(path: ':basemodule',configuration:'sougouRelease')

我們直接編譯會出現(xiàn)上面的問題,因為module模塊可能沒有生成對應(yīng)的編譯資源,因為android的默認(rèn)編譯是debug類型的,所以為了和app主模塊同步,我們設(shè)置去掉默認(rèn)的發(fā)布類型,需要在module中的gradle中添加:

publishNonDefault true

變量的使用和上面app的使用方式一樣,在這里就不展示了。

不同渠道如何使用不同java文件

同不同渠道使用資源文件一樣,不過需要注意的是,main文件中就不能存放要替換的java文件了,否則會報資源重復(fù)的錯誤,同樣的我們在base模塊分別新建baidu和sougou渠道包,并且分別新建MainActivity,如圖所示。

設(shè)置java資源目錄

sourceSets {
  baidu {
    res.srcDirs = ['src/baidu/res', 'src/baidu/res']
    java.srcDirs = ['src/baidu/java','src/baidu/java']

  }
  sougou {
    res.srcDirs = ['src/sougou/res', 'src/sougou/res']
    java.srcDirs = ['src/sougou/java','src/sougou/java']

  }

}

為了展示兩個頁面的不同,我們將百度渠道的頁面背景設(shè)為粉紅色,搜狗渠道的頁面背景設(shè)置藍(lán)色,在app添加按鈕并添加監(jiān)聽事件,打開module中的主頁面。

運(yùn)行效果如下所示:

到這里,常用的多渠道打包需要的配置就結(jié)束了,如有錯誤歡迎指正。

總結(jié)

到此這篇關(guān)于Android Gradle多渠道打包的文章就介紹到這了,更多相關(guān)Android Gradle多渠道打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論