用gradle多渠道打包一般在build.gradle文件里面,productFlavors 标签下添加自己的渠道名,像下面这样
android {
productFlavors {
"xiaomi"{
manifestPlaceholders = [channelName: "xiaomi"]
}
"360market"{
manifestPlaceholders = [channelName: "360market"]
}
"baidu"{
manifestPlaceholders = [channelName: "baidu"]
}
"wandoujia"{
manifestPlaceholders = [channelName: "wandoujia"]
}
}
}
或者
android {
productFlavors {
"xiaomi"{}
"360market"{}
"baidu"{}
"wandoujia"{}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [channelName: name]
}
}
gradle就会自动帮我们替换AndroidManifest.xml文件里面的${channelName}
<meta-data android:name="channel" android:value="${channelName}"/>
但最近有个需求,每个渠道的app图标和里面一些界面的图片和文字会不一样,按照上面的方法虽然也可以但会造成打包时会多余出无用的图片和增加一些垃圾代码。后来查了下,在main的同级目录下创建以渠道名命名的文件夹,然后在文件夹里面创建资源文件(资源文件在文件夹里面的路径要和原资源文件在main文件夹里面的路径要一致),然后资源文件就会自动替换或者合并。
比如在原资源文件目录main\res\mipmap-hdpi\ic_launcher.png,那xiaomi渠道要在xiaomi\res\mipmap-hdpi\ic_launcher.png放进资源文件,打包小米渠道的时候会自动替换图片。
还有合并的情况,比如在main下面Strings.xml文件内容是
<string name="loading">加载中…</string>
<string name="loading_no_more">已加载全部</string>
xiaomi下面Strings.xml文件内容是
<string name="loading">正在加载中,不要着急吗客官…</string>
打包xiaomi渠道会变成
<string name="loading">正在加载中,不要着急吗客官…</string>
<string name="loading_no_more">已加载全部</string>
当然在main下面的所有文件可以替换或者合并。。。