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

记录代码

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中 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名称了,一劳永逸了,哈哈!

你可能感兴趣的:(Gradle 多渠道打包(按需改名))