2022。1。19问题澄清;记录仪屏蔽通知栏开发澄清文档书写。codex问题处理;后续流程跟踪。翻译词条归一整理;安全终端加密服务密保保存功能,增加OTA参数;合入布控球振动修改; mavengradle插件如何上传多渠道library 1、背景 对接的第三方SDK分联调版(测试环境)跟正式版(生产环境),调试时用联调版,上线用正式版。两个环境对应不同的代码、资源文件,考虑到复用问题,因此新建一个library集成这个SDK,并上传到公共库,之后在项目中直接依赖即可。 2、需求及实现 2。1、需求 因为分两个版本,且版本的代码、资源各不相同,因此这个library应该要实现以下需求 一个librarymodule包含多个渠道flavor 可以单独上传flavor,并且互不影响 2。2、一个任务上传一个渠道 正常情况下使用maven插件是这样: applyplugin:com。android。library applyplugin:maven 1hr2hr然后用uploadArchives配置pom相关信息,和上传路径等: uploadArchives{ repositories。mavenDeployer{ pom。groupIdGROUP pom。artifactIdARTIFACTID pom。versionVERSIONNAME repository(url:REPOSITORYURL){ authentication(userName:NEXUSUSERNAME,password:NEXUSPASSWORD) } } } 最后执行uploadArchives任务即可上传成功。 但是这样显然不符合需求,多个渠道的情况下会有多个aar,且pom。artifactId也是不一样的,需要针对性的配置。 2。3、一个任务同时上传多个渠道 查了好几天资料,都没发现什么有用的信息,大多都是针对单个flavor的,终于在StackOverflow上找到了一些有用信息,照葫芦画瓢,最后gradle如下: importorg。gradle。api。internal。artifacts。publish。DefaultPublishArtifact导入类 。。。 android{ publishNonDefaulttrue productFlavors{ 调试环境、测试环境 dev{ } 生产环境、正式环境 production{ } } 。。。 } 配置要上传的文件信息 artifacts{ archivesnewDefaultPublishArtifact(production,aar,aar,null,newDate(),newFile(buildoutputsaar,libproductionrelease。aar)) archivesnewDefaultPublishArtifact(dev,aar,aar,null,newDate(),newFile(buildoutputsaar,libdevrelease。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)。groupIdGROUP pom(pro)。artifactIdPRODUCTIONMAVEN。ARTIFACTID pom(pro)。versionPRODUCTIONMAVEN。VERSIONNAME pom(dev)。groupIdGROUP pom(dev)。artifactIdDEVMAVEN。ARTIFACTID pom(dev)。versionDEVMAVEN。VERSIONNAME } } 这样执行uploadArchives之后,就会上传多个渠道的aar了,这里算完成了一半。 2。4、自定义上传任务 要实现单个渠道上传,只靠uploadArchives这一个任务是不行的,因此要自定义上传任务,实现一样的功能。本质上uploadArchives也是Upload类型的Task,即我们可以照着uploadArchives自定义Task继承Upload: 上传调试版aar taskuploadDev(type:Upload,group:upload){ repositories。mavenDeployer{ repository(url:uri(。。repos)){ } addFilter(dev){artifact,file println(artifactartifact。name) artifact。name。contains(dev) } pom(dev)。groupIdMIGUGROUP pom(dev)。artifactIdDEVMAVEN。ARTIFACTID pom(dev)。versionDEVMAVEN。VERSIONNAME } } 同步之后就会在upload目录下多了一个任务: 执行之后,就会发现这个错误: Novaluehasbeenspecifiedforproperty‘artifacts’。 这时看uploadArchives的源码是最好的,但是我不知道去哪里看,所以又耗费了我一些时间查资料。最后实在没辙,终于直面这个错误:既然没指定,那就显示的设置好了。 2。4。1artifacts和configuration 配置上传信息的时候用到了artifacts,但是不知道为什么要这样写,看了下源码,artifacts和configurations都是位于project下: Configuresthepublishedartifactsforthisproject。 configurations{ declaringnewconfigurationthatwillbeusedtoassociatewithartifacts schema } taskschemaJar(type:Jar){ someimaginarytaskthatcreatesajarartifactwiththeschema } artifacts{ configurationnameandthetask: schemaschemaJar } voidartifacts(ClosureconfigureClosure); 根据注释的说明,应该有个默认的configuration,是这样写的: configurations{ archives } 所以我们才能使用archives来配置要上传的文件,而看了Upload的源码后发现,artifacts并没有直接设置的方法,而是通过Configuration获取的: Returnstheartifactswhichwillbeuploaded。 returntheartifacts。 InputFiles publicFileCollectiongetArtifacts(){ ConfigurationconfigurationgetConfiguration(); returnconfigurationnull?null:configuration。getAllArtifacts()。getFiles(); } 也就说是要设置artifacts必须要先设置Configuration。通过打印configurations和上面的分析,archives就是我们的目标。所以手动把archives这个配置加进来: 上传调试版aar taskuploadDev(type:Upload,group:upload){ 设置configuration setConfiguration(project。configurations。getByName(archives)) repositories。mavenDeployer{ 。。。 } 到这里已经可以了。 2。4。2自定义artifacts和configuration 同样地,可以自定义configuration来过滤配置文件,自定义上传Task设置为该configuration即可 configurations{ dev pro } 配置要上传的文件信息 artifacts{ pronewDefaultPublishArtifact(production,aar,aar,null,newDate(),newFile(buildoutputsaar,libproductionrelease。aar)) devnewDefaultPublishArtifact(dev,aar,aar,null,newDate(),newFile(buildoutputsaar,libdevrelease。aar)) } 上传调试版aar taskuploadDev(type:Upload,group:upload){ 设置configuration setConfiguration(project。configurations。getByName(dev)) repositories。mavenDeployer{ 。。。 } 2。4。3最终版本 configurations{ devArchives proArchives } 配置要上传的文件信息 artifacts{ proArchivesnewDefaultPublishArtifact(production,aar,aar,null,newDate(),newFile(buildoutputsaar,libproductionrelease。aar)) devArchivesnewDefaultPublishArtifact(dev,aar,aar,null,newDate(),newFile(buildoutputsaar,libdevrelease。aar)) } 上传调试版aar taskuploadDev(type:Upload,group:upload,dependsOn:assembleDevRelease){ setConfiguration(project。configurations。getByName(devArchives)) repositories。mavenDeployer{ pom。groupIdMIGUGROUP pom。artifactIdDEVMAVEN。ARTIFACTID pom。versionDEVMAVEN。VERSIONNAME repository(url:uri(。。repos)){ } } } 上传正式版aar taskuploadPro(type:Upload,group:upload,dependsOn:assembleProRelease){ setConfiguration(project。configurations。getByName(proArchives)) repositories。mavenDeployer{ pom。groupIdMIGUGROUP pom。artifactIdPRODUCTIONMAVEN。ARTIFACTID pom。versionPRODUCTIONMAVEN。VERSIONNAME repository(url:uri(。。repos)){ } } } 生成的两个任务分别用于上传联调版和正式版。为了每次上传都是最新版本,task可以依赖于assembleXXX后执行,如dependsOn:‘assembleProRelease’