天天看點

筆記:android studio 多管道多應用名多資源打包

公司的軟體不同的應用市場的應用名都大不一樣,有時候這個應用市場需要加廣告,那個需要加首發,一個個打包的話會浪費很多時間,還很大幾率會出錯

下面就是通過配置gradle,實作一鍵打包,達到各個包不同的效果。

第一步:在 gradle -> android -> productFlavors 裡添加代碼,也就是你的不同管道名

productFlavors {
        aa_main {}
        huawei {}
        yyb {}
        q_360 {}
        oppo {}
        sogou {}
        vivo {}
        meizu {}
        anzhi {}
        baidu {}
        lenovo {}
        xiaomi {}
        pp {}
    }
           

第二步 管道添加了之後,就開始配置各個管道的一些不同的資源或者字段

在 gradle -> android -> sourceSets 中添加如下代碼

sourceSets {
        //夜間模式資源設定
        main { res.srcDirs = ['src/main/res', 'src/main/res-night'] }

        //管道資源路徑配置
        huawei.res.srcDirs = ['src/main/res-huawei']
        yyb.res.srcDirs = ['src/main/res-yyb']
        q_360.res.srcDirs = ['src/main/res-360']
        oppo.res.srcDirs = ['src/main/res-oppo']
        sogou.res.srcDirs = ['src/main/res-sogou']
        vivo.res.srcDirs = ['src/main/res-vivo']
        meizu.res.srcDirs = ['src/main/res-meizu']
        anzhi.res.srcDirs = ['src/main/res-anzhi']
        baidu.res.srcDirs = ['src/main/res-baidu']
        lenovo.res.srcDirs = ['src/main/res-lenovo']
        xiaomi.res.srcDirs = ['src/main/res-xiaomi']
        pp.res.srcDirs = ['src/main/res-pp']
    }
           

res.srcDirs 是設定該管道下的資源檔案路徑,還可以設定java,jniLibs 等各種檔案資源路徑

我這裡的360管道下隻是圖檔和字段有些不同

筆記:android studio 多管道多應用名多資源打包

注意點:你需要先把基礎的資源檔案都設定好,比如本來你的應用名稱存儲在app->src->main->res->value->strings 檔案下的app_name,但360包的應用名不一樣,這樣你在上圖的res-360 的 strings 檔案中在添加一個app_name 就好了

第三步就是打包了

為了讓打出來的apk通過檔案名字就可以對apk資訊一目了然,做了以下處理

在productFlavors 再添加如下代碼

android.applicationVariants.all {
            variant ->
                variant.outputs.all {
                    output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            if (variant.buildType.name == 'release') {
                                def fileName = "zdread_v${defaultConfig.versionCode}_${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                                outputFileName = fileName
                            } else {
                                def fileName = "${releaseTime()}_${variant.productFlavors[0].name}_debug.apk"
                                outputFileName = fileName
                            }
                        }
                }
        }
           

最後打出來的apk檔案名的格式就固定成了

zdread_v應用版本号_應用版本名_打包時間_管道名.apk

簡單的三步,就完成了對多管道打包的配置

其實如果隻是簡單的應用名不一樣,還可以直接在第一步中完成,不需要後面兩步

q_360{ buildConfigField “String”, “app_name”, “應用名”}

然後在AndroidManifest.xml 檔案中修改

android:label="${app_name}"

繼續閱讀