Gradle多渠道打包

一、在 AndroidManifest.xml 里设置动态渠道变量

        
        

二、在 build.gradle 设置 productFlavors

    defaultConfig {
       

        //版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
        flavorDimensions "versionCode"

    }

productFlavors {
        google {
//            manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"google",name_activity:"Test M"]
            manifestPlaceholders = [channel:"google"]
        }
        qh360 {
//            manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"qh360",name_activity:"Test M"]
            manifestPlaceholders = [channel:"qh360"]
        }
        baidu {
//            manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"baidu",name_activity:"Test M"]
            manifestPlaceholders = [channel:"baidu"]
        }
        self {
//            manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"self",name_activity:"Test M"]
            manifestPlaceholders = [channel:"self"]
        }
    }

三、执行打包命令 gradlew assembleRelease

Gradle多渠道打包_第1张图片

 或者

Gradle多渠道打包_第2张图片

 四、配置签名文件

 //签名
    signingConfigs {
        release{
            keyAlias 'alias'
            keyPassword APK_SIGN_KEY_PASSWORD
            storeFile file('KeyStore.KeyStore')
            storePassword APK_SIGN_STORE_PASSWORD
        }
        debug{
            keyAlias 'alias'
            keyPassword APK_SIGN_KEY_PASSWORD
            storeFile file('KeyStore.KeyStore')
            storePassword APK_SIGN_STORE_PASSWORD
        }

    }

    buildTypes {
        release {
            //启用混淆代码的功能
            minifyEnabled false
            //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }


    //构建APK包名 可用一
    applicationVariants.all { variant ->
        def today = new Date().format('yyyyMMddHHmmss')
        //这个修改输出的APK路径
        if (variant.buildType.name != "debug") {//防止AS无法安装debug包(apk)
             variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/ader")
        }
         variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData ->
            //这个修改输出APK的文件名
            apkData.outputFileName = "Ader_" +
                    "v" + defaultConfig.versionName + "_" +
                    today + "_" +
                    variant.buildType.name + "_" +
                    variant.productFlavors[0].name +
                    ".apk"
        }
    }

//    //构建APK包名 可用二
//    android.applicationVariants.all { variant ->
//        //判断是release还是debug版本
//        def buildType = variant.buildType.name
//        //获取渠道名称
//        def channel = variant.productFlavors[0].name
//        def fileName//获取当前时间的"YYYY-MM-dd"格式。
//        def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
//        //println variant.getPackageApplicationProvider().outputFile
//        //def output = variant.outputFile()
//        variant.outputs.each {
//            if (buildType == "release") {
//                variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/apks/${buildType}/${createTime}")
//                fileName = "${channel}_v${defaultConfig.versionName}_${createTime}_${buildType}.apk"
//                //it.outputFile = new File(it.outputFile.parent, fileName)
//                it.outputFileName = fileName
//            }
//        }
//    }

参考资料

1.API 'variantOutput.getPackageApplication()' is obsolete and has been replaced 解决方案

2.AndroidStudio 一键多渠道打包实现方法

3.详解Android多版本、多环境、多渠道打包,附源码Demo

4.Android gradlew 多渠道打包

5.Android多渠道打包(六):maven&gradle

你可能感兴趣的:(Android)