欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android多渠道打包:gradle的配置

程序员文章站 2024-01-11 16:29:52
...

gradle方便的命令

在gradle环境下,Android打包可以很方便的使用命名行进行自动打包流程如:

.gradlew assemble

能自动打出所有包。
但是在实际使用中,我们希望不同的打包在程序内写入不同的信息,比如修改全局的网络请求等。

代码注释讲解

android {
    signingConfigs {
        myconfig { // 定义一个签名文件
            keyAlias 'xxxxxx'
            keyPassword 'xxxxxx'
            storeFile file('xxxxxx')
            storePassword 'xxxxxx'
            v2SigningEnabled falseo
        }
    }

    buildTypes {
        debug {
            // 其他代码....
            signingConfig signingConfigs.myconfig // 使用指定签名
        }
        release {
            // 其他代码....
            signingConfig signingConfigs.myconfig
        }
    }

    productFlavors {
        // 定义两个不同维度的打包类型渠道:哪些渠道,哪些服务器地址
        flavorDimensions 'channel', 'host'
        // 渠道
        hqyx {
            dimension 'channel'
            manifestPlaceholders.put('PACKAGE_CHANNEL_VALUE', 'hqyx') // 程序内部标记是哪个渠道
        }
        // 应用宝
        z_tengxun {
            dimension 'channel'
            manifestPlaceholders.put('PACKAGE_CHANNEL_VALUE', 'tengxun')
        }
        z_baidu {
            dimension 'channel'
            manifestPlaceholders.put('PACKAGE_CHANNEL_VALUE', 'baidu')
        }

        // 测试的服务器地址
        ttest {
            dimension 'host'
            buildConfigField('String', 'HOST', project.properties['environment.host.test'])
            // project.properties['environment.host.test'] 能读取gradle.properties文件 内的配置信息
        }
        // 正式环境的服务器地址
        online {
            dimension 'host'
            buildConfigField('String', 'HOST', project.properties['environment.host.online'])
        }
    }
    // 控制打包时输出的文件名
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            if (!variant.buildType.debuggable) {
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    // 计算出新的文件名格式如:Stu_v1.3.0_02051437_develop_debug.apk
                    def fileName = 
                    "Stu_${defaultConfig.versionName}_${new Date().format("MMddHHmm")}_${variant.flavorName}.apk"
                    fileName = fileName.replace("_z_", "_")
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }
    }
    // 配置多渠道时,去除没用的Variants,比如线上环境一般不用出现在debug目录下
    android.variantFilter { variant ->
        if (variant.buildType.name.contains('debug')) {
            variant.getFlavors().each() { flavor ->
                if (flavor.name.contains('z_')) {
                    variant.setIgnore(true)
                }
            }
        } else {
            variant.getFlavors().each() { flavor ->
                if (flavor.name.contains('develop')) {
                    variant.setIgnore(true)
                }
            }
        }
    }
}

查看gradle的配置效果

点击AndroidStudio左下角的Build Variants即可查看所有的Variant
Android多渠道打包:gradle的配置
在AndroidStudio下的Terminal输入./gradlew assembleHqyxSimDebug即可输入对应的安装包