VasDolly icon indicating copy to clipboard operation
VasDolly copied to clipboard

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

Open xuleijvbw opened this issue 2 years ago • 0 comments

如果项目之前是通过 AS 手动打包的形式,在主 App 工程的 build.gradle 和 AndroidManifest.xml 里做了一些渠道包相关信息的配置。现在用了 VasDolly 的方案,要对自己工程里相关的代码进行更改。 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")
        }
    }

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

def flavorName() {
    return ""
}

manifestPlaceholders = [
        UMENG_CHANNEL_VALUE: flavorName()
]

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

xuleijvbw avatar Jul 13 '22 09:07 xuleijvbw

无法赋值给 AndroidManifest 但是可以指定友盟channel

//友盟渠道包初始化
String channel = ChannelReaderUtil.getChannel(mainApplication);
UMUtils.setChannel(mainApplication, channel);

smallgirl avatar Aug 15 '22 08:08 smallgirl

嗯,可以用友盟提供的setChannel方法

yanyongshan avatar Sep 21 '22 12:09 yanyongshan