美文网首页
Gradle 多渠道打包(按需改名)

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

作者: d26168ad953a | 来源:发表于2017-11-10 13:14 被阅读237次

    记录代码

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

    相关文章

      网友评论

          本文标题:Gradle 多渠道打包(按需改名)

          本文链接:https://www.haomeiwen.com/subject/akhbmxtx.html