Gradle 多渠道打包(按需改名)

2017-11-10  本文已影响237人  d26168ad953a

记录代码

build.gradle文件如下

android {

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion

        applicationId "com.xxxx.abcd"
        versionCode 1
        versionName "1.0.1"

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

        multiDexEnabled true // dex突破65535的限制
        //Nuance自动生成的库文件夹中没有我们所需的so文件,所以按照上面的逻辑,就应该是阻止自动生成我们不需要的文件夹或者下载相关的so文件放到对应的文件夹下面。
        //加入需要生成的文件夹//armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64
        ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a" }

        //vectorDrawables.useSupportLibrary = true //支持.xml中<vector矢量图

        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"] // 默认是umeng的渠道 

        // 声明需要使用注解功能,所依赖的gradle都需要添加
        javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
    } 
    signingConfigs {
         //...
    }

    //--[S]渠道打包
    productFlavors { 
        umeng {}  
        yingyongbao {}   //应用宝   
        xiaomi {}        //小米 
        huawei {}        //华为 
        vivo {}          //vivo 
        qh360 {}         //奇虎360  
        oppo{}          //oppo 
        baidu{}         //百度  
        googleplay {    //谷歌 
            applicationId "com.xxxx.abcd.gg"
            //versionName "1.0.1.g"
        }
        wandoujia{}
        lenovomm{}
    }
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
    //--[E]渠道打包--

    buildTypes {
        release {
            //...
        }
        debug {
            //...
        }
    }

    // 修改apk build的名字
    /*
    //android studio 2 的配置
    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                //这里使用之前定义apk文件名称
                //String apkName = "${variant.productFlavors[0].name}_${defaultConfig.versionName}_${compilePackTime()}_.apk"
                output.outputFile = new File(outputFile.parent, appName(outputFile.name, defaultConfig.versionName))
            }
        }
    }*/
    //android studio 3 的配置
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) { 
                outputFileName = appName(outputFile.name, defaultConfig.versionName)
            }else {//这里使用之前定义apk文件名称
                outputFileName = "${variant.productFlavors[0].name}_${defaultConfig.versionName}_${compilePackTime()}_.apk"
            }
        }
    }
}


//默认输出格式:app-umeng-debug.apk 和 app-umeng-release.apk
// 输出apk名称为umeng_V419_20171110_1110.apk
def appName(String outputFileName, String versionName) {
    String appName = outputFileName.replace("app-", "").replace(".apk", "");
    String debugName = appName.replace("-debug", "");
    if (appName == debugName) {// 定义release版本生成的apk的名字
        appName = appName.replace("-release", "") + visionName(versionName) + compilePackTime() + ".apk";
    } else { // 定义debug版本生成的apk的名字
        appName = debugName + visionName(versionName) + compilePackTimeD() + "_debug.apk";
    }
    return appName;
}

// 版本号转换
def visionName(String visionName) {
    return "_V" + visionName.replace(".", "") + "_";
}

// 当前时间
def compilePackTime() {
    return (new Date().format("yyyyMMdd HHmm", TimeZone.getTimeZone("GMT+8"))).replace(" ", "_")
    //   //
}
def compilePackTimeD() { //debug模式下name包含时分(秒)会出现 安装时错误:The APK file does not exist on disk
    return (new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+8")))
}

//...

dependencies { 
    //...
}


如此以后就不用再次修改apk名称了,一劳永逸了,哈哈!

上一篇 下一篇

猜你喜欢

热点阅读