您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Android開發中如何實現多渠道打包Gradle,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
一、前言
什么是多渠道打包以及多渠道打包可以做什么,這里就不做介紹了,相信看到這篇文章的你已經了解了,多渠道打包的方式比較多,這里我們用Gradle多渠道打包方式。
和其他文章有什么不同
網上看到的大多數文章都只講解了
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直接指定應用包名
不同渠道我們使用的請求地址不同,字段是BaseApi,我們可以通過buildConfigField指定BaseApi中的值,通過buildConfigField
指定的值,我們可以在系統生成的BuildConfig中獲取,比如我們獲取多渠道中定義的BaseApi:
String baseApi = BuildConfig.BaseApi;
我們來看下BuildConfig中的內容
BaseApi是我們自己定義的,其他的都是默認生成的,這里我們可以看到,應用包名也是我們指定的。
resValue我們可以修改變量的值,這個值會生成在string.xml中,比如上面我們定義了一個tip變量,需要注意的是,這個變量不能出現在string.xml中,否則會提示資源重復。
如果要定義在配置文件中使用的值,則需要使用
manifestPlaceholders
我們分別修改app_name的值,在配置文件中使用占位符${} 使用,如下:
android:label="${app_name}"
接下來,我們將tip的值和BaseApi顯示在TextView上,分別運行app的baidu渠道版本和sougou渠道版本
baidu渠道運行如下:
sougou渠道運行如下:
從運行結果我們可以看出來,已經達到我們想要的結果了。
如何使用不同的app圖標
那么如何修改不同渠道的app圖標呢,當然我們可以在manifestPlaceholders中添加圖標資源的占位符,但是我們這里使用另一種方法,
有時候我們不僅要替換圖標,可能要替換raw下的資源或者assets下的資源,這種情況下我們就需要
使用下面的方式:
在src目錄下新建與main同級且與渠道名稱一樣的文件包名,并且新建res資源目錄,放入圖標使用的圖片資源,必須要與main中的名稱相同才可以覆蓋,如圖所示:
并且在gradle中設置sourceSet
sourceSets{ baidu{ res.srcDirs = ['src/baidu/res','src/baidu/res'] } sougou{ res.srcDirs = ['src/sougou/res','src/sougou/res'] } }
我們通過res.srcDirs就指定了不同渠道使用的資源文件,這里從網上隨便找了兩張截圖作為圖標(如有侵權,聯系刪除)
運行兩個app,結果顯示如下:
moudle中如何配置多渠道
在實際的開發中,我們可能會有一個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')
我們直接編譯會出現上面的問題,因為module模塊可能沒有生成對應的編譯資源,因為android的默認編譯是debug類型的,所以為了和app主模塊同步,我們設置去掉默認的發布類型,需要在module中的gradle中添加:
publishNonDefault true
變量的使用和上面app的使用方式一樣,在這里就不展示了。
不同渠道如何使用不同java文件
同不同渠道使用資源文件一樣,不過需要注意的是,main文件中就不能存放要替換的java文件了,否則會報資源重復的錯誤,同樣的我們在base模塊分別新建baidu和sougou渠道包,并且分別新建MainActivity,如圖所示。
設置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'] } }
為了展示兩個頁面的不同,我們將百度渠道的頁面背景設為粉紅色,搜狗渠道的頁面背景設置藍色,在app添加按鈕并添加監聽事件,打開module中的主頁面。
運行效果如下所示:
到這里,常用的多渠道打包需要的配置就結束了,如有錯誤歡迎指正。
關于Android開發中如何實現多渠道打包Gradle就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。