zoukankan      html  css  js  c++  java
  • android多渠道打包

    转载请标明出处,维权必究:

    https://www.cnblogs.com/tangZH/p/10764726.html

    http://77blogs.com/?p=55

    因为要统计各个市场的下载量和其他数据,所以在打包的时候就需要针对每个渠道单独打包,于是,多渠道打包自然就出现了。

    不然一个一个打可真是要命。

    1、在AndroidManifest.xml文件的</application>标签里面设置:

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

    2、app的build.gradle里面设置(android {}里面):

    (1)、defaultConfig {}里面加上:flavorDimensions "default"

    (2)、productFlavors里面写上渠道名与渠道号

    productFlavors {
    //渠道1。渠道名:v1,渠道号v1_100 v1 { manifestPlaceholders
    = [ APP_CHANNEL_VALUE: "v1_100" ] }
    //渠道2。渠道名:v2,渠道号:v2_100 v2 { manifestPlaceholders
    = [ APP_CHANNEL_VALUE: "v2_100" ] } }

    (3)、设置输出的apk名称(方便查看):

    buildTypes {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 
    'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" outputFileName = fileName } } } } }

    这个是apk的名称:

    def fileName

    = "novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

    defaultConfig.versionName:版本号。

    releaseTime():时间(具体方法接下来说)

    variant.productFlavors[0].name:渠道名(这里为v1或者v2)

    apk名称为novel_v  +  版本号   +   时间   +   渠道名

    (4)、releaseTime()方法(写在build.gradle的最外层)

    def releaseTime() {
        return new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
    }

    3、验证:

    (1)、代码中获取渠道号

    private String getMetaChannel() {
         try {
             ApplicationInfo appInfo = getPackageManager()
    .getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA); String value = appInfo.metaData.getString("APP_CHANNEL_VALUE"); return value; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return ""; }

    (2)、打debug包

    然后运行,便可以打v1渠道的包,在看代码中打印出来的渠道是否正确

    若是所有的渠道都是相同的渠道号,可以这样:

    productFlavors.all {
         flavor -> flavor.manifestPlaceholders = [
                 APP_CHANNEL_VALUE: “渠道号”,
         ]
     }

    哪里有不对的地方欢迎指出。

    若是有疑问,或许这两篇能够帮到你:

    https://www.cnblogs.com/tangZH/p/10764638.html

    https://www.cnblogs.com/tangZH/p/10764568.html

  • 相关阅读:
    黑马程序员--C语言基础之--数组、指针的基础知识
    黑马程序员--C语言基础之--变量、内部函数与外部函数
    黑马程序员--C语言基础之--printf函数
    黑马程序员--C语言基础之--scanf函数
    黑马程序员--C语言基础之--数据类型
    鉴定一张图片是否处理过
    图解JQUERY尺寸及位置定义
    谈谈对“渐进增强与平稳退化“的理解
    理解 JavaScript 作用域和作用域链
    编写更好的jQuery代码的建议
  • 原文地址:https://www.cnblogs.com/tangZH/p/10764726.html
Copyright © 2011-2022 走看看