項目中用到的gradle分sdk的實例

1、 場景

項目裏有一個功能,集成了第三方的sdk,項目很小,所以相關sdk及代碼沒有抽離成module。這個功能找了兩個供應商,兩個廠商的sdk不兼容,所以需要對不同供應商的設備分別打包。決定使用gradle對項目代碼和sdk進行分flavor打包。

2、 首先對lib分flavor

修改gradle.build中的flavor配置。項目本身有一個環境維度的flovar "env",對應測試環境flavor "xxTest"和“xx”,現在需要添加多一個維度"sdk",對應兩家供應商"one","two"。由於考慮到代碼裏面會有根據廠商不同做一些選擇處理的邏輯,所以在裏面又增加了"SDK"常量定義。

apply plugin: 'com.android.application'android {    flavorDimensions "env","sdk"    productFlavors {        subwayTest {            buildConfigField "String","SERVER_IP","\"a.com\""            buildConfigField "String","COMMON_SERVER_PORT","\"8080""            dimension "env"        }        subway {            buildConfigField "String","SERVER_IP","\"b.com\""            buildConfigField "String","COMMON_SERVER_PORT","\"8080""            dimension "env"        }        one {            buildConfigField "String", "SDK","\"one\""            dimension "sdk"        }        two {            buildConfigField "String", "SDK","\"two\""            dimension "sdk"        }    }...}
修改依賴中lib的寫法。第三方sdk有許多 so文件,也有jar,我這裏簡單粗暴的把lib整個複製成兩份,把其中對應的不同的jar包換掉,這樣配gradle就不用一個文件一個文件寫了。我也試過把libs裏面放so,只把jar分開,但是跑不起來,所以就把so文件都copy了。以後可以再研究一下。
repositories {    flatDir {        dirs 'libs'    }}sourceSets.main.jniLibs.srcDirs = ['libs']
dependencies {    oneImplementation fileTree(include: ['*.jar'], dir: 'onelibs')    twoImplementation fileTree(include: ['*.jar'], dir: 'twolibs')//  implementation fileTree(include: ['*.jar'], dir: 'libs')...}

修改文件目錄

前:

後:

3、 對代碼部分分包

添加flavor文件夾與main平級,如下。

把有區別的代碼按原來的包結構拷到對應兩個flavor下面,main下面就不要再留同樣的文件。AndroidManifest.xml也拷進去,可以分別進行配置。如果資源文件也有區別,可以在/java平級建。

爲了防止入口activity創建多個實例,需要修改各個flavor裏面的AndroidManifest.xml,把入口activity標籤裏多加一個屬性

tools:node="replace"

原文鏈接:https://my.oschina.net/u/268088/blog/4317407

關注我獲取更多知識或者投稿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章