多聚道打包
根据公司业务要求,需要在将App上架到各大应用市场,并进行统计不同聚道用户数等。我们一般集成友盟统计来实现该方式。
android原始打包方式配置。(已在AndroidManifest.xml文件中配置聚道id和聚道name)
productFlavors { xiaomi {} baidu {} huawei {} _360 {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } android.applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 输出apk名称为mvvmtest_v1.0._360.apk def fileName = "mvvmtest_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk" outputFileName = new File("../release/", fileName) } } }
该方式打包需要一个个点击打包,并且系统原因会使得打包异常慢,当有非常多的聚道包要打时,这样就非常繁琐了。
为了便于快速打多个聚道包,使用腾讯的VasDolly配置完成打包。
配置VasDolly步骤:
1.添加依赖。
可参考官方文档配置:https://github.com/Tencent/VasDolly
2.配置聚道列表。
1.在gradle.properties中添加如下配置。
channel_file=channel.txt
2.在项目根目录新建channel.txt文件,添加配置聚道。
3.通过Gradle生成多聚道包。
1.直接编译生成多聚道包。
//命令行操作打包,gradlew channelDebug、gradlew channelRelease channel{ //指定渠道文件 channelFile = new File(project.rootDir, "channel.txt") //多渠道包的输出目录,默认为new File(project.buildDir,"channel") baseOutputDir = new File(project.rootProject.buildDir,"channel") //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType} apkNameFormat ='${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}' //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false) isFastMode = false //buildTime的时间格式,默认格式:yyyyMMdd-HHmmss buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss' //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式 lowMemory = false }
生成后所在目录如下。
通过上述方式生成的包大概时长27s,但是该方式生成的包进行360加固后,聚道名称会丢失。因此推荐使用方式二,生成基准包并加固后重新生成多聚道包。
2.根据已有基础包重新生成多渠道包。
rebuildChannel { //命令操作打包 gradlew rebuildChannel //指定渠道文件 channelFile = new File(project.rootDir, "channel.txt") //存在的基础包路径 // baseDebugApk = 已有Debug APK // baseReleaseApk = 已有Release APK baseReleaseApk = new File(project.buildDir, "app-release_10_jiagu_sign.apk") //默认为new File(project.buildDir, "rebuildChannel/debug") debugOutputDir = new File(project.buildDir, "rebuildChannel/debug") //默认为new File(project.buildDir, "rebuildChannel/release") releaseOutputDir =new File(project.buildDir, "rebuildChannel/release") //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false) isFastMode = false //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式 lowMemory = false }
生成后所在目录如下。
最后编译时长大约4s。
4.读取聚道信息。
String channel = ChannelReaderUtil.getChannel(getApplicationContext());
可通过该方式读取聚道信息,这样可在Application中动态获取聚道名称并设置聚道ID。
参考链接:
1.https://www.cnblogs.com/tangs/articles/11251090.html
2.https://blog.csdn.net/qq_35070105/article/details/80334758