范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

工作日报2022。1。19mavengradle插件如何上传多渠道library

  2022.1.19问题澄清;记录仪屏蔽通知栏开发澄清文档书写。codex问题处理;后续流程跟踪。翻译词条归一整理;安全终端加密服务密保保存功能,增加OTA参数;合入布控球振动修改;
  maven gradle插件如何上传多渠道library
  1、背景
  对接的第三方SDK分联调版(测试环境)跟正式版(生产环境),调试时用联调版,上线用正式版。两个环境对应不同的代码、资源文件,考虑到复用问题,因此新建一个library集成这个SDK,并上传到公共库,之后在项目中直接依赖即可。
  2、需求及实现
  2.1、需求
  因为分两个版本,且版本的代码、资源各不相同,因此这个library应该要实现以下需求
  一个library module包含多个渠道flavor
  可以单独上传flavor,并且互不影响
  2.2、一个任务上传一个渠道
  正常情况下使用maven 插件是这样:
  apply plugin: "com.android.library"
  apply plugin: "maven"
  1
  2
  然后用uploadArchives配置pom相关信息,和上传路径等:   uploadArchives {   repositories.mavenDeployer {   pom.groupId = GROUP   pom.artifactId = ARTIFACT_ID   pom.version = VERSION_NAME   repository(url: REPOSITORY_URL) {   authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)   }   }   }   最后执行uploadArchives任务即可上传成功。   但是这样显然不符合需求,多个渠道的情况下会有多个aar,且pom.artifactId也是不一样的,需要针对性的配置。   2.3、一个任务同时上传多个渠道   查了好几天资料,都没发现什么有用的信息,大多都是针对单个flavor的,终于在StackOverflow上找到了一些有用信息,照葫芦画瓢,最后gradle如下:   import org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact //导入类   ...   android {   publishNonDefault true   productFlavors {   //调试环境、测试环境   dev {   }   //生产环境、正式环境   production {   }   }   ...   }   //配置要上传的文件信息   artifacts {   archives new DefaultPublishArtifact("production", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-production-release.aar"))   archives new DefaultPublishArtifact("dev", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-dev-release.aar"))   }   //上传任务配置   uploadArchives {   repositories.mavenDeployer {   ...   //添加过滤器   //正式环境   addFilter("pro") { artifact, file ->   artifact.name.contains("production") //production就是artifacts里指定的name   }   //测试环境   addFilter("dev") { artifact, file ->   artifact.name.contains("dev")   }   //单独设置pom文件   pom("pro").groupId = GROUP   pom("pro").artifactId = PRODUCTION_MAVEN.ARTIFACT_ID   pom("pro").version = PRODUCTION_MAVEN.VERSION_NAME   pom("dev").groupId = GROUP   pom("dev").artifactId = DEV_MAVEN.ARTIFACT_ID   pom("dev").version = DEV_MAVEN.VERSION_NAME   }   }   这样执行uploadArchives之后,就会上传多个渠道的aar了,这里算完成了一半。   2.4、自定义上传任务   要实现单个渠道上传,只靠uploadArchives这一个任务是不行的,因此要自定义上传任务,实现一样的功能。本质上uploadArchives也是Upload类型的Task,即我们可以照着uploadArchives自定义Task继承Upload:   //上传调试版aar   task uploadDev(type: Upload, group: "upload") {   repositories.mavenDeployer {   repository(url: uri("../repos")) {   }   addFilter("dev") { artifact, file ->   println("artifact " + artifact.name)   artifact.name.contains("dev")   }   pom("dev").groupId = MIGU_GROUP   pom("dev").artifactId = DEV_MAVEN.ARTIFACT_ID   pom("dev").version = DEV_MAVEN.VERSION_NAME   }   }   同步之后就会在upload目录下多了一个任务:   执行之后,就会发现这个错误:   No value has been specified for property ‘artifacts’.   这时看uploadArchives的源码是最好的,但是我不知道去哪里看,所以又耗费了我一些时间查资料。最后实在没辙,终于直面这个错误:既然没指定,那就显示的设置好了。   2.4.1 artifacts和configuration   配置上传信息的时候用到了artifacts,但是不知道为什么要这样写,看了下源码,artifacts和configurations都是位于project下:   //Configures the published artifacts for this project.   *configurations {   * //declaring new configuration that will be used to associate with artifacts   * schema   * }   * task schemaJar(type: Jar) {   * //some imaginary task that creates a jar artifact with the schema   * }   * artifacts {   * //configuration name and the task:   * schema schemaJar   * }   void artifacts(Closure configureClosure);   根据注释的说明,应该有个默认的configuration,是这样写的:   configurations {   archives   }   所以我们才能使用archives来配置要上传的文件,而看了Upload的源码后发现,artifacts并没有直接设置的方法,而是通过Configuration获取的:   /**   * Returns the artifacts which will be uploaded.   *   * @return the artifacts.   */   @InputFiles   public FileCollection getArtifacts() {   Configuration configuration = getConfiguration();   return configuration == null ? null : configuration.getAllArtifacts().getFiles();   }   也就说是要设置artifacts必须要先设置Configuration。通过打印configurations和上面的分析,archives就是我们的目标。所以手动把archives这个配置加进来:   //上传调试版aar   task uploadDev(type: Upload, group: "upload") {   //设置configuration   setConfiguration(project.configurations.getByName("archives"))   repositories.mavenDeployer {   ...   }   到这里已经可以了。   2.4.2 自定义artifacts和configuration   同样地,可以自定义configuration来过滤配置文件,自定义上传Task设置为该configuration即可   configurations {   dev   pro   }   //配置要上传的文件信息   artifacts {   pro new DefaultPublishArtifact("production", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-production-release.aar"))   dev new DefaultPublishArtifact("dev", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-dev-release.aar"))   }   //上传调试版aar   task uploadDev(type: Upload, group: "upload") {   //设置configuration   setConfiguration(project.configurations.getByName("dev"))   repositories.mavenDeployer {   ...   }   2.4.3 最终版本   configurations {   devArchives   proArchives   }   //配置要上传的文件信息   artifacts {   proArchives new DefaultPublishArtifact("production", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-production-release.aar"))   devArchives new DefaultPublishArtifact("dev", "aar", "aar", null, new Date(), new File("build/outputs/aar", "lib-dev-release.aar"))   }   //上传调试版aar   task uploadDev(type: Upload, group: "upload", dependsOn: "assembleDevRelease") {   setConfiguration(project.configurations.getByName("devArchives"))   repositories.mavenDeployer {   pom.groupId = MIGU_GROUP   pom.artifactId = DEV_MAVEN.ARTIFACT_ID   pom.version = DEV_MAVEN.VERSION_NAME   repository(url: uri("../repos")) {   }   }   }   //上传正式版aar   task uploadPro(type: Upload, group: "upload", dependsOn: "assembleProRelease") {   setConfiguration(project.configurations.getByName("proArchives"))   repositories.mavenDeployer {   pom.groupId = MIGU_GROUP   pom.artifactId = PRODUCTION_MAVEN.ARTIFACT_ID   pom.version = PRODUCTION_MAVEN.VERSION_NAME   repository(url: uri("../repos")) {   }   }   }   生成的两个任务分别用于上传联调版和正式版。为了每次上传都是最新版本,task可以依赖于assembleXXX后执行,如dependsOn: ‘assembleProRelease’

