Android笔记(十七):Gradle配置多渠道资源签名打包

在app build.gradle下编辑 

1.配置不同渠道打包签名:

android {
    ...
    signingConfigs {
        debug {
            keyAlias ''
            keyPassword ''
            storeFile file('xxx.keystore')
            storePassword 'android'
        }
        release {
            keyAlias ''
            keyPassword ''
            storeFile file('xxx.keystore')
            storePassword ''
        }

        v1 {
            keyAlias ''
            keyPassword ''
            storeFile file('xxx.keystore')
            storePassword ''
        }
    }
    buildTypes {

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

        debug {
            signingConfig signingConfigs.debug
        }

        v1SignRelease {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.v1
        }

        v1SignDebug {
            signingConfig signingConfigs.v1
        }
    }
    ...

}

使用gradlew :app:assembleV1SignDebug或者gradlew :app:assembleV1SignRelease 即可打包自定义渠道签名包

2. 配置不同渠道资源包(applicationId,assets)

android {
    ...
    flavorDimensions "test"

    productFlavors {
        google {
            applicationId "xxx"
            manifestPlaceholders.put("UMENG_CHANNEL_VALUE", "google")
        }

        huawei {
            applicationId "xxx"
        }

        oppo {
            applicationId "xxx"
        }

        vivo {
            applicationId "xxx"
        }
    }

    productFlavors.all { flavor ->
        manifestPlaceholders.put("UMENG_CHANNEL_VALUE", name)
    }

    sourceSets {

        google {
            java {
                srcDirs = [
                    'src/google/java',
                    'src/google/extra/exclude'
                ]
    
                excludes = ['file/*.java']
                includes = ["xxx.java"]
            }
            assets.srcDirs = ['src/google/assets']
        }

        huawei {
            assets.srcDirs = ['src/huawei/assets']
        }

        oppo {
            assets.srcDirs = ['src/oppo/assets']
        }

        vivo {
            assets.srcDirs = ['src/vivo/assets']
        }

    }
    ...
}

flavorDimensions:和productFlavors搭配使用,用于定义维度,由于productFlavors没有用到任意设置一个值test

manifestPlaceholders:配置可以在 AndroidManifest.xml 中替换的参数

<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

sourceSets可以装载多个sourceSet,google,huawei,oppo,vivo即为sourceSet(需要在模块src目录下创建对应sourceSet名字的文件夹)

sourceSet属性:

1. java 

srcDirs:设置 java 代码的存放位置

include:针对我们设置的 “srcDirs” 文件夹路径,设置将哪些类进行编译打包。

默认值:`` /*.java``**(具体规则请查看 PatternFilterable 官方文档),表示包含目录下的所有文件夹以及其下的所有文件。

exclude:针对我们设置的 “srcDirs” 文件夹路径,设置将哪些类不进行编译打包。

2. assets

srcDirs:设置 assets 的存放位置

注:

main为主sourceSet,可设置aidl,jni,jniLibs,mainfest,res,resources的存放位置

设置打包出来的apk命名方式

渠道名-构建类型-版本号-版本名称-编译时间.apk

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            def fileName = "${variant.flavorName}-${variant.buildType.name}-${defaultConfig.versionCode}-v${defaultConfig.versionName}-${buildTime()}.apk"
            outputFileName = fileName
        }
    }
}

def buildTime() {
    def date = new Date()
    def formattedDate = date.format('yyyy_MM_dd--HHmm')
    return formattedDate
}

猜你喜欢

转载自blog.csdn.net/weixin_40855673/article/details/108978514