Android 使用VasDolly 实现多渠道打包
前言:
因为公司项目需要发布到更多的平台上,以供用户下载。打包就成了一个很大的问题。利用原本的打包方式,又慢油耗。主要是电脑慢的话,打一个包都已经要一俩分钟了,如果需要发布的渠道多的话,那么真的就GG了。
当然第一想到的还是使用第三方框架来实现。原始的做法如何配置渠道打包我这就不介绍啦。咱们主要讲的就是使用VasDolly来配置完成打包的过程。
这个框架是腾讯的开源框架,大家可以了解一下,VasDolly实现原理
大家可以对比一下目前比较流行的三个框架,VasDolly、packer-ng-plugin、Walle。选择适用自己的。
正文:
先贴一下全部的配置代码
apply plugin: 'com.android.application'
apply plugin: 'channel'android {compileSdkVersion rootProject.ext.android.compileSdkVersionbuildToolsVersion rootProject.ext.android.buildToolsVersiondefaultConfig {minSdkVersion rootProject.ext.android.minSdkVersiontargetSdkVersion rootProject.ext.android.targetSdkVersionversionCode rootProject.ext.android.versionCodeversionName rootProject.ext.android.versionNamemultiDexEnabled truendk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips"}}sourceSets rootProject.ext.android.sourceSetsdexOptions {javaMaxHeapSize "4g"}flavorDimensions 'default'//等更新到3.0.0的版本AS更换成这个android.applicationVariants.all { variant ->if (variant.buildType.name == "debug") {// 服务器地址buildConfigField "String", "HOST", "\"http://testBaidu.com/\""} else if (variant.buildType.name == "release") {// 服务器地址buildConfigField "String", "HOST", "\"http://www.baidu.com/\""}variant.outputs.all {outputFileName = "app-${variant.versionName}.apk"}}signingConfigs {debug {storeFile file("test.keystore")storePassword "android"keyAlias "test"keyPassword "123456"}release {storeFile file("test.keystore")storePassword "android"keyAlias testkeyPassword "123456"v1SigningEnabled true//开启V1签名v2SigningEnabled true//开启V2签名}}buildTypes {debug {signingConfig signingConfigs.debugproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'debuggable true}release {signingConfig signingConfigs.releasedebuggable falseminifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}dataBinding {enabled = true}packagingOptions{exclude "META-INF/rxjava.properties"exclude 'META-INF/DEPENDENCIES.txt'exclude 'META-INF/NOTICE'exclude 'META-INF/NOTICE.txt'exclude 'META-INF/LICENSE'exclude 'META-INF/LICENSE.txt'}useLibrary 'org.apache.http.legacy'//直接编译生成多渠道包//命令行操作打包,gradlew channelDebug、gradlew channelReleasechannel{//指定渠道文件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-HHmmssbuildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'//低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式lowMemory = false}/*根据已有基础包重新生成多渠道包rebuildChannel {//命令操作打包 gradlew rebuildChannel//指定渠道文件channelFile = new File(project.rootDir, "channel.txt")//存在的基础包路径baseDebugApk = 已有Debug APKbaseReleaseApk = 已有Release APK//默认为new File(project.buildDir, "rebuildChannel/debug")debugOutputDir = Debug渠道包输出目录//默认为new File(project.buildDir, "rebuildChannel/release")releaseOutputDir = Release渠道包输出目录//快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)isFastMode = false//低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式lowMemory = false}*/aaptOptions {cruncherEnabled = falseuseNewCruncher = false}
}dependencies {//extra lib for libs packageimplementation fileTree(include: ['*.jar'], dir: 'libs')androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})testImplementation rootProject.ext.dependencies.junitimplementation rootProject.ext.dependencies.cardviewV7implementation rootProject.ext.dependencies.multideximplementation rootProject.ext.dependencies.percentimplementation rootProject.ext.dependencies.constraintLayoutimplementation rootProject.ext.dependencies.butterknifeannotationProcessor rootProject.ext.dependencies.butterknifeCompilerimplementation rootProject.ext.dependencies.switchbuttonimplementation rootProject.ext.dependencies.easypermissionsimplementation rootProject.ext.dependencies.TimePickerDialogimplementation rootProject.ext.dependencies.chenypAdapterimplementation rootProject.ext.dependencies.journeyappsZxingimplementation rootProject.ext.dependencies.zxingCoreimplementation rootProject.ext.dependencies.systembartintSystembartintimplementation rootProject.ext.dependencies.systembartintSystembartintimplementation rootProject.ext.dependencies.umengAnalyticsimplementation rootProject.ext.dependencies.flowlayoutLibimplementation project(path: ':simple_lib')implementation project(path: ':tribes_module')api 'com.leon.channel:helper:2.0.1'}
接下来说一下步骤细节。
第一步:在项目的build.gradle中添加这行代码
官方GitHub地址:GitHub - Tencent/VasDolly: Android V1 and V2 Signature Channel Package Plugin
classpath 'com.leon.channel:plugin:2.0.1'
第二步:在主APP工程中,添加对VasDolly的引用
apply plugin: 'channel'
第三步:在工程中去引用helper依赖(版本还是看官网当前的版本吧)
api 'com.leon.channel:helper:2.0.1'
第四步:配置渠道列表,这里呢有两种方式。(以下部分说明,摘自github VasDolly 点击打开链接)
1)第一种:在grable.properties文件指定渠道文件名称,该渠道文件不许位于根工程目录下,一行一个渠道信号
channel_file=channel.txt
2) 第二种:在 channel 或者 rebuildChannel 属性中通过 channelFile 属性指定渠道文件,一行一个渠道信息(目前我是使用的这种方式,方便于我在一个地方可以管理)
其中,多渠道包的命名规则中,可使用以下字段:
- appName : 当前project的name
- versionName : 当前Variant的versionName
- versionCode : 当前Variant的versionCode
- buildType : 当前Variant的buildType,即debug or release
- flavorName : 当前的渠道名称
- appId : 当前Variant的applicationId
- buildTime : 当前编译构建日期时间,时间格式可以自定义,默认格式:yyyyMMdd-HHmmss
第五步:开始打包,在Android Studio 下的 Terminal 下输入命令行即可
gradlew channelDebug 测试
gradlew channelRelease 正式
一个回车键....进度条跑起来啦!!!
当我们看到这个BUILD SUCCESSFUL的时候,就说明打包成功啦
看一下这速度,25秒,打出了20个包。厉不厉害,牛X不
另外咱们再说一下,VasDolly 还给我们提供的另外一个方式,已经有基础包了,根据基础包生成更多的渠道包。
注意:这里需要配置的东西有,基础包的路径,和输出的目录路径
然后这是的命令就是 gradlew rebuildChannel
rebuildChannel {//命令操作打包 gradlew rebuildChannel//指定渠道文件channelFile = new File(project.rootDir, "channel.txt")//存在的基础包路径baseDebugApk = 已有Debug APKbaseReleaseApk = 已有Release APK//默认为new File(project.buildDir, "rebuildChannel/debug")debugOutputDir = Debug渠道包输出目录//默认为new File(project.buildDir, "rebuildChannel/release")releaseOutputDir = Release渠道包输出目录//快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)isFastMode = false//低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式lowMemory = false}
还有就是,如果你有集成友盟统计,那么就需要你在,Application 下的 onCreate() 方法中去加多这两行代码了
private void initUmeng() {//获取渠道标识String channel = ChannelReaderUtil.getChannel(getApplicationContext());MobclickAgent.setDebugMode(true);// SDK在统计Fragment时,需要关闭Activity自带的页面统计,// 然后在每个页面中重新集成页面统计的代码(包括调用了 onResume 和 onPause 的Activity)。MobclickAgent.openActivityDurationTrack(false);//普通统计场景类型MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);MobclickAgent. startWithConfigure(new MobclickAgent.UMAnalyticsConfig(this,"你的友盟AppKey", channel, MobclickAgent.EScenarioType.E_UM_NORMAL,true));}
好了,到这里就全部介绍完咯。如果不明白的欢迎留言。其他详情可以观看github上作者的描述
VasDolly
Android 使用VasDolly 实现多渠道打包相关推荐
- android gradle两种多渠道打包方式
android gradle两种多渠道打包方式 gradle多渠道打包,目前已经了解到的有两种方式: 一种是利用gradle的manifestPlaceholders属性来替换渠道值 另一种是不同的渠 ...
- Android grade语法,多渠道打包
Android grade语法,多渠道打包 文章目录 Android grade语法,多渠道打包 一.groovy语法 二.自动打包切换测试正式环境 三.gradle多渠道打包 总结 一.groovy ...
- Android开发之Gradle多渠道打包总结
首先老套路看图:分别是小米的渠道和应用宝的渠道 这是渠道的渠道号的截图 先说下Gradle的多渠道打包,个人更喜欢这样写: 第一步:需要在清单文件添加标识: <meta-dataandroid: ...
- Android之友盟多渠道打包与数据统计(非原创)
文章大纲 一.多渠道打包与数据统计介绍 二.友盟实现多渠道打包实战 三.友盟数据统计实战 四.项目源码下载 五.参考文章 一.多渠道打包与数据统计介绍 多渠道打包,相信很多同学都知道.在Andro ...
- android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)
多渠道打包和资源混淆的作用这里我就不再阐述了.网上有很多. 本篇博客我们来介绍一下如何实现多渠道打包之前先进行资源混淆,这样一来我们打出来的包都是已经进行过资源混淆的了. 如果你还有其他的需求,也可以 ...
- Android热更新Tinker + 多渠道打包 + 加固的流程详解
一.Tinker热修复 关于热修复的作用,不用多说了,一句话概括就是通过让用户无感的方式来修复线上应用的bug.这里介绍的是微信Tinker. 下面的接入方式都是参考自Tinker官方文档来.我这里主 ...
- android多渠道打包签名配置,Gradle For Android(二) 多渠道打包与签名配置
<Gradle For Android(二) 多渠道打包与签名配置> 转载请注明来自 傻小孩b(gold.xitu.io/user/57e089-喜欢的能够关注我,不按期总结文章!您的支持 ...
- Android Studio 3.0 多渠道打包 解决All flavors must now belong to a named flavor dimension
首先官方文档地址:这个需要梯子 https://developer.android.com/studio/build/build-variants?utm_source=android-studio# ...
- Android国内海外apk多渠道打包了解一下?
本文主要讲解一个代码工程需要同时需要打包国内外apk包,国外一般只在google play发布,国内发布的平台会更多一些,包括华为.小米.应用宝.vivo等应用市场平台 需求整理 国内和海外版本差异一 ...
最新文章
- qthread destroyed while thread is still running
- java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
- mac+php7+mysql.so_在Mac上编译安装PHP7的开发环境
- intx update task - IB_IBINTX_UPDATE
- Linux虚拟机重启后无法获取IP的问题(断网、没网)
- FF公布融资及FF 91交付规划 IPO之前还需8.5亿美元资金
- java数组综合练习_69期-Java SE-005_二维数组、综合练习-001-002
- 关于PCI-E接口你要知道这些点
- JavaWeb篇-谷歌验证码的使用
- 苹果计算机远程控制软件,向日葵远程控制软件iPhone手机远程控制电脑
- 怎么写脚本实现自动输入密码
- .netcore3 下Signalr 关于Joson序列化后对象属性变小写的问题
- bat脚本打开cmd执行命令
- 安装Pillow指定版本出错
- 计算机硬盘有坏道,电脑硬盘有坏道怎么办?
- HTMLCSS精华知识点——基础标签
- 输入在第一行中给出一个正整数n(1)。第二行输入n个整数,用空格分开。在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
- 【论文笔记】A Survey on Federated Learning: The Journey From Centralized to Distributed On-Site Learning a
- 二十六、 对偶问题(※※※)
- Unity发布PC平台exe的窗口花样(WindowsAPI、捕获关闭事件、隐藏窗口标题栏、隐藏最小化最大化关闭按钮等等)
热门文章
- 使用gitee pages搭建个人博客
- 一个获取ip地址的命令详解
- JAVA中空值String拼接的坑!!!
- weui uploader java_微信小程序 WeUI·Uploader
- 天籁obd接口针脚定义_2013新天籁加装OBD胎压监测+无损改装彻底解决亏电求加精...
- qt creator初始化配置,解决No valid kits found
- group by rollup 和grouping的使用实例
- 吉大计算机学院大一课表,大学计算机基础(吉林大学)大学计算机基础课程计划及方案.doc...
- 我真感觉软件测试不难,自己技术也过得去,为什么我找不到工作呢?面了好多家,都没有收到offer。
- ABP 使用[DontWrapResult]注解去掉接口返回的“__abp”