工作日报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云电子发票打印机商业竞争日益激烈,在零售消费服务行业内,消费者对于商家的服务水平质量要求越来越高商家要通过更好更快的服务才能建立良好的口碑。而打发票这个消费最后环节,对于商家而言,既要进行硬件投入
胖东来如何炼就成零售商超中的海底捞?马云称赞它引发了我国零售商的新考虑,是我国企业的一面旗子。雷军称誉它在我国零售业一直是神般存在。招商证券在一份研报中称赞说,它是一家将用户体验做到极致的零售公司。它所在的新乡和许昌