manifestPlaceholders占位符失效

今天打包的时候,运营表示需要一个vivo渠道的包,桌面名称要和其他渠道不同,如果只有这一次需求的话,大可以修改了清单文件中的application的label就行,打完包后再改回原来的,但考虑到目前马甲包的数量以及后续的升级打包,还是决定在gradle中做渠道区分配置,不同渠道使用manifestPlaceholders占位符替换label的字符串引用,形式如下

VivoStore {
manifestPlaceholders = [APP_NAME: "@string/app_name_vivo"]
}
APP_NAME在清单文件中申明

<application
android:name="com.cjkt.repmmath.application.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/icon_logo"
tools:replace="android:label"
android:label="${APP_NAME}"
android:supportsRtl="true"
android:theme="@style/AppTheme">
考虑到其他渠道的一致性,在gradle的defaultConfig中申明统一的替换方案

defaultConfig {
applicationId config.applicationId
minSdkVersion config.minSdkVersion
targetSdkVersion config.targetSdkVersion
versionCode config.versionCode
versionName config.versionName
multiDexEnabled true

    manifestPlaceholders = [
            APP_NAME      : "@string/app_name",
            APPLICATION_ID: config.applicationId,
    ]

}
基本上这样就算完成了,可我试了很多次都不能替换成新的label包名,后来搜索到一篇文章,提到

productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
这段代码导致了渠道中的占位符替换没有成功,我把代码删除后,在每个渠道中单独加入了上述占位符代码,打包后测试确实成功替换了,但具体的原因,那篇文章中只说了引用了 全局变量导致问题的发生

我觉得这个原因有点难以理解,因为这段代码无论放在那里都要引用UMENG_CHANNEL_VALUE这个变量,我个人猜测是manifestPlaceholders占位符每次使用时会清除上次的修改,为此,我在gradle中打印了每个使用到占位符配置的先后执行顺序,结果显示最先执行的是defaultConfig中的占位符代码,接着是渠道中的占位符代码,最后是productFlavors.all中的占位符代码,如果按我的猜想来看,最后执行的占位符代码会清除上一次的修改,导致在渠道中的占位符替换失败

还有个可能是flavor.manifestPlaceholders引用了在渠道中申明的占位符,导致其中原来的APP_NAME替换被UMENG_CHANNEL_VALUE所覆盖,也就是说APP_NAME的替换仍旧维持defalutConfig中的申明,渠道中的修改未起到作用

因为对具体的机制不是很清楚,所以这只是我的一个猜想,如果各位有其他的想法,欢迎交流

提到的文章:https://www.jianshu.com/p/1d5271c2c366
————————————————
版权声明:本文为CSDN博主「tushiba」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tushiba/article/details/96862824

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaoyanj...
    勤奋的pangdunhu阅读 6,440评论 0 1
  • 我们的APP开发结束后,接下来的工作就是上线不同的应用市场。不同的应用市场对于上线的apk文件可能会有不同的要求,...
    地球是猿的阅读 4,310评论 0 0
  • AndroidStudio3.0刚刚发布两天(版本控的我~),便迫不及待的升级了,升级前也明白这次的版本跨度较大,...
    奈何心善阅读 5,313评论 0 1
  • 最近在项目中遇到需要实现 Apk 多渠道、定制化打包, Google 、百度查找了一些资料,成功实现了上述功能,在...
    看一季残花落幕阅读 7,355评论 1 8
  • 【伴读记D364】改试卷忙到1点多才到家,看到你在餐椅里坐着,吃的那么香甜,一颗悬着的心才略略放下。午睡时你闹开了...
    元正妈妈阅读 1,652评论 0 1

友情链接更多精彩内容