Android利用Gradle多渠道打包如何动态替换资源,文字
动态替换APP logo
首先我们在app的build.gradle下面加入如下代码,以oem1为示例,
1 | productFlavors { |
以上代码 manifestPlaceholders 主要是用于在AndroidManifest.xml内可以动态的替换oem图标,我们看AndroidManifest.xml里面是如何用到这oemIcon的
1 | <application |
以上代码主要是关注android:icon="${oemIcon}" ,这个其实在gradle打包后悔自动替换成我们在build.gradle里面设置的 ‘@drawable/oem1’,这样就可以根据不同渠道包替换成不同的icon
动态替换文字
首先在build.gradle里面配置我们需要的文字
1 | productFlavors { |
注意:我们的string.xml里面不允许有dynamic_text字段,有的话编译会报错.
主要是resValue一行我们详细解释一下,string表示的是我们要生成一个string字段,dynamic_text指的是字段名称便于我们程序里面使用,"oem1的动态文字"指的是我们的字符串的值
其实这一句想相当于我们在string.xml里面定义如下一行
1 | <string name="dynamic_text">oem1的动态文字</string> |
##动态替换资源文件
如果在程序中我们有一个地方需要根据不同的渠道对应不同的drawable,我们就可以用下列方法,下列方法是假设程序中有一处需要设置图片,思路是我们首先在gradle里面设置好值,在AndroidManifest.xml里面使用META_DATA,然后再从程序里面调用
build.gradle如下
1 | productFlavors { |
AndroidManifest.xml如下
1 | <meta-data |
java程序如下
MainActivity.java
1 |
|
Util.java
1 | public class Util { |
主要思路就是利用META_DATA来货渠道资源的int值并且返回到程序中,达到动态生成的目的
