gradle 神器编译不同的渠道包

Android 进阶——Gradle 源集管理和多源集多渠道定制不同解决方案的分享 文章大纲引言一、Android Studio vs Gradle vs Android 插件二、多渠道定制前需要掌握的重要术语1、 源集SourceSet1.1、构建时Gradle 将`java/` 目录中的所有源代码将编译输出1.2、构建时 Gradle 将所有源集的清单按优先级合并到一个清单文件1.2.1、构建变体的清单文件1.2.2、应用模块的主清单文件1.2.3、所包含的库中的清单文件1.3、构建时Gradle 将`values` 下的资源文件合并在一起1.4、构建时Gradle 将`res`和`a 阅读详情

最近项目中每次遇到适配不同渠道的问题就头大,今天就在此总结整理一下遇到的问题吧。

首先假定一种需求:一款APP有两种版本,分别是免费版和付费版,需要在三个国家(中国,美国,英国)上线,那么一共就是6个版本,其中英国免费版需要添加一个google广告依赖。

分渠道当然是使用 productFlavors了。

    productFlavors {
        cnpayed {
            applicationId= "com.demo.pay"
            minSdkVersion 21
        }
        cnfree {
            applicationIdSuffix= "<span style="font-family: Arial, Helvetica, sans-serif;">com.demo.cn</span><span style="font-family: Arial, Helvetica, sans-serif;">.free"</span>
            minSdkVersion 21
        }
<span style="white-space:pre">	</span>...
<span style="white-space:pre">	</span>...
    }

纳尼??真的这么写么,用长者的话说:too young  too simple!!先贴下代码

    
    flavorDimensions "payment", "country"
    productFlavors {
        payed {
            dimension "payment"
            applicationIdSuffix= ".pay"
            minSdkVersion 21
        }
        free {
            applicationIdSuffix= ".free"
            dimension "payment"
            minSdkVersion 21
        }
        cn {
            dimension "country"
            applicationIdSuffix =".cn"
            minSdkVersion 11
        }
        us {
            dimension "country"
            applicationIdSuffix =".us"
            minSdkVersion 11
        }
        uk {
            dimension "country"
            applicationIdSuffix =".uk"
            minSdkVersion 11
        }
    }
解释一下,首先分两个维度:付费情况和国家,然后分别列出两个维度的内容并且标出属于哪个维度。

付费情况

        payed {
            dimension "payment"
            applicationIdSuffix= ".pay"
            minSdkVersion 21
        }
        free {
            applicationIdSuffix= ".free"
            dimension "payment"
            minSdkVersion 21
        }
国家

        cn {
            dimension "country"
            applicationIdSuffix =".cn"
            minSdkVersion 11
        }
        us {
            dimension "country"
            applicationIdSuffix =".us"
            minSdkVersion 11
        }
        uk {
            dimension "country"
            applicationIdSuffix =".uk"
            minSdkVersion 11
        }
来,看一下build variant 情况



不同的渠道都有了,吊吊的有木有?大笑

再说一下 applicationIdSuffix  

见名知意,就是包名后缀了,会在默认的包名后面添加,这样每个渠道都有自己的包名了。

接下来,我们说一下为不同渠道添加依赖的问题

假设我们为中国免费版本添加rxJava

freeCnCompile 'io.reactivex:rxandroid:1.1.0'  就是我们通常看到的flavorCompile  渠道名加上compile了。

再这里提出一个问题,假如我们有20个渠道,其中17个渠道需要分别处理的10个依赖包,怎么搞??憋笑,这个是真实需求啊!!!

来看看我之前是怎么处理的

flavor1Compile  依赖包1

flavor1Compile  依赖包2

flavor1Compile  依赖包3

。

。

。

flavor2Compile  依赖包1

flavor2Compile  依赖包2

flavor2Compile  依赖包3

.。

。

。

尼玛啊,想当年老师说过:看到重复代码,就像看到脸上有一口痰一样恶心有木有,有木有!!!

先放一放,我们解决下一个问题:

项目中需要分渠道使用plugin怎么搞?,flavorApply plugin  真心没有啊,捋一捋思路。嗯,先获取当前渠道名,然后使用task应用不同的插件

贴一下代码

import java.util.regex.Matcher
import java.util.regex.Pattern

def String getCurrentFlavor() {
    Gradle gradle = getGradle()
    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()

    Pattern pattern;

    if (tskReqStr.contains("assemble"))
        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
    else
        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")

    Matcher matcher = pattern.matcher(tskReqStr)

    if (matcher.find())
        return matcher.group(1).toLowerCase()
    else {
        println "NO MATCH FOUND"
        return "";
    }
}
gradle.projectsEvaluated {
    preBuild.dependsOn(applyGoogleServiceByProperty)
}
// Then check on the parameter, which comes from the command line
task applyGoogleServiceByProperty {
    println getCurrentFlavor();
    def flavorType = ""
    flavorType = getCurrentFlavor();
    if (flavorType.equals("payedCn")) {
        apply plugin: 'com.google.gms.google-services'
    }
}

虾面,我们解决一下刚才提出的问题

<pre name="code" class="html">dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    def currentFlavor = getCurrentFlavor()
    if (currentFlavor.equals("payedCn")||currentFlavor.equals("payedUs")) {
        compile 'com.github.bumptech.glide:glide:3.7.0'
    } else {
        compile 'com.google.firebase:firebase-analytics:9.2.1'

    }
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:support-v4:24.0.0'
}


贴一下参考资料

http://jiajixin.cn/2015/08/07/gradle-android/

https://chaosleong.gitbooks.io/gradle-for-android/content/advanced_build_customization/shrinking_resources.html

http://tech.meituan.com/mt-apk-adaptation.html


Docker环境下onlyOffice 7.5.1破解版部署全攻略(含ARM架构适配) 本文提供了在Docker环境中部署OnlyOffice 7.5.1破解版的完整实战指南。内容涵盖x86与ARM架构服务器的详细部署步骤、环境配置、持久化存储设置以及生产环境下的安全与性能优化。重点解决了ARM架构适配的常见问题,并分享了使用Docker Compose进行服务编排和日常维护的技巧,帮助用户快速搭建私有化文档协作平台。 阅读详情

相关推荐

MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼

本文针对MobaXterm远程连接频繁掉线问题,提供了3个SSH保活设置方案。从基础的SSH心跳机制到进阶的会话超时调整,再到TCP层保活与代理优化,全方位解决断连烦恼。特别适合需要稳定远程连接的开发者和运维人员,有效提升工作效率。

weixin_29250573的博客 487

Gradle获取当前编译的Flavor

利用编辑task来获取 因为在切到需要的flavor后编辑,开始命令如下 Executing tasks: [:app:assembleOkviewRelease] in project xxxx 编写获取方法: def variantName() { def split = getGradle().getStartParameter().getTaskRequests().toString().split(":"); if (split.length > 2){

Mr_su_9726的博客 4752

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

多渠道打包使用不同包名和签名配置

多渠道打包使用不同包名和签名配置 在app工程目录下的build.gradle文件进行配置: 1 配置多渠道 def IS_RELEASE = getGradle().getStartParameter().getTaskRequests().toString().contains("Release") flavorDimensions "default" productFlavors { local/*渠道名称*/ { if (IS_RELEASE) {/

码农的成长 1932

Java云上香云祭祀线上祭祀系统小程序源码

云上香云祭祀线上祭祀系统”,不仅是一种祭祀方式的创新,更是对传统文化的一次深情致敬。它让我们明白,无论时代如何变迁,对亲人的怀念与尊重永远不会改变。在这个特别的平台上,让我们共同守护那份跨越时空的爱与思念,让心灵得以安放,让生命之树常青。🌳。

2401_84413757的博客 804

U-net复现pytorch版本 以及制作自己的数据集并训练

GitHub链接: https://github.com/milesial/Pytorch-UNet 论文链接:

candice5566的博客 3万+

关于Android Studio配置Gradle生成不同的版本不同的渠道包

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34166472的博客 443

汽车OTA自动化测试解决方案

目前OTA远程升级技术已成为众多汽车制造商的标配。由于OTA升级可能会带来潜在的风险(特别是包含ECU固件更新的FOTA升级),针对OTA系统的测试过程就尤为重要。

东舟技术的博客 7760

Android Studio Gradle打包实践之多渠道+版本号管理

原文地址: http://ju.outofmemory.cn/entry/215254上次介绍了 Android Studio的安装、配置和基本使用 。这次讲一下Android Studio用到的打包工具Gradle。 Gradle 是一种构建项目的框架,兼容Maven、Ant,为Java项目提供了很多插件去实现打包功能。废话不多说,下面直接进入实战。当我写这篇博客的时候,Android Stud

dandan的专栏 6318

TOPCon vs PERC:2024年光伏电站投资,哪种技术更划算?

本文深入分析了2024年光伏电站投资中TOPCon与PERC技术的财务表现。通过对比初始系统成本、全生命周期发电量及环境适应性,指出当前TOPCon组件与PERC价差已显著缩小,其更高的转换效率和更低的衰减率能有效降低度电成本并提升项目内部收益率,为投资者提供更具长期价值的方案。

p5l2m9n4o6q的博客 267

Cisco三层交换机的详细配置

** 本文适用于新手小白以及微微基础的同学来用于参考,实验是在Cisco Packet Tracer Student 进行,实验最终效果如图所示,所有命令配置与图中的一致。 使用到的机器型号为:五台电脑,一台服务器,三个普通交换机(2960型号),一个三层交换机(3560-24PS),两台普通服务器(2811) 文章目录一、什么是三层交换机二、配置交换机步骤1.配置二层交换机2.配置三层交换机3.配置两台路由器以及最后一台电脑 一、什么是三层交换机 1.三层交换机 = 三层路由+二层交换机 2.工作在

真正的大师,永远都怀着一颗学徒的心。 4万+

android 渠道号_亲测:安卓打渠道包神器,1分钟出自动出100个渠道包

是美团开源的,个人觉得很好用,分享出来。下面是官方地址:https://github.com/Meituan-Dianping/walle注意:buildtoos最好选用27版本,因为新的buildtools是v3签名,会导致apk无法安装到安卓9手机上。说明:Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器瓦力通过在Apk中的APK Sign...

weixin_39677104的博客 502

cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae

参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证

weixin_42357472的博客 1万+

java下载json需要的包_渠道包打包神器 Walle(瓦力)

Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。Quick Start为了方便大家的使用,我们提供了2种使用方式:Gradle插件方式...

weixin_39951112的博客 151

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Walle —— Android多渠道打包神器

Walle为了android多渠道打包而生的工具,废话不多说直接上用法 配置build.gradle 在项目的build.gradle文件中添加walle插件依赖 dependencies { classpath 'com.meituan.android.walle:plugin:1.1.6' } 然后,在app的build.gradle文件中apply插件,同时添加一个用于读取渠道名的...

Android 开发架构 636

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

gradle神器~Android多渠道配置管理(1)

   前言           从事Android开发六年了,对个人的工作中遇到的Android多渠道实际情况做个总结,希望能与各位同行共同交流。   背景:          个人经历的公司有B2C、O2O和B2B等等吧,不管哪种形式的平台模式,都需要把Android APP的发布到不同的应用商店,国内市场的应用商店之多不用我说,各位同行也知晓。更坑的是各大应用商店平台的要求还不一样,在此情况下...

李文江 378

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android多渠道打包插件,Walle —— Android多渠道打包神器

在项目的build.gradle文件中添加walle插件依赖dependencies {classpath 'com.meituan.android.walle:plugin:1.1.6'}然后,在app的build.gradle文件中apply插件,同时添加一个用于读取渠道名的依赖库apply plugin: 'walle'dependencies {//walleimplementation ...

weixin_42477505的博客 659

gradle神器~Android多渠道配置管理之自动替换图标ICON和资源图片(4)

链接地址: gradle神器~Android多渠道配置管理之自动替换图标ICON和资源图片(3)                  https://blog.csdn.net/weixin_39539092/article/details/80693017          昨天我的朋友看了自动替换资源的讲解后给我说,你只是替换一个简单的icon耗时还能接受,但是定制化需要大量的替换资源图片、布局...

李文江 693

android 渠道打包工具,Walle —— Android多渠道打包神器

图片只为致敬斯坦·李Walle为了android多渠道打包而生的工具,废话不多说直接上用法配置build.gradle在项目的build.gradle文件中添加walle插件依赖dependencies {classpath 'com.meituan.android.walle:plugin:1.1.6'}然后,在app的build.gradle文件中apply插件,同时添加一个用于读取渠道名的依...

weixin_36230515的博客 1013

walle多渠道自动化打包

一、简介 Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器 瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。 二、Gradle插件使用方式 配置build.gradle 在...

Ya-Jun 的博客 605

使用Python脚本实现360加固后一键V2签名和Walle打出渠道包

由于Android应用市场的多样性,运营人员为了统计App在各应用市场的下载量,通常会要求Android的APP包要能够根据不同的应用市场打出对应的带这个渠道的apk,这就成了Android团队打包发布的任务之一——打渠道包。 Walle它是美团点评技术团队开源的,号称 Android Signature V2 Scheme签名下的新一代渠道包打包神器。

做更好的自己 3607

Android使用walle多渠道打包

  Walle 瓦力,Android Signature V2 Scheme签名下的新一代渠道包打包神器 瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。 Quick Start 为了方便大家的使用,我们提供了2种使用方式: ...

cmyperson的博客 1191

Android Signature V2 Scheme 签名下的新一代渠道包打包神器

Android Signature V2 Scheme 签名下的新一代渠道包打包神器

未来很长,但我会努力的走下去。 1596

Bugly多渠道(Walle)热更新解决方案

上文中讲了腾讯Bugly热更新的接入和具体使用,还没使用热更新的小伙伴可以移步去看一下: 一、Bugly热更新接入和使用 二、Bugly热更新+Walle(瓦力)多渠道打包解决方案 三、Bugly热更新+Walle(瓦力)多渠道打包+应用加固解决方案 这篇文章接着上一篇讲一下多渠道热更新解决方案,这里安利一下Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠...

lkjfyy的博客 1194

Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用

Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用

心现识变妙莲华 1872

美团walle多渠道打包

前言 美团的walle打包方案是基于Android Signature V2 Schme 签名下的新一代渠道包打包神器,他通过在ApkSignNature Block 区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包的生成效率。也就是说只需要编译打包一次,然后每个渠道复制一次,再往里面添加渠道信息。这样大大提高了打包的速率。 如果有想了此工具原理的同学,可以参考 新一代开源Android渠道包生成工具Walle。 美团walle打包的方式 1.通过gradle进行集成(本文着重介绍) 2.通过

小妖的博客 943
上一篇: Glide加载图片变色问题
下一篇: 假如今天你的mac升级后也崩溃了
闲人指路
博客等级 码龄12年 3粉丝 13原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值