Meituan-Dianping / walle

Android Signature V2 Scheme签名下的新一代渠道包打包神器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在 gradle里 怎么取到渠道号,赋值给 AndroidManifest 里呢?

jeffreyxuworld opened this issue · comments

commented

如果项目之前是通过 AS 手动打包的形式,在主 App 工程的 build.gradle 和 AndroidManifest.xml 里做了一些渠道包相关信息的配置。现在用了 Walle 的方案,要对自己工程里相关的代码进行更改。
1、 AndroidManifest.xml 里,友盟 SDK 需要获取应用的渠道名称

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

2、在主 App 工程的 build.gradle 中,写了如下代码:

flavorDimensions "versionCode", "serverUrl"

applicationVariants.all { variant ->
          variant.outputs.all { output ->
              def fileName
              if (variant.buildType.name == "release") {
                  fileName = "XXAPP-${variant.productFlavors[0].name}-${variant.versionName}-Android.apk"
              } else {
                  fileName = "XXAPP-Android.apk"
              }
              outputFileName = fileName
          }
      }
productFlavors {
        yingyongbao {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        huawei {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }
        xiaomi {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        oppo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
        }
        vivo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
        }
        baidu {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        urlTest {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "1")
        }
        urlOnline {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "2")
        }
    }

这些渠道包相关的配置,会和 Walle 的方案有所冲突。目前通过屏蔽这些和渠道包配置相关的代码,可以正常打出渠道包。
那么我在 gradle 里怎么取到渠道号,赋值给 AndroidManifest 里呢?
比如这么写:

def flavorName() {
    return ""
}

manifestPlaceholders = [
        UMENG_CHANNEL_VALUE: flavorName()
]

在 gradle 里 flavorName() 里的代码应该怎么写

兄弟你有解决办法了吗

同问

AndroidManifest.xml 不再设置 UMENG_CHANNEL 信息,而是通过初始化代码设置。
参见官网