美文网首页
Android多渠道打包

Android多渠道打包

作者: 胡修波 | 来源:发表于2017-07-05 16:24 被阅读0次

    下面以友盟统计为例说明,一般友盟统计在AndroidManifest.xml里面会有这么一段声明:

    其中CHANNEL_ID就是友盟的渠道标示,多渠道的实现一般就是通过修改CHANNEL_ID值来实现的。

    接下来将一步一步来实现多渠道版本打包。

    1.在AndroidManifest.xml里配置PlaceHolder,用与在build.gradle文件中来替换成自己想要设置的值

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

    2.在build.gradle设置productFlavors,修改PlaceHolder的值

    productFlavors {
            playStore {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "playStore"]
            }
            miui {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "miui"]
            }
            wandoujia {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
            }
        }
    

    或者批量修改

    productFlavors {
            playStore {}
            miui {}
            wandoujia {}
    }
     //批量处理
    productFlavors.all { 
           flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
    }
    

    按照上面两步即可编译打多渠道包了,命令是 ./gradlew assembleRelease,可以打包所有的多渠道包。
    如果只是想打单渠道包,则执行相应的task即可,如gradle assemblePalyStoreRelease就是打PlayStore渠道的Release版本。

    3.如果希望可以对最终的文件名做修改,如需要针对不同的需求生成不同的文件。而修改文件名也很简单,参考以下代码即可实现

    def releaseTime() {
        return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
    }
    
    android{
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    File outputDirectory = new File(outputFile.parent);
                    def fileName
                    if (variant.buildType.name == "release") {
                        fileName =  "app_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                    } else {
                        fileName = "app_v${defaultConfig.versionName}_${packageTime()}_debug.apk"
                    }
                    output.outputFile = new File(outputDirectory, fileName)
                }
            }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Android多渠道打包

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