国货安踏李宁逆袭背后的数字化赋能每一个消费行业都值得被重新做一次。鞋服行业也不例外,以NEIWAI内外Ubras为典型代表的新锐品牌涌现在大众的视野里,弯道超车,定义鞋服时尚行业新风向与此同时,以安踏李宁特步为代东鹏饮料如何用信息化数字化炼就千亿市值?从20年前还是一家发不出工资濒临倒闭的民企起死回生,到2020年发展成为了仅次于红牛的行业老二,并在2021年5月27日迎来了企业的重大里程碑的时候,在A股上市了。从股票发行到市值城市一刻钟便民生活圈建设指南出台广百股份创新激发经营活力商务部办公厅等11部门关于印发城市一刻钟便民生活圈建设指南的通知7月20日,据商务部网站信息显示,商务部办公厅等11部门关于印发城市一刻钟便民生活圈建设指南的通知,其中提出,到20决胜私域运营的四大核心力及成功案例分享近年来,在互联网用户增速放缓公域流量红利逐渐消失公域平台获客成本高企的背景下,诸多品牌开始从流量思维向留量思维转型,纷纷开启私域流量池建设,私域生态不断繁荣,私域渠道加速增长。相比中国移动回应收取43个月漫游费吸取教训,加快完善产品近日,有消费者投诉,称亲人的手机一直被收取名为亲情省的漫游套餐费。对于已经被取消的业务为何一直收费,中国移动客服给出的解释却是用户不取消会一直默认收费。针对中国移动默默收取用户漫游壹号本荣获英特尔产品创新奖2021年4月13日,由英特尔主办的2021合作伙伴峰会CTECEOSummit2021在深圳湾鹏瑞莱佛士酒店隆重召开,壹号本CEOJack受邀参加本届领导人峰会,并获得了Inte共享产品涨价,景区充电宝1小时10元上热搜4月12日上午,景区充电宝1小时10元的话题冲上了微博热搜。据媒体报道,近日,不少消费者发现,在上海的普通商场内,不同品牌的共享充电宝在悄悄涨价。从最初的每小时1元,半小时免费的价小米开启造车路收购开道能否让荆棘载途化为坦途?在过去10年里我们经历了互联网时代的爆炸式发展,同时人工智能大数据分析等前沿科技的加入,让我们可以预估到未来10年将是万物互联的时代。而智能电动车也会像智能手机一样成为信息链接的终全新重磅车型亮相奇瑞鲲鹏双星秀自主油混研发最高水平8月29日,在奇瑞汽车2021年成都国际车展新闻发布会上,奇瑞汽车首款搭载鲲鹏DHT超级混动的PHEV车型正式定名瑞虎8PLUS鲲鹏e,瑞虎7系列旗舰产品瑞虎7PLUS首次亮相。他发票一扫即打XP420B云电子发票打印机商业竞争日益激烈,在零售消费服务行业内,消费者对于商家的服务水平质量要求越来越高商家要通过更好更快的服务才能建立良好的口碑。而打发票这个消费最后环节,对于商家而言,既要进行硬件投入胖东来如何炼就成零售商超中的海底捞?马云称赞它引发了我国零售商的新考虑,是我国企业的一面旗子。雷军称誉它在我国零售业一直是神般存在。招商证券在一份研报中称赞说,它是一家将用户体验做到极致的零售公司。它所在的新乡和许昌
iQOONeo6新品发布会曝光参数强悍操控热血酷玩iQOONeo6新品发布会4月13日1930双芯骁龙8Gen1独显芯片Pro电池丨闪充双电芯80W闪充4700mAh大电池配色复古未来主义橙色丨蓝色屏幕6。62英寸阿里巴巴淘宝首页猜你喜欢信息流推荐长序列建模实践,限时下载本文报告完整版共有18页,非常详尽,值得收藏。本报告下载领取方式详见文末本报告目录大纲如下手淘推荐业务与技术简介LALI粗排中的长序列优化实践ETA端到端的精排长序列建模本报告详细2021年全球可穿戴腕带设备出货量1。93亿台,苹果小米华为前三IT之家4月13日消息,今日,Canalys发布报告称,2021年全球可穿戴腕带设备出货量达到1。93亿台,同比增长4。3。IT之家了解到,报告显示,苹果以11。8的增长率和超39用Android来开发自适应机型屏幕大小的文本控件需求自适应大小的文本效果图项目开发中,开发人员根据UI人员提供的一套尺寸,布局了一些带文本的页面,往往会少考虑一些数据极限的问题,造成机型屏幕适配问题。例如文本(或数值)长度可变,SpringBoot启动流程SpringBoot启动流程我们简单的先介绍一下SpringBoot的启动流程都需要哪些步骤1。加载配置文件2。准备上下文环境3。创建上下文对象4。启动spring5。启动tomc建立全国统一的大市场,中小企业还有出路吗?建立全国统一的大市场,这两天一直充斥于网络,各个大V,经济学家从不同角度都在解读,也看了一些。不过总体上来说,都是似是而非的解释,没有一个说的比较通透的,容易理解的。如果按照我的个鸿蒙3。0正式版发布时间曝光,带来全新体验,安卓还香吗?拥抱鸿蒙拥抱未来对华为来讲,安卓早就不香了!对于因俄乌冲突,而被谷歌制裁的俄罗斯的市场,安卓也不香了!通过鸿蒙系统2。0的洗礼,华为手机用户已经成功的摆脱了对安卓系统的依赖,并且真难抵真香定律诱惑华为试水支付领域本报记者李冰华为扩边界,正式入局支付领域。日前,华为钱包APP进行了更新,不仅华为支付现身其中,还推出了首绑银行卡支付随机立减的营销活动。据了解,华为支付依托华为钱包APP为管理入春暖花开,换台云米新风空调远离花粉过敏春日回暖,万物复苏,不过对于花粉过敏的人来说,这春暖花开的季节,却是痛苦生活的开始。无所不在的花粉柳絮等致敏源,让人的鼻涕眼泪总是流个不停,更有甚者,会引发过敏性休克甚至危及生命。开发一个APP所需要的成本现代人由于忙碌的工作,很少进行社交,手机成为人与人之间链接的重要工具。微信微博等主流社交APP垄断了大量的社交人员和渠道,但大众的需求永远存在,走正确的路线场景应用的垂直社交依然充微软SurfaceLaptopStudio评测售价12188元起,凭什么值这个价?回想一下,微软SurfaceLaptopStudio可能是我目前接触的设计最复杂的数码产品,也是目前业内少有的能够将笔记本和平板电脑合二为一,并拥有笔记本娱乐平板三种模式的产品。拿