android 多渠道覆盖,android多渠道打包

基本思路:在AndroidManifest.xml文件中设置一个placeholder,打包的时候动态替换该placeholder。

通过如下方式在AndroidManifest.xml文件中设置一个placeholder(这里placeholder名为“APP_CHANNEL_VALUE”):

AndroidManifest.xml:

android:name="APP_CHANNEL"

android:value="${APP_CHANNEL_VALUE}" />

在build.gradle文件中动态替换placeholder:

huild.gradle:

android{

...

productFlavors {

yingyongbao {}

xiaomi {}

huawei {}

...

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name]

}

}

经过上述两步操作,执行打包命令gradlew assembleRelease,就能获得不同渠道的安装包了。

注意

有时,我们在AndroidManifest.xml文件当中配置了多个placeholder,比如我们在上述AndroidManifest.xml中再添加一个placeholder,名字为APP_KEY_VALUE:

AndroidManifest.xml:

android:name="APP_CHANNEL"

android:value="${APP_CHANNEL_VALUE}" />

android:name="APP_KEY"

android:value="${APP_KEY_VALUE}" />

这时会报这样的问题:

Error:(74, 13) Attribute meta-data#APP_KEY@value at AndroidManifest.xml:74:13 requires a placeholder substitution but no value for is provided.

问题的原因是没有为APP_KEY_VALUE提供值。下面我们尝试修改:

huild.gradle:

android{

defaultConfig {

manifestPlaceholders = [APP_KEY_VALUE : "appkey"]

}

...

productFlavors {

yingyongbao {}

xiaomi {}

huawei {}

...

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name]

}

}

这样修改之后问题依然存在。我们看一下这个问题的原因:

manifestPlaceholders是一个变量,我们在defaultConfig当中赋值,又在productFlavor.all中赋值,前面的赋值就被覆盖掉了。

进一步讲,manifestPlaceholders是一个数组变量,赋值的时候我们应该把所有placeholder组成一个数组赋值给manifestPlaceholders。

正确的做法:

huild.gradle:

android{

...

productFlavors {

yingyongbao {}

xiaomi {}

huawei {}

...

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name,

APP_KEY_VALUE:"appkey"]

}

}

进阶->配置文件外移

在根目录下创建local.properties文件,并添加如下内容:

local.properties

sdk.dir = /android/sdk/dir

appkey:"realAppkey"

在build.gradle文件中引用:

huild.gradle:

apply plugin: 'com.android.application'

Properties properties = new Properties()

properties.load(project.rootProject.file('local.properties').newDataInputStream())

android{

...

productFlavors {

yingyongbao {}

xiaomi {}

huawei {}

...

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [APP_CHANNEL_VALUE:name,

APP_KEY_VALUE:properties.getProperty("appkey")]

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值