//设置生成apk的文件名
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为app_v版本号_渠道号_sigin.apk
def fileName = "app_v${defaultConfig.versionName}_${variant.productFlavors[0].name}_sigin.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
```
执行完以上三步之后就可以在output中看到生成的不同渠道包,其实打渠道包的本质就是在编译期动态改变AndroidManifest.xml中的某一个字段。功能是这个功能,但是实现方式有很多,如果没有其他的特别要求的话,就是简单的打渠道包,那么当然要使用最快速的方式。
## 关于更新和Tinker ##
由于使用渠道包,那么在强制更新的时候得根据你当前使用的渠道,去下载想要得到对应的渠道包,Tinker的原理也是一样的,怎么才能下到对应的渠道包那?
首先必须得知道当前的包是哪个渠道的,我们可以通过代码去获得AndroidManifest.xml中配置的渠道ID
```java
try {
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String value = appInfo.metaData.getString("TD_CHANNEL_ID");
Log.d("Tag", " TD_CHANNEL_ID : " + value);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}