Android Gradle 多渠道、多项目名 打包配置

本文介绍了一种通过配置Gradle文件实现多渠道打包的方法,能够根据不同客户的需求动态修改App名称、服务器地址等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近公司开了新项目,对接不同的客户,并且后端服务是直接部署在客服的服务器上,这就要求我们的项目名,服务端地址必须跟客户对应。当然如果你一个一个的改,一个一个的打包,没问题,但是这样太麻烦了,费时费力,几十个客户,就要求你改几十次,重复打几十次包,想想都蛋疼。作为一个合格的程序员,怎么可能去做这么蠢的体力劳动,有这个时间,我都可以打完几局王者荣耀了,说不定都升入星耀了,ok,不扯淡了,直接上代码配置。

配置

由于我们并不要求logo也换,所以关于logo的配置我没有写,关于更细节的要求你可以参考这篇blog多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源

1,在Manifest.xml配置我们的Channel_value

        <meta-data
            android:name="CHANNEL"
            android:value="${CHANNEL_VALUE}" />

2,修改我们app下的build.gradle文件

apply plugin: 'com.android.application'
//配置时间
def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'
//TODO---因为我们要求app_name不同,所以一定不要在string.xml里面定义app_name,不然会报错
    defaultConfig {
        applicationId "com.kd.machine"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0.0"
        //resValue 其实跟string.xml直接写app_name一样,动态添加
        resValue "string", "app_name", "调试xxxx"
        //这里我定义了我们本地调试的服务器地址,我这里定义成了常量
        buildConfigField "String", "IpAddressAndPort", '"http://47.94.156.205:80"'
        //这里是我们调试的默认省份,,我这里定义成了常量
        buildConfigField "String", "Province", '"调试省份"'
        multiDexEnabled true
        //这里添加了调试渠道
        manifestPlaceholders = [
                "OCR_API_KEY": "273a238bfb9871e94df6cd4319f56c38",
                CHANNEL_VALUE: "sdkd"
        ]

        ndk {
            //Luban turbo
            abiFilters 'armeabi-v7a', 'x86'
        }

    }

//这里是我们配置的渠道信息
    productFlavors {

        test {//这个是配置的测试环境渠道
            resValue "string", "app_name", "测试xxxx"
            buildConfigField "String", "IpAddressAndPort", '"http://47.94.156.205:80"'

            buildConfigField "String", "Province", '"测试省份"'
            // 修改 AndroidManifest.xml 里渠道变量
            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "test"
            ]
        }

    //下面的渠道,就是我们生产环境要求的
        shandong {
            resValue "string", "app_name", "山东xxxx"
            buildConfigField "String", "IpAddressAndPort", '"http://103.239.153.75:8000/"'

            buildConfigField "String", "Province", '"山东"'
            // 修改 AndroidManifest.xml 里渠道变量
            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "shandong"
                                   ]
        }
        shanxi {//山西
            resValue "string", "app_name", "山西xxxx"
            buildConfigField "String", "IpAddressAndPort", '"http://218.26.228.130:8000/"'

            buildConfigField "String", "Province", '"山西"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "shanxi"
                                    ]
        }
        shanxii {//陕西
            resValue "string", "app_name", "陕西xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://1.85.55.167:8000/"'

            buildConfigField "String", "Province", '"陕西"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "shanxii"
                                    ]
        }
        guangxi {//陕西
            resValue "string", "app_name", "广西xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://47.106.194.225:86/"'

            buildConfigField "String", "Province", '"广西"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "guangxi"
            ]
        }
        hubei {//陕西
            resValue "string", "app_name", "湖北xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://nyt.hubei.gov.cn/"'

            buildConfigField "String", "Province", '"湖北"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "hubei"
            ]
        }
        hunan {//陕西
            resValue "string", "app_name", "湖南xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://222.240.191.245:4318/"'

            buildConfigField "String", "Province", '"湖南"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "hunan"
            ]
        }
        yunnan {//陕西
            resValue "string", "app_name", "云南xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://58.57.109.190:8000/"'

            buildConfigField "String", "Province", '"云南"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "yunnan"
            ]
        }
        anhui {//陕西
            resValue "string", "app_name", "安徽xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://www.ahnjpt.cn:8000/"'

            buildConfigField "String", "Province", '"安徽"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "anhui"
            ]
        }
        jilin {//陕西
            resValue "string", "app_name", "吉林xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://www.ahnjpt.cn:8000/"'

            buildConfigField "String", "Province", '"吉林"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "jilin"
            ]
        }
        gansu {//陕西
            resValue "string", "app_name", "甘肃xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://61.178.243.120:18080/"'

            buildConfigField "String", "Province", '"甘肃"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "gansu"
            ]
        }
        henan {//陕西
            resValue "string", "app_name", "河南xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://www.njjl.org:81/"'

            buildConfigField "String", "Province", '"河南"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "henan"
            ]
        }
        qinghai {//陕西
            resValue "string", "app_name", "青海xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://www.qhnjjl.net:8000/"'

            buildConfigField "String", "Province", '"青海"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "qinghai"
            ]
        }
        guangdong {//陕西
            resValue "string", "app_name", "广东xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://183.62.243.18:8770/"'

            buildConfigField "String", "Province", '"广东"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "guangdong"
            ]
        }
        sichuan {//陕西
            resValue "string", "app_name", "四川xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://202.61.89.127:8000/"'

            buildConfigField "String", "Province", '"四川"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "sichuan"
            ]

        }

        xinjiang {//陕西
            resValue "string", "app_name", "新疆xxxx"

            buildConfigField "String", "IpAddressAndPort", '"http://220.171.42.224:88/"'

            buildConfigField "String", "Province", '"新疆"'

            manifestPlaceholders = ["OCR_API_KEY"  : "273a238bfb9871e94df6cd4319f56c38"
                                    , CHANNEL_VALUE: "xinjiang"
            ]

        }


    }



    signingConfigs {
        config {
            storeFile file("debug.jks")
            storePassword "123456"
            keyAlias "machine"
            keyPassword "123456"
            v2SigningEnabled true
        }

    }
    buildTypes {
        debug {
            minifyEnabled false
            zipAlignEnabled true
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config

        }

        release {
            //混淆
            minifyEnabled true
            //Zipalign优化
            zipAlignEnabled true
            //移除无用的resource文件
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        //apk命名格式:Agricultural_Machinery_Supervision_渠道号_版本号_发布时间.apk
                        def fileName = "Agricultural_Machinery_Supervision_${variant.productFlavors[0].name}_v${android.defaultConfig.versionName}_${releaseTime()}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }

            }

        }

    }



    repositories {
        flatDir {
            dirs 'libs'
        }
    }




}



后续

这个就跟我之前的多渠道打包要求不太一样,之前的多渠道,是给多个应用市场打不同的渠道包,只需要配置下渠道就行了,其它的都一样,所以用美团的walle多渠道打包很快就完事了,但是好像不太支持其它配置,当然很有可能是我不会用,所以我只能这样搞了,记录下,做个笔记,方便自己查找,在我的项目里,这个配置是可以的,如果你用了出错,可以留言交流哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